tnx-shared 5.1.415 → 5.1.417

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.
@@ -127,8 +127,9 @@ export class UserPickerComponent extends ComponentBase {
127
127
  return value[this.control.valueField];
128
128
  };
129
129
  }
130
- else
130
+ else {
131
131
  this.funcReturnValue = value => value;
132
+ }
132
133
  this.buildFilterKeyword();
133
134
  this.buildSettingEntityPicker();
134
135
  this.createSchemaSearch();
@@ -578,4 +579,4 @@ UserPickerComponent.propDecorators = {
578
579
  onBlur: [{ type: Output, args: ['onBlur',] }],
579
580
  onReady: [{ type: Output, args: ['onReady',] }]
580
581
  };
581
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvdXNlci1waWNrZXIvdXNlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFFSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULHVCQUF1QixFQUN2QixRQUFRLEVBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQWdCOUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUF5RGxELFlBQ0ksU0FBbUIsRUFDWixj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QUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUE1Q0csUUFBUTtZQTJCSCxhQUFhO1lBbkJiLGdCQUFnQjtZQWtCaEIsZUFBZTs7OzhCQW9CbkIsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtzQkFJN0MsS0FBSzt3QkFDTCxLQUFLO3VCQUtMLEtBQUs7dUJBQ0wsS0FBSzs2QkFFTCxLQUFLO3FCQVNMLE1BQU07dUJBQ04sTUFBTSxTQUFDLFVBQVU7eUJBQ2pCLE1BQU0sU0FBQyxZQUFZO3dCQUNuQixNQUFNLFNBQUMsV0FBVztzQkFDbEIsTUFBTSxTQUFDLFNBQVM7cUJBQ2hCLE1BQU0sU0FBQyxRQUFRO3NCQUNmLE1BQU0sU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBDcnVkTGlzdFNldHRpbmcsXHJcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXHJcbiAgICBEcm9wZG93bk9wdGlvbnMsXHJcbiAgICBFbnRpdHlQaWNrZXJDb2x1bW4sXHJcbiAgICBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgSGVpZ2h0VHlwZSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplLFxyXG4gICAgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBVc2VyVHlwZVxyXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgRG1DaHVjVnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG0tY2h1Y3Z1LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyVjVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci12NS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5pbXBvcnQgeyBVc2VyUGlja2VyQm94Q29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXBpY2tlci1ib3gvdXNlci1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndXNlci1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VzZXItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBVc2VyUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyQ2h1Y1Z1UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsdGVyQ2h1Y1Z1UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgb25DaGFuZ2VCYXNlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBASW5wdXQoKSBwb3B1cFNpemU6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgIHdpZHRoOiAxMTAwLFxyXG4gICAgICAgIGhlaWdodDogOTAwLFxyXG4gICAgICAgIG1heGltaXplOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWFkT25seUl0ZW0oKTtcclxuICAgIH1cclxuICAgIGdldCByZWFkT25seVZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlWYWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25TZWxlY3QnKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoJ29uVW5TZWxlY3QnKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25DaGFuZ2VkJykgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25Gb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvbkJsdXInKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvblJlYWR5Jykgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBjb250cm9sUGlja2VyOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xyXG4gICAgc2V0dGluZ1BpY2tlcjogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgYWR2YW5jZURhdGFQaWNrZXI6IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyID0gbmV3IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyKCk7XHJcblxyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGZ1bmNSZXR1cm5WYWx1ZTogKHZhbHVlKSA9PiB7fSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgc2VsZWN0ZWRSb3dEYXRhOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlT2JqZWN0OiBhbnk7XHJcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgZnVuY0NoZWNrUmVhZE9ubHlJdGVtOiAoaXRlbTogYW55KSA9PiB2b2lkO1xyXG5cclxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICBkaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgIHRvb2x0aXAgPSAnJztcclxuICAgIGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBzZWFyY2hTY2hlbWE6IGFueSA9IHt9O1xyXG4gICAgc2VhcmNoRGF0YTogYW55ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPblNlYXJjaD86IEZ1bmN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIF91c2VyVjVTZXJ2aWNlOiBVc2VyVjVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1fQ2h1Y1Z1U2VydmljZTogRG1DaHVjVnVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBjb25zdCBjb21tb25GaWVsZFBsdXMgPSAnbWFDaHVjVnUsbHN0VGVuRG9uVmknO1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlciA9IG5ldyBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb250cm9sLFxyXG4gICAgICAgICAgICBmaWVsZDogJ2FycklkTmd1b2lEdW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdOZ8aw4budaSBkw7luZycsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ2jhu41uIG5nxrDhu51pIGTDuW5nJyxcclxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX3VzZXJWNVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5nZXREaXNwbGF5TmFtZSA/ICdkaXNwbGF5TmFtZScgOiAnZnVsbE5hbWVOZXcnLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMgPyBgJHt0aGlzLmNvbnRyb2wuZmllbGRQbHVzfSwke2NvbW1vbkZpZWxkUGx1c31gIDogY29tbW9uRmllbGRQbHVzLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuY29udHJvbC5tdWx0aXBsZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHJldHVybiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGlzcGxheU5hbWUgPz8gdGhpcy5fdXNlclY1U2VydmljZS5nZXRVc2VyTmFtZShpdGVtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gcGFnZVNpemU6IHRoaXMuY29udHJvbC5wYWdlU2l6ZSxcclxuICAgICAgICAgICAgLy8gZmllbGRQbHVzOiAnaG8sdGVuJyxcclxuICAgICAgICAgICAgLy8gZmllbGRTZWFyY2hUZXh0OiBbJ2hvJywgJ3RlbiddLFxyXG4gICAgICAgICAgICAvLyBhZnRlckdldERhdGE6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhUGlja2VkOiB0aGlzLmdlbmVyYXRlSG9UZW4sXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVMOgaSBraG/huqNuJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAndXNlck5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdmdWxsTmFtZU5ldycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnSMOybSB0aMawJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnbHN0VGVuQ2h1Y1Z1JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb2RlOiAnbWFDaHVjVnUnLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyOiB0aGlzLmZpbHRlckNodWNWdVJlZixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bqjbmcgdmnDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdpc0dpYW5nVmllbicsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheTogdGhpcy5jb250cm9sLnVzZXJUeXBlID09PSBVc2VyVHlwZS5DYW5CbyxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDaHV5w6puIHZpw6puJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaXNDaHV5ZW5WaWVuJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2Jvb2xlYW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5OiB0aGlzLmNvbnRyb2wudXNlclR5cGUgPT09IFVzZXJUeXBlLkNhbkJvLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0XTtcclxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTZWFyY2hUZXh0LnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0LnB1c2godGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWFTZWFyY2goKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xyXG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlWYWx1ZXMgJiYgdGhpcy5yZWFkT25seVZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0gPSB0aGlzLl9mdW5jQ2hlY2tSZWFkT25seUl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IChpdGVtOiBhbnkpID0+IHsgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlU2NoZW1hU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2NoZW1hLmlkQ2h1Y1Z1cyA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICBmaWVsZDogJ2lkQ2h1Y1Z1cycsXHJcbiAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0No4buNbiBjaOG7qWMgduG7pScsXHJcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6ICdzb1RodVR1JyxcclxuICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyS2V5d29yZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQsIE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcihmaWVsZFNlYXJjaCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci50aXRsZSA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIucGFnZVNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLnBhZ2VTZXR0aW5nLnBhZ2VTaXplID0gdGhpcy5jb250cm9sUGlja2VyLnBhZ2VTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuYmFzZVNlcnZpY2UgPSB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhpZGRlbkNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuc2V0dGluZ0tleSA9ICd1c2VyUGlja2VyJztcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5maWVsZFNlYXJjaFRleHQgPSB0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0Rpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29sdW1uLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IGNvbHVtbi5iYXNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRQbHVzOiBjb2x1bW4uZmllbGRQbHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0RmllbGQ6IGNvbHVtbi5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI6IGNvbHVtbi5zb3J0RGlyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWw6IGNvbHVtbi5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbHVtbi5kYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENvZGU6IGNvbHVtbi5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5jb2xzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VEYXRhUGlja2VyLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTOG6pXkgdW5pb24gY+G7p2E6IHNlbGVjdGVkRmllbGQsIGZpZWxkUGx1cywgZGlzcGxheSBmaWVsZHMgY8OzIHRyb25nIHRhYmxlLlxyXG4gICAgZ2V0RmllbGRzKCkge1xyXG4gICAgICAgIGNvbnN0IGFyckZpZWxkOiBzdHJpbmdbXSA9IFt0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkLCAnaWQnXTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgJiYgdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzKSB7XHJcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2goLi4udGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cy5zcGxpdCgnLCcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyckRpc3BsYXlGaWVsZCA9IHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4LmlzRGlzcGxheSA9PSB0cnVlICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXHJcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGFyckRpc3BsYXlGaWVsZCwgYXJyRmllbGQpO1xyXG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERyb3Bkb3duT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogdGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2xQaWNrZXIuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2xQaWNrZXIucGx1c1VybFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dQaWNrRm9ybSgpIHtcclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YShrZXlXb3JkKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEluLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICBpZiAoa2V5V29yZCAmJiBrZXlXb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZWFyY2goa2V5V29yZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgLy8gUmV0dXJuIMSR4buDIG3hu5l0IHPhu5EgbsahaSBraMOhYyBkw7luZywgayByZW1vdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YShldmVudC5xdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KHtcclxuICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSb3dTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEgPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxyXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIELhu48gc2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVVblNlbGVjdCgkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06ICRldmVudCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoZXZ0KTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQmx1cigkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlS2V5VXAoZXZ0KSB7XHJcbiAgICAgICAgbGV0IGhpZGVTdWdnZXNzaW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiBldnQua2V5Q29kZSA9PSA0MCAmJiBoaWRlU3VnZ2Vzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlID09ICcnICYmIGhpZGVTdWdnZXNzaW9ucyAmJiBldnQua2V5Q29kZSAhPSA0MCAmJiBldnQua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVuc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcclxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XHJcbiAgICBoYW5kbGVDaGFuZ2VFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzLnNvbWUocSA9PiBxID09IGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSkge1xyXG4gICAgICAgICAgICBpdGVtLl9kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVQdXJlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQdXJlVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUNoYW5nZUV2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmV0dXJuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1N1Ym1pdEJ1dHRvbihldnQsIHVzZXJQaWNrZXJCb3g6IFVzZXJQaWNrZXJCb3hDb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xyXG4gICAgICAgICAgICBpZiAodXNlclBpY2tlckJveCAmJiB1c2VyUGlja2VyQm94LmVudGl0eVBpY2tlckJveCkge1xyXG4gICAgICAgICAgICAgICAgdXNlclBpY2tlckJveC5lbnRpdHlQaWNrZXJCb3guaGFuZGxlUGljayh0aGlzLnNlbGVjdGVkUm93RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZVN0cnVjdHVyZURhdGFTb3VyY2Uoc291cmNlczogYW55W10pIHtcclxuICAgICAgICBpZiAoc291cmNlcyAhPSBudWxsICYmIHNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMOqbSB0aMO0bmcgdGluIGNo4bupYyB24bulIMSR4buDIGhp4buDbiB0aOG7i1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XHJcbiAgICAgICAgY29uc3QgdGVtcDogU2VsZWN0SXRlbSA9IHsgdmFsdWU6IGl0ZW0gfTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5jb250cm9sUGlja2VyLmZ1bmNHZXRMYWJlbChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQgIT09ICdmdWxsTmFtZU5ldycpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5fdXNlclY1U2VydmljZS5nZXRGdWxsQ2FuQm9MYWJlbChpdGVtLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwgJiYgb2JqLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmopKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCBvYmopXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICApLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
582
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvdXNlci1waWNrZXIvdXNlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFFSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULHVCQUF1QixFQUN2QixRQUFRLEVBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQWdCOUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUF5RGxELFlBQ0ksU0FBbUIsRUFDWixj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O3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUE1Q0csUUFBUTtZQTJCSCxhQUFhO1lBbkJiLGdCQUFnQjtZQWtCaEIsZUFBZTs7OzhCQW9CbkIsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtzQkFJN0MsS0FBSzt3QkFDTCxLQUFLO3VCQUtMLEtBQUs7dUJBQ0wsS0FBSzs2QkFFTCxLQUFLO3FCQVNMLE1BQU07dUJBQ04sTUFBTSxTQUFDLFVBQVU7eUJBQ2pCLE1BQU0sU0FBQyxZQUFZO3dCQUNuQixNQUFNLFNBQUMsV0FBVztzQkFDbEIsTUFBTSxTQUFDLFNBQVM7cUJBQ2hCLE1BQU0sU0FBQyxRQUFRO3NCQUNmLE1BQU0sU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBDcnVkTGlzdFNldHRpbmcsXHJcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXHJcbiAgICBEcm9wZG93bk9wdGlvbnMsXHJcbiAgICBFbnRpdHlQaWNrZXJDb2x1bW4sXHJcbiAgICBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgSGVpZ2h0VHlwZSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplLFxyXG4gICAgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBVc2VyVHlwZVxyXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgRG1DaHVjVnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG0tY2h1Y3Z1LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyVjVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci12NS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5pbXBvcnQgeyBVc2VyUGlja2VyQm94Q29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXBpY2tlci1ib3gvdXNlci1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndXNlci1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VzZXItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBVc2VyUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyQ2h1Y1Z1UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsdGVyQ2h1Y1Z1UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgb25DaGFuZ2VCYXNlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBASW5wdXQoKSBwb3B1cFNpemU6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgIHdpZHRoOiAxMTAwLFxyXG4gICAgICAgIGhlaWdodDogOTAwLFxyXG4gICAgICAgIG1heGltaXplOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWFkT25seUl0ZW0oKTtcclxuICAgIH1cclxuICAgIGdldCByZWFkT25seVZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlWYWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25TZWxlY3QnKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoJ29uVW5TZWxlY3QnKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25DaGFuZ2VkJykgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25Gb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvbkJsdXInKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvblJlYWR5Jykgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBjb250cm9sUGlja2VyOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xyXG4gICAgc2V0dGluZ1BpY2tlcjogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgYWR2YW5jZURhdGFQaWNrZXI6IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyID0gbmV3IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyKCk7XHJcblxyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGZ1bmNSZXR1cm5WYWx1ZTogKHZhbHVlKSA9PiB7fSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgc2VsZWN0ZWRSb3dEYXRhOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlT2JqZWN0OiBhbnk7XHJcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgZnVuY0NoZWNrUmVhZE9ubHlJdGVtOiAoaXRlbTogYW55KSA9PiB2b2lkO1xyXG5cclxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICBkaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgIHRvb2x0aXAgPSAnJztcclxuICAgIGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBzZWFyY2hTY2hlbWE6IGFueSA9IHt9O1xyXG4gICAgc2VhcmNoRGF0YTogYW55ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPblNlYXJjaD86IEZ1bmN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIF91c2VyVjVTZXJ2aWNlOiBVc2VyVjVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1fQ2h1Y1Z1U2VydmljZTogRG1DaHVjVnVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBjb25zdCBjb21tb25GaWVsZFBsdXMgPSAnbWFDaHVjVnUsbHN0VGVuRG9uVmknO1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlciA9IG5ldyBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb250cm9sLFxyXG4gICAgICAgICAgICBmaWVsZDogJ2FycklkTmd1b2lEdW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdOZ8aw4budaSBkw7luZycsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ2jhu41uIG5nxrDhu51pIGTDuW5nJyxcclxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX3VzZXJWNVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5nZXREaXNwbGF5TmFtZSA/ICdkaXNwbGF5TmFtZScgOiAnZnVsbE5hbWVOZXcnLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMgPyBgJHt0aGlzLmNvbnRyb2wuZmllbGRQbHVzfSwke2NvbW1vbkZpZWxkUGx1c31gIDogY29tbW9uRmllbGRQbHVzLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuY29udHJvbC5tdWx0aXBsZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHJldHVybiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGlzcGxheU5hbWUgPz8gdGhpcy5fdXNlclY1U2VydmljZS5nZXRVc2VyTmFtZShpdGVtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gcGFnZVNpemU6IHRoaXMuY29udHJvbC5wYWdlU2l6ZSxcclxuICAgICAgICAgICAgLy8gZmllbGRQbHVzOiAnaG8sdGVuJyxcclxuICAgICAgICAgICAgLy8gZmllbGRTZWFyY2hUZXh0OiBbJ2hvJywgJ3RlbiddLFxyXG4gICAgICAgICAgICAvLyBhZnRlckdldERhdGE6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhUGlja2VkOiB0aGlzLmdlbmVyYXRlSG9UZW4sXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVMOgaSBraG/huqNuJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAndXNlck5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdmdWxsTmFtZU5ldycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnSMOybSB0aMawJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnbHN0VGVuQ2h1Y1Z1JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb2RlOiAnbWFDaHVjVnUnLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyOiB0aGlzLmZpbHRlckNodWNWdVJlZixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bqjbmcgdmnDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdpc0dpYW5nVmllbicsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheTogdGhpcy5jb250cm9sLnVzZXJUeXBlID09PSBVc2VyVHlwZS5DYW5CbyxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDaHV5w6puIHZpw6puJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaXNDaHV5ZW5WaWVuJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2Jvb2xlYW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5OiB0aGlzLmNvbnRyb2wudXNlclR5cGUgPT09IFVzZXJUeXBlLkNhbkJvLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0XTtcclxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTZWFyY2hUZXh0LnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0LnB1c2godGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWFTZWFyY2goKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xyXG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlWYWx1ZXMgJiYgdGhpcy5yZWFkT25seVZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0gPSB0aGlzLl9mdW5jQ2hlY2tSZWFkT25seUl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IChpdGVtOiBhbnkpID0+IHsgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlU2NoZW1hU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2NoZW1hLmlkQ2h1Y1Z1cyA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICBmaWVsZDogJ2lkQ2h1Y1Z1cycsXHJcbiAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0No4buNbiBjaOG7qWMgduG7pScsXHJcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6ICdzb1RodVR1JyxcclxuICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyS2V5d29yZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQsIE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcihmaWVsZFNlYXJjaCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci50aXRsZSA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIucGFnZVNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLnBhZ2VTZXR0aW5nLnBhZ2VTaXplID0gdGhpcy5jb250cm9sUGlja2VyLnBhZ2VTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuYmFzZVNlcnZpY2UgPSB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhpZGRlbkNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuc2V0dGluZ0tleSA9ICd1c2VyUGlja2VyJztcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5maWVsZFNlYXJjaFRleHQgPSB0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0Rpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29sdW1uLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IGNvbHVtbi5iYXNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRQbHVzOiBjb2x1bW4uZmllbGRQbHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0RmllbGQ6IGNvbHVtbi5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI6IGNvbHVtbi5zb3J0RGlyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWw6IGNvbHVtbi5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbHVtbi5kYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENvZGU6IGNvbHVtbi5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5jb2xzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VEYXRhUGlja2VyLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTOG6pXkgdW5pb24gY+G7p2E6IHNlbGVjdGVkRmllbGQsIGZpZWxkUGx1cywgZGlzcGxheSBmaWVsZHMgY8OzIHRyb25nIHRhYmxlLlxyXG4gICAgZ2V0RmllbGRzKCkge1xyXG4gICAgICAgIGNvbnN0IGFyckZpZWxkOiBzdHJpbmdbXSA9IFt0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkLCAnaWQnXTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgJiYgdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzKSB7XHJcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2goLi4udGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cy5zcGxpdCgnLCcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyckRpc3BsYXlGaWVsZCA9IHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4LmlzRGlzcGxheSA9PSB0cnVlICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXHJcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGFyckRpc3BsYXlGaWVsZCwgYXJyRmllbGQpO1xyXG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERyb3Bkb3duT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogdGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2xQaWNrZXIuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2xQaWNrZXIucGx1c1VybFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dQaWNrRm9ybSgpIHtcclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YShrZXlXb3JkKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEluLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICBpZiAoa2V5V29yZCAmJiBrZXlXb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZWFyY2goa2V5V29yZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgLy8gUmV0dXJuIMSR4buDIG3hu5l0IHPhu5EgbsahaSBraMOhYyBkw7luZywgayByZW1vdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YShldmVudC5xdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KHtcclxuICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSb3dTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEgPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxyXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIELhu48gc2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVVblNlbGVjdCgkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06ICRldmVudCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoZXZ0KTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQmx1cigkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlS2V5VXAoZXZ0KSB7XHJcbiAgICAgICAgbGV0IGhpZGVTdWdnZXNzaW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiBldnQua2V5Q29kZSA9PSA0MCAmJiBoaWRlU3VnZ2Vzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlID09ICcnICYmIGhpZGVTdWdnZXNzaW9ucyAmJiBldnQua2V5Q29kZSAhPSA0MCAmJiBldnQua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVuc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcclxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XHJcbiAgICBoYW5kbGVDaGFuZ2VFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzLnNvbWUocSA9PiBxID09IGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSkge1xyXG4gICAgICAgICAgICBpdGVtLl9kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVQdXJlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQdXJlVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUNoYW5nZUV2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmV0dXJuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1N1Ym1pdEJ1dHRvbihldnQsIHVzZXJQaWNrZXJCb3g6IFVzZXJQaWNrZXJCb3hDb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xyXG4gICAgICAgICAgICBpZiAodXNlclBpY2tlckJveCAmJiB1c2VyUGlja2VyQm94LmVudGl0eVBpY2tlckJveCkge1xyXG4gICAgICAgICAgICAgICAgdXNlclBpY2tlckJveC5lbnRpdHlQaWNrZXJCb3guaGFuZGxlUGljayh0aGlzLnNlbGVjdGVkUm93RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZVN0cnVjdHVyZURhdGFTb3VyY2Uoc291cmNlczogYW55W10pIHtcclxuICAgICAgICBpZiAoc291cmNlcyAhPSBudWxsICYmIHNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMOqbSB0aMO0bmcgdGluIGNo4bupYyB24bulIMSR4buDIGhp4buDbiB0aOG7i1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XHJcbiAgICAgICAgY29uc3QgdGVtcDogU2VsZWN0SXRlbSA9IHsgdmFsdWU6IGl0ZW0gfTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5jb250cm9sUGlja2VyLmZ1bmNHZXRMYWJlbChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQgIT09ICdmdWxsTmFtZU5ldycpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5fdXNlclY1U2VydmljZS5nZXRGdWxsQ2FuQm9MYWJlbChpdGVtLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwgJiYgb2JqLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmopKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCBvYmopXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICApLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -92,4 +92,4 @@ AuthorizeDirective.propDecorators = {
92
92
  enableAuthorize: [{ type: Input }],
93
93
  keepHTML: [{ type: Input, args: ['keepHTML',] }]
94
94
  };
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJkaXJlY3RpdmVzL2F1dGhvcml6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTXZELE1BQU0sT0FBTyxrQkFBa0I7SUE2QjNCLFlBQW9CLEdBQWUsRUFDZixrQkFBcUMsRUFDckMsWUFBeUIsRUFDekIsb0JBQXlDO1FBSHpDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUEzQm5ELHFCQUFnQixHQUFvQixlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ25ELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBVTlCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUl4QyxrSUFBa0k7UUFDekgsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFLekMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQVFqQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksQ0FBQyxX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LEVBQUU7WUFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDTCxDQUFDOzs7WUEzRkosU0FBUyxTQUFDO2dCQUNQLDhDQUE4QztnQkFDOUMsUUFBUSxFQUFFLGdCQUFnQjthQUM3Qjs7O1lBVHdDLFVBQVU7WUFHMUMsaUJBQWlCO1lBQ2pCLFdBQVc7WUFGWCxtQkFBbUI7OzsyQkFnQnZCLEtBQUs7NkJBSUwsS0FBSztxQ0FJTCxLQUFLO3lCQUVMLEtBQUs7eUJBQ0wsS0FBSzs4QkFFTCxLQUFLO3VCQUdMLEtBQUssU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ1thcHBBdXRob3JpemVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICAgIHByb3RlY3RlZCBfbW9kdWxlQ29kZTogYW55O1xyXG4gICAgcHJvdGVjdGVkIF9lbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIHByb3RlY3RlZCBfbGFiZWw6IEhUTUxFbGVtZW50O1xyXG4gICAgcHJvdGVjdGVkIF9iaW5kOiBib29sZWFuO1xyXG4gICAgcHJvdGVjdGVkIF9wZXJtaXNzaW9uVHlwZXM6IFBlcm1pc3Npb25UeXBlcyA9IFBlcm1pc3Npb25UeXBlcy5DT05UUk9MO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlnbm9yZUFkbWluID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KCkgc2V0IGFwcEF1dGhvcml6ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29kZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHNldCBwZXJtaXNzaW9uVHlwZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvblR5cGVzID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgaXNOYXZpZ2F0aW9uUGVybWlzc2lvbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbnRyb2xsZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHBlcm1pc3Npb246IHN0cmluZztcclxuICAgIC8vIETDuW5nIHRyb25nIG3hu5l0IHPhu5EgdHLGsOG7nW5nIGjhu6NwIGNvZGUgZMO5bmcgY2h1bmcgdGVtcGxhdGUsIGJ14buZYyBwaOG6o2kga2hhaSBiw6FvIGRpcmVjdGl2ZSBuaMawbmcga2jDtG5nIHBo4bqjaSBlbGVtZW50IG7DoG8gY8WpbmcgY+G6p24gY2hlY2tcclxuICAgIEBJbnB1dCgpIGVuYWJsZUF1dGhvcml6ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxyXG4gICAgQElucHV0KCdrZWVwSFRNTCcpIGtlZXBIVE1MOiBib29sZWFuO1xyXG5cclxuICAgIGFwcENvZGU6IHN0cmluZyA9ICcnO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbDogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBfZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcENvZGU7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XHJcbiAgICAgICAgdGhpcy5pZ25vcmVBZG1pbiA9IHRoaXMuZW52aXJvbm1lbnQuaXNJZ25vcmVBZG1pbjtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlQXV0aG9yaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX21vZHVsZUNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICghY3VycmVudFVzZXIgfHwgISh0aGlzLmFwcENvZGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdLaMO0bmcgxJHhu41jIMSRxrDhu6NjIHVzZXIgaG/hurdjIGFwcENvZGUnKTtcclxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRVc2VyXHJcbiAgICAgICAgICAgICYmIGN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgICAmJiAoIXRoaXMuaWdub3JlQWRtaW4gJiYgY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9sZERpc3BsYXkgPSB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZCh0aGlzLmFwcENvZGUsIHRoaXMucGVybWlzc2lvbikudGhlbihpc0F1dGhvcml6ZWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBvbGREaXNwbGF5O1xyXG4gICAgICAgICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQubm9kZU5hbWUgPT0gJ1AtVEFCUEFORUwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9lbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclRhYkxhYmVsID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KCcucC10YWJ2aWV3LXBhbmVscycpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcucXVlcnlTZWxlY3RvcihgIyR7aWR9LWxhYmVsYCkucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJUYWJMYWJlbC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmtlZXBIVE1MKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2xhYmVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9sYWJlbCAmJiAhdGhpcy5fYmluZCAmJiB0aGlzLl9lbGVtZW50LmlubmVySFRNTCAhPT0gJycgJiYgdGhpcy5rZWVwSFRNTCkge1xyXG4gICAgICAgICAgICB0aGlzLl9sYWJlbC5pbm5lckhUTUwgPSB0aGlzLl9lbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgICAgICAgdGhpcy5fYmluZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJkaXJlY3RpdmVzL2F1dGhvcml6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTXZELE1BQU0sT0FBTyxrQkFBa0I7SUE2QjNCLFlBQ1ksR0FBZSxFQUNmLGtCQUFxQyxFQUNyQyxZQUF5QixFQUN6QixvQkFBeUM7UUFIekMsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQTVCM0MscUJBQWdCLEdBQW9CLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFVOUIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBSXhDLGtJQUFrSTtRQUN6SCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUt6QyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBU2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdB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RUFBRTtZQUMvRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNyQjtJQUNMLENBQUM7OztZQTVGSixTQUFTLFNBQUM7Z0JBQ1AsOENBQThDO2dCQUM5QyxRQUFRLEVBQUUsZ0JBQWdCO2FBQzdCOzs7WUFUd0MsVUFBVTtZQUcxQyxpQkFBaUI7WUFDakIsV0FBVztZQUZYLG1CQUFtQjs7OzJCQWdCdkIsS0FBSzs2QkFJTCxLQUFLO3FDQUlMLEtBQUs7eUJBRUwsS0FBSzt5QkFDTCxLQUFLOzhCQUVMLEtBQUs7dUJBR0wsS0FBSyxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRDaGVja2VkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblR5cGVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcclxuICAgIHNlbGVjdG9yOiAnW2FwcEF1dGhvcml6ZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gICAgcHJvdGVjdGVkIF9tb2R1bGVDb2RlOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgcHJvdGVjdGVkIF9sYWJlbDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcm90ZWN0ZWQgX2JpbmQ6IGJvb2xlYW47XHJcbiAgICBwcm90ZWN0ZWQgX3Blcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVzID0gUGVybWlzc2lvblR5cGVzLkNPTlRST0w7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWdub3JlQWRtaW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgYXBwQXV0aG9yaXplKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9tb2R1bGVDb2RlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHBlcm1pc3Npb25UeXBlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uVHlwZXMgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBpc05hdmlnYXRpb25QZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbGxlcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcGVybWlzc2lvbjogc3RyaW5nO1xyXG4gICAgLy8gRMO5bmcgdHJvbmcgbeG7mXQgc+G7kSB0csaw4budbmcgaOG7o3AgY29kZSBkw7luZyBjaHVuZyB0ZW1wbGF0ZSwgYnXhu5ljIHBo4bqjaSBraGFpIGLDoW8gZGlyZWN0aXZlIG5oxrBuZyBraMO0bmcgcGjhuqNpIGVsZW1lbnQgbsOgbyBjxaluZyBj4bqnbiBjaGVja1xyXG4gICAgQElucHV0KCkgZW5hYmxlQXV0aG9yaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcbiAgICBASW5wdXQoJ2tlZXBIVE1MJykga2VlcEhUTUw6IGJvb2xlYW47XHJcblxyXG4gICAgYXBwQ29kZTogc3RyaW5nID0gJyc7XHJcbiAgICBlbnZpcm9ubWVudDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IF9lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5lbnZpcm9ubWVudC5pc0lnbm9yZUFkbWluO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVBdXRob3JpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW9kdWxlQ29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9tb2R1bGVDb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50VXNlciB8fCAhKHRoaXMuYXBwQ29kZSkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0tow7RuZyDEkeG7jWMgxJHGsOG7o2MgdXNlciBob+G6t2MgYXBwQ29kZScpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudFVzZXJcclxuICAgICAgICAgICAgJiYgY3VycmVudFVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXHJcbiAgICAgICAgICAgICYmICghdGhpcy5pZ25vcmVBZG1pbiAmJiBjdXJyZW50VXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb2xkRGlzcGxheSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuaXNBdXRob3JpemVkKHRoaXMuYXBwQ29kZSwgdGhpcy5wZXJtaXNzaW9uKS50aGVuKGlzQXV0aG9yaXplZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9IG9sZERpc3BsYXk7XHJcbiAgICAgICAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZWxlbWVudC5ub2RlTmFtZSA9PSAnUC1UQUJQQU5FTCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2VsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyVGFiTGFiZWwgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoJy5wLXRhYnZpZXctcGFuZWxzJykucHJldmlvdXNFbGVtZW50U2libGluZy5xdWVyeVNlbGVjdG9yKGAjJHtpZH0tbGFiZWxgKS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclRhYkxhYmVsLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMua2VlcEhUTUwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsICYmICF0aGlzLl9iaW5kICYmIHRoaXMuX2VsZW1lbnQuaW5uZXJIVE1MICE9PSAnJyAmJiB0aGlzLmtlZXBIVE1MKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsLmlubmVySFRNTCA9IHRoaXMuX2VsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICB0aGlzLl9iaW5kID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -92,14 +92,15 @@ export class PermissionService extends BaseService {
92
92
  // Set local storage cho permission của người dùng
93
93
  for (const service of lstAppCodes) {
94
94
  let permissions = [];
95
+ const serviceCode = service.toUpperCase();
95
96
  for (const key in res.data) {
96
- if (key.toUpperCase() != service.toUpperCase()) {
97
+ if (key.toUpperCase() != serviceCode) {
97
98
  continue;
98
99
  }
99
100
  permissions = res.data[key];
100
101
  break;
101
102
  }
102
- const key = `AUTHORIZATION.${service.toUpperCase()}`;
103
+ const key = `AUTHORIZATION.${serviceCode}`;
103
104
  const storageItem = this.storage.getItem(key);
104
105
  if (storageItem != null) {
105
106
  this.storage.removeItem(key);
@@ -164,7 +165,7 @@ export class PermissionService extends BaseService {
164
165
  return __awaiter(this, void 0, void 0, function* () {
165
166
  try {
166
167
  const user = this._userService.getCurrentUser();
167
- let valueIsDevMode = true;
168
+ const valueIsDevMode = true;
168
169
  if (isDevMode() && valueIsDevMode) {
169
170
  return true;
170
171
  }
@@ -410,4 +411,4 @@ PermissionService.ctorParameters = () => [
410
411
  { type: OAuthService },
411
412
  { type: ApplicationContextService }
412
413
  ];
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFTOUMsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNWLG9CQUF5QyxFQUN6QyxZQUF5QixFQUN6QixhQUEyQixFQUMzQixXQUFzQztRQUU5QyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFMdksseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBMkI7UUFiekMsWUFBTyxHQUFHLGNBQWMsQ0FBQztRQUV6QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsWUFBTyxHQUFXLElBQUksQ0FBQztRQVduQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztRQUN6RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3hDLENBQUM7SUFFRCx1QkFBdUI7O1FBQ25CLE1BQU0sV0FBVyxxQkFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLDBDQUFFLFdBQVcsMENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksb0NBQUssRUFBRSxDQUFDO1FBQ2xHLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDckQsS0FBSyxNQUFNLFVBQVUsSUFBSSxTQUFTLEVBQUU7WUFDaEMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxJQUFJLFNBQVM7Z0JBQUUsU0FBUztZQUNsRyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDbkcsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNyRDtRQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFtQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHVCQUF1QixDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHdCQUF3QjtRQUNwQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDJCQUEyQixDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUssb0JBQW9CLENBQUMsTUFBZTs7O1lBQ3RDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLENBQUM7WUFDdEQsa0VBQWtFO1lBQ2xFLG9FQUFvRTtZQUNwRSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNyRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLFdBQVcsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNyRDtZQUVELElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTzthQUNWO1lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoRCxJQUFJLElBQUk7bUJBQ0QsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksTUFBTSxDQUFDO21CQUM5RCxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ2hGLE9BQU87YUFDVjtZQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxNQUFNLFdBQVcscUJBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVywwQ0FBRSxXQUFXLDBDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLG9DQUFLLEVBQUUsQ0FBQztZQUNsRyw0RkFBNEY7WUFDNUYsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7Z0JBQzFDLE1BQU0sVUFBVSxHQUF3QixFQUFFLENBQUM7Z0JBQzNDLEtBQUssTUFBTSxJQUFJLElBQUksV0FBVyxFQUFFO29CQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM5QixPQUFPO2FBQ1Y7WUFFRCxrREFBa0Q7WUFDbEQsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLEVBQUU7Z0JBQy9CLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUN4QixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7d0JBQzVDLFNBQVM7cUJBQ1o7b0JBQ0QsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLE1BQU07aUJBQ1Q7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO29CQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDaEM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUMxRDs7S0FDSjtJQUVEOzs7O09BSUc7SUFDSCx1QkFBdUIsQ0FBQyxpQkFBMkI7UUFDL0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFPLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN6QyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBVyxDQUFDO1lBQ2xFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksTUFBTSxFQUFFO2dCQUNsRCxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNWO1lBRUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNuRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNWO1lBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksaUJBQWlCLEVBQUU7Z0JBQ2xDLElBQUksTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3JCO2FBQ0o7WUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFSyxzQkFBc0IsQ0FBQyxVQUFrQjs7WUFDM0MsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLFVBQVUsRUFBRSxDQUFDO2dCQUNiLElBQUksVUFBVSxHQUFHLEVBQUUsRUFBRTtvQkFDakIsTUFBTTtpQkFDVDthQUNKO1lBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRSxDQUFDO0tBQUE7SUFFSyxZQUFZLENBQUMsT0FBZSxFQUFFLFVBQWtCLEVBQUUsY0FBdUIsS0FBSzs7WUFDaEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzlDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUM5QyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxVQUFVLEVBQUUsQ0FBQztnQkFDYixJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUU7b0JBQ2pCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEUsQ0FBQztLQUFBO0lBRUssZUFBZSxDQUFDLE9BQU8sRUFBRSxpQkFBeUIsRUFBRSxlQUF3QixLQUFLOztZQUNuRixJQUFJO2dCQUNBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ2hELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxTQUFTLEVBQUUsSUFBSSxjQUFjLEVBQUU7b0JBQy9CLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLElBQUksY0FBYyxFQUFFO29CQUN4RixPQUFPLElBQUksQ0FBQztpQkFDZjtnQkFDRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxjQUFjLEVBQUU7b0JBQ3JHLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDL0MsT0FBTyxZQUFZO3dCQUNmLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO3dCQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2lCQUNuRTtxQkFDSTtvQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLEtBQUssQ0FBQztpQkFDaEI7YUFDSjtZQUNELFdBQU07Z0JBQ0YsT0FBTyxLQUFLLENBQUM7YUFDaEI7UUFDTCxDQUFDO0tBQUE7SUFFRCxnQkFBZ0IsQ0FBQyxlQUF5QixFQUFFLGlCQUF5QjtRQUNqRSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsa0NBQWtDO1FBQ2xDLDJDQUEyQztRQUMzQyxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtZQUMxQyx5REFBeUQ7WUFDekQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzNCLG9DQUFvQztZQUNwQyxJQUFJLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUM5QixnQ0FBZ0M7WUFDaEMsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7WUFDakMsNkJBQTZCO1lBQzdCLE9BQU8sd0JBQXdCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxHQUFHO2dCQUN6RCxxRUFBcUU7Z0JBQ3JFLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxjQUFjLENBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLEVBQUU7b0JBQzlDLHdEQUF3RDtvQkFDeEQsT0FBTyxxQkFBcUIsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEVBQUU7d0JBQzNFLElBQUkscUJBQXFCLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3BELE1BQU07eUJBQ1Q7d0JBQ0QsSUFBSSxjQUFjLENBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLEVBQUU7NEJBQzlDLFNBQVM7eUJBQ1o7d0JBQ0QsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLDRDQUE0Qzt3QkFDckUseUVBQXlFO3dCQUN6RSx5REFBeUQ7d0JBQ3pELElBQUksY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxFQUFFOzRCQUM5QyxXQUFXLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixPQUFPLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsRUFBRTtnQ0FDM0UsSUFBSSxxQkFBcUIsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQ0FDcEQsTUFBTTtpQ0FDVDtnQ0FDRCxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsRUFBRTtvQ0FDOUMsU0FBUztpQ0FDWjtnQ0FDRCxNQUFNOzZCQUNUO3lCQUNKO3dCQUNELE1BQU07cUJBQ1Q7b0JBQ0QsT0FBTyx3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsRUFBRTt3QkFDcEYsSUFBSSx3QkFBd0IsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUMxRCxNQUFNO3lCQUNUO3dCQUNELElBQUksaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLEVBQUU7NEJBQ3BELE1BQU07eUJBQ1Q7cUJBQ0o7aUJBQ0o7Z0JBRUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLFdBQVcsRUFBRTtvQkFDYix1RUFBdUU7b0JBQ3ZFLDBEQUEwRDtvQkFDMUQsSUFBSSxlQUFlLEdBQUcscUJBQXFCLENBQUM7b0JBQzVDLElBQUksa0JBQWtCLEdBQUcsd0JBQXdCLENBQUM7b0JBQ2xELE9BQU8sY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRTt3QkFDM0Msb0RBQW9EO3dCQUNwRCxJQUFJLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFOzRCQUN0RyxjQUFjLEdBQUcsSUFBSSxDQUFDOzRCQUN0QixNQUFNO3lCQUNUO3dCQUNELGVBQWUsRUFBRSxDQUFDO3dCQUNsQixrQkFBa0IsRUFBRSxDQUFDO3FCQUN4QjtpQkFDSjtnQkFFRCxJQUFJLGNBQWMsRUFBRTtvQkFDaEIsTUFBTTtpQkFDVDtnQkFFRCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckUsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDOUUsdUNBQXVDO2dCQUN2QyxJQUFJLHFCQUFxQixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwRCxrRUFBa0U7b0JBQ2xFLDBEQUEwRDtvQkFDMUQsNkRBQTZEO29CQUM3RCxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDOzJCQUN6Qyx3QkFBd0IsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3RCxjQUFjLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixZQUFZLEdBQUcsSUFBSSxDQUFDO3FCQUN2QjtvQkFDRCxNQUFNO2lCQUNUO2dCQUVELHdFQUF3RTtnQkFDeEUsSUFBSSxRQUFRLElBQUksV0FBVyxFQUFFO29CQUN6QixNQUFNO2lCQUNUO2dCQUVELDRDQUE0QztnQkFDNUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDM0IscUJBQXFCLEVBQUUsQ0FBQzthQUMzQjtZQUNELElBQUksY0FBYyxFQUFFO2dCQUNoQixNQUFNO2FBQ1Q7U0FDSjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxlQUF5QixFQUFFLGlCQUF5QjtRQUNwRSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsK0RBQStEO1FBQy9ELElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sZUFBZSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUU7WUFDMUMsMEVBQTBFO1lBQzFFLE1BQU0sdUJBQXVCLEdBQUksY0FBeUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEUsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFekQsaUNBQWlDO1lBQ2pDLElBQUksdUJBQXVCLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDOUQsU0FBUzthQUNaO1lBRUQsc0RBQXNEO1lBQ3RELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN0QixxRkFBcUY7WUFDckYsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDN0QsTUFBTSxhQUFhLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELCtDQUErQztnQkFDL0MsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO29CQUN6QixJQUFJLEtBQUssSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUN6QyxZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUNwQixTQUFTLEdBQUcsSUFBSSxDQUFDO3FCQUNwQjtvQkFDRCxTQUFTO2lCQUNaO2dCQUNELElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNqRSxNQUFNO2lCQUNUO2dCQUNELElBQUksS0FBSyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3pDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO2FBQ0o7WUFDRCxJQUFJLFNBQVMsRUFBRTtnQkFDWCxNQUFNO2FBQ1Q7U0FDSjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFHRCx5QkFBeUIsQ0FBQyxXQUE4QixFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsY0FBdUIsS0FBSztRQUNuRyxPQUFPLElBQUksT0FBTyxDQUFDLENBQU8sT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBRXpDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFXLENBQUM7WUFDbEUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFeEIsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNoQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO1lBRUQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDNUQsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFO3dCQUNoQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQzVDLFlBQVksR0FBRyxJQUFJLENBQUM7NEJBQ3BCLE9BQU87eUJBQ1Y7cUJBQ0o7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQzdDLFlBQVksR0FBRyxLQUFLLENBQUM7NEJBQ3JCLE9BQU87eUJBQ1Y7cUJBQ0o7Z0JBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVLLG9CQUFvQixDQUFDLE9BQU8sRUFBRSx1QkFBZ0MsS0FBSzs7WUFDckUsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLElBQUksV0FBVyxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUU7b0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3ZDLE9BQU8sTUFBTSxDQUFDO2lCQUNqQjthQUNKO1lBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxvQ0FBb0MsT0FBTyxFQUFFLENBQUM7WUFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQzthQUNiO1lBQ0QsSUFBSSxvQkFBb0IsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQztLQUFBO0lBRUQsd0JBQXdCLENBQUMsVUFBa0IsRUFBRSxNQUFjO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsNkJBQTZCLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXFCO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUscUJBQXFCLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7O1lBcFpKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBL0JRLFVBQVU7WUFDRSxRQUFRO1lBU3BCLG1CQUFtQjtZQUNuQixXQUFXO1lBVFgsWUFBWTtZQUVaLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGhhblF1eWVuTW9kZWwge1xyXG4gICAgc3ViamVjdFR5cGU6IG51bWJlcjtcclxuICAgIGlkVXNlckdyb3Vwcz86IHN0cmluZ1tdO1xyXG4gICAgaWRVc2Vycz86IHN0cmluZ1tdO1xyXG4gICAgYWRkUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIGFkZFBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5pdDogUGhhblF1eWVuTW9kZWwpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGluaXRba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgcmVhZG9ubHkgX2NvbmZpZzogYW55O1xyXG4gICAgcmVhZG9ubHkgaWdub3JlQWRtaW4gPSBmYWxzZTtcclxuICAgIGRlbGF5Q2hlY2tQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgcm9vdDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICBhcHBDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L3Blcm1pc3Npb25gKTtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludDtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fY29uZmlnLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKHVzZXJJZD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIC8vIHJldHVybiBz4bubbSB2w6wgxJHDonkgbMOgIHRyxrDhu51uZyBo4bujcCBs4bqleSBwZXJtaXNzaW9uIHRoZW8gSWQgY+G7p2EgVXNlclxyXG4gICAgICAgIC8vIGtvIHNldCBsb2NhbCBzdG9yYWdlIHbDrCBz4bq9IGzDoG0gaOG7j25nIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpXHJcbiAgICAgICAgaWYgKHVzZXJJZCAmJiB1c2VySWQgIT0gJycgJiYgdXNlcklkICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwgKyBgP3VzZXJJZD0ke3VzZXJJZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICAvLyBO4bq/dSBDw7MgZXJyb3IgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiB04buVbmcgaOG7o3AgdGjDrCBxdWF5IHbhu4EgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiBk4buxYSB2w6BvIHThu6tuZyBtb2R1bGVcclxuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnN1Y2Nlc3MgfHwgcmVzLmRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlQXJyOiBQcm9taXNlPHN0cmluZ1tdPltdID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZUFyci5wdXNoKHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oY29kZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgbG9jYWwgc3RvcmFnZSBjaG8gcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkudG9VcHBlckNhc2UoKSAhPSBzZXJ2aWNlLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zID0gcmVzLmRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVVRIT1JJWkFUSU9OLiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBjaGVjRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCBjaGVjRm9yTWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcsIGNoZWNrRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZUlzRGV2TW9kZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiB2YWx1ZUlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25zICYmIHVzZXJQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tGb3JNZW51XHJcbiAgICAgICAgICAgICAgICAgICAgPyB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zLCBwZXJtaXNzaW9uVG9DaGVjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgS2jDtG5nIGPDsyBxdXnhu4FuIHbhu5tpIHBow6JuIGjhu4cgWyR7c2VydmljZX1dYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgLy8gZHV54buHdCBxdWEgdOG7q25nIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBiaeG6v24gxJHhu4MgYnJlYWsga2jhu49pIHbDsm5nIGtoaSBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGxldCBicmVha091dGVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBwb2ludGVyIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAgICAgbGV0IHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9IDA7XHJcbiAgICAgICAgICAgIC8vIHBvaW50ZXIgcGVybWlzc2lvbiDEkWFuZyBjaGVja1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID0gMDtcclxuICAgICAgICAgICAgLy8gY2hlY2sgdOG7q25nIGNoYXIgY+G7p2EgMiBt4bqjbmdcclxuICAgICAgICAgICAgZm9yICg7IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA8IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgbMOgIGvDvSB04buxIGLhuq90IMSR4bqndSB0ZW1wbGF0ZSA9PiB04buLbmggdGnhur9uIHBvaW50ZXIgY+G7p2EgMiBt4bqjbmdcclxuICAgICAgICAgICAgICAgIGxldCBuZWVkUmVjaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gPT0gJ3snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hvIMSR4bq/biBraGkgdMOsbSDEkcaw4bujYyBrw70gdOG7sSAnLycgdGnhur9wIHRoZW8gdGjDrCBk4burbmcgbOG6oWlcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdXNlclBlcm1pc3Npb25Qb2ludGVyIDwgdXNlclBlcm1pc3Npb24ubGVuZ3RoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25Qb2ludGVyID09IHVzZXJQZXJtaXNzaW9uLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICd9Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKyt1c2VyUGVybWlzc2lvblBvaW50ZXI7IC8vIHRp4bq/biB0aeG6v24gxJHhur9uIGvDvSB04buxIHNhdSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0csaw4budbmcgaOG7o3AgdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3Nla2pmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gPT4gY+G6p24gY2hlY2sgY8OhYyBrw70gdOG7sSBzYXUgdGVtcGxhdGUgdsOgIHRyxrDhu5tjIGvDvSB04buxICcvJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZWNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID09IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJyZWFrSW5uZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJlY2hlY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBs4bqhaSBjaG8gdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3NsZWtmalwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZHV54buHdCBuZ8aw4bujYyBs4bqhaSBjaG8gxJHhur9uIGtoaSBn4bq3cCBrw70gdOG7sSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVXNlclBvaW50ZXIgPSB1c2VyUGVybWlzc2lvblBvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBUb0NoZWNrUG9pbnRlciA9IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga8O9IHThu7Ega2jDoWMgbmhhdSA9PiBicmVhayBraOG7j2kgdsOybmcga2nhu4NtIHRyYSB0cm9uZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXS50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25Ub0NoZWNrW3RlbXBUb0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtJbm5lckxvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFVzZXJQb2ludGVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUb0NoZWNrUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtJbm5lckxvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyQ2hhciA9IHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2tDaGFyID0gcGVybWlzc2lvblRvQ2hlY2tbcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgdXNlclBlcm1pc3Npb24gxJFhbmcg4bufIGluZGV4IGN14buRaVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjdeG7kWkgY+G7p2EgMiBt4bqjbmcgKHRy4burIGtoaSBsw6Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdsOgIGPFqW5nIHBo4bqjaSBsw6AgY2hhciBjdeG7kWkgY+G7p2EgbeG6o25nIHBlcm1pc3Npb24gY+G6p24gY2hlY2tcclxuICAgICAgICAgICAgICAgICAgICAvLyA9PiBuZ8aw4budaSBkw7luZyBhdXRob3JpemVkIHbDoCBicmVhayBraOG7j2kgdsOybmcgbOG6t3Agbmdvw6BpIGPDuW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1c2VyQ2hhciA9PSAnfScgfHwgdXNlckNoYXIgPT0gdG9DaGVja0NoYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9PSBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrT3V0ZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjw7MgZ2nhu5FuZyBuaGF1IGtow7RuZywga2jDtG5nIGdp4buRbmcgdGjDrCBicmVhayBraOG7j2kgdsOybmcgY2hlY2tcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyQ2hhciAhPSB0b0NoZWNrQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgZ2nhu5FuZyBuaGF1IHRow6wgdGnhur9wIHThu6VjIHbDsm5nIGzEg3BcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcisrO1xyXG4gICAgICAgICAgICAgICAgdXNlclBlcm1pc3Npb25Qb2ludGVyKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJyZWFrT3V0ZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb25PbGQodXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBxdXnhu4FuIHRoZW8gY8OhY2ggY8WpIG7hur91IHRyxrDhu51uZyBo4buNcCBsw6AgcGjDom4gcXV54buBbiBtb2R1bGVcclxuICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2suaW5jbHVkZXMoJ01PRFVMRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBD4bqvdCBjaHXhu5dpIHBlcm1pc3Npb24gdGjDoG5oIG3huqNuZyDEkeG7gyB4ZW0gbeG7l2kgZnJhZ2VtZW50IGPDsyBraOG7m3AgbmhhdSBraMO0bmdcclxuICAgICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25GcmFnbWVudHMgPSAodXNlclBlcm1pc3Npb24gYXMgc3RyaW5nKS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnRzID0gcGVybWlzc2lvblRvQ2hlY2suc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE3huqNuZyBraMOhYyDEkeG7mSBkw6BpIHRow6wgdGhvw6F0IHPhu5ttXHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggIT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBiaeG6v24gZmxhZyByYSBoaeG7h3UgbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6Agb3V0IHbDsm5nXHJcbiAgICAgICAgICAgIGxldCBicmVha0xvb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gbuG6v3UgdOG6pXQgY+G6oyBwaOG6p24gdOG7rSBraOG7m3AgbmhhdSA9PiBwZXJtaXNzaW9uIG7DoHkgdHLDuW5nIHbDoCBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckZyYWdlbWVudCA9IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25GcmFnbWVudCA9IHBlcm1pc3Npb25GcmFnbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBxdWEgY8OhYyBwaOG6p24gdOG7rSBjw7Mga8O9IHThu7EgYuG6r3QgxJHhuqd1IGzDoCAneydcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyRnJhZ2VtZW50WzBdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudC50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25GcmFnbWVudC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha0xvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha0xvb3ApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0F1dGhvcml6ZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlzQXV0aG9yaXplZEJ5UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IEFycmF5PFBlcm1pc3Npb24+LCBvcGVyYXRvciA9ICdPUicsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oaXRlbS5zZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25SZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSwgb3ZlcnJpZGVMb2NhbFN0b3JhZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgICAgIGlmICghb3ZlcnJpZGVMb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gJiYgc3RvcmFnZUl0ZW0gIT09ICdudWxsJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG92ZXJyaWRlTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUvJHttb2R1bGVDb2RlfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwaGFuUXV5ZW5OZ3VvaUR1bmcobW9kZWw6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9QaGFuUXV5ZW5OZ3VvaUR1bmdgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFTOUMsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNWLG9CQUF5QyxFQUN6QyxZQUF5QixFQUN6QixhQUEyQixFQUMzQixXQUFzQztRQUU5QyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFB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QUFDLElBQUksQ0FBQztRQUN6QixDQUFDO0tBQUE7SUFFRCx3QkFBd0IsQ0FBQyxVQUFrQixFQUFFLE1BQWM7UUFDdkQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSw2QkFBNkIsVUFBVSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBcUI7UUFDcEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Ozs7WUFyWkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUEvQlEsVUFBVTtZQUNFLFFBQVE7WUFTcEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFUWCxZQUFZO1lBRVoseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQaGFuUXV5ZW5Nb2RlbCB7XHJcbiAgICBzdWJqZWN0VHlwZTogbnVtYmVyO1xyXG4gICAgaWRVc2VyR3JvdXBzPzogc3RyaW5nW107XHJcbiAgICBpZFVzZXJzPzogc3RyaW5nW107XHJcbiAgICBhZGRSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlbW92ZVJvbGVJZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgYWRkUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVQZXJtaXNzaW9uSWRzPzogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihpbml0OiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluaXQpIHtcclxuICAgICAgICAgICAgdGhpc1trZXldID0gaW5pdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuXHJcbiAgICByZWFkb25seSBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XHJcbiAgICByZWFkb25seSBfY29uZmlnOiBhbnk7XHJcbiAgICByZWFkb25seSBpZ25vcmVBZG1pbiA9IGZhbHNlO1xyXG4gICAgZGVsYXlDaGVja1Blcm1pc3Npb25zID0gW107XHJcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGFwcENvZGU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5hdXRob3JpemF0aW9uRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vcGVybWlzc2lvbmApO1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50O1xyXG4gICAgICAgIHRoaXMuaWdub3JlQWRtaW4gPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuaXNJZ25vcmVBZG1pbjtcclxuICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9jb25maWcuYXBwQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpIHtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXI/Lm1hcChhcHAgPT4gYXBwLmNvZGUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGxzdEFwaUVuZHBvaW50ID0gW107XHJcbiAgICAgICAgY29uc3QgYXBpRG9tYWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGRvbWFpbk5hbWUgaW4gYXBpRG9tYWluKSB7XHJcbiAgICAgICAgICAgIGlmIChkb21haW5OYW1lLnN0YXJ0c1dpdGgoJy0nKSB8fCBkb21haW5OYW1lLnN0YXJ0c1dpdGgoJzEnKSB8fCBkb21haW5OYW1lID09ICdnYXRld2F5JykgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWxEb21haW5OYW1lID0gZG9tYWluTmFtZS5zcGxpdCgnRW5kcG9pbnQnKSA/IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JylbMF0gOiBkb21haW5OYW1lO1xyXG4gICAgICAgICAgICBsc3RBcGlFbmRwb2ludC5wdXNoKHJlYWxEb21haW5OYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jbGVhclBlcm1pc3Npb25DYWNoZShbLi4ubHN0QXBwQ29kZXMsIC4uLmxzdEFwaUVuZHBvaW50XSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGUobHN0TW9kdWxlOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2xlYXJQZXJtaXNzaW9uQ2FjaGVgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbHN0TW9kdWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50VXNlclBlcm1pc3Npb24oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QWxsQmFzZVBlcm1pc3Npb24odXNlcklkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBbGxCYXNlUGVybWlzc2lvbmA7XHJcbiAgICAgICAgLy8gcmV0dXJuIHPhu5ttIHbDrCDEkcOieSBsw6AgdHLGsOG7nW5nIGjhu6NwIGzhuqV5IHBlcm1pc3Npb24gdGhlbyBJZCBj4bunYSBVc2VyXHJcbiAgICAgICAgLy8ga28gc2V0IGxvY2FsIHN0b3JhZ2UgdsOsIHPhur0gbMOgbSBo4buPbmcgcXV54buBbiBj4bunYSBuZ8aw4budaSBkw7luZyBoaeG7h24gdOG6oWlcclxuICAgICAgICBpZiAodXNlcklkICYmIHVzZXJJZCAhPSAnJyAmJiB1c2VySWQgIT0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCArIGA/dXNlcklkPSR7dXNlcklkfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyXHJcbiAgICAgICAgICAgICYmICh1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpXHJcbiAgICAgICAgICAgIHx8ICh1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXI/Lm1hcChhcHAgPT4gYXBwLmNvZGUpID8/IFtdO1xyXG4gICAgICAgIC8vIE7hur91IEPDsyBlcnJvciBs4bqleSBk4buvIGxp4buHdSBxdXnhu4FuIHThu5VuZyBo4bujcCB0aMOsIHF1YXkgduG7gSBs4bqleSBk4buvIGxp4buHdSBxdXnhu4FuIGThu7FhIHbDoG8gdOG7q25nIG1vZHVsZVxyXG4gICAgICAgIGlmICghcmVzIHx8ICFyZXMuc3VjY2VzcyB8fCByZXMuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VBcnI6IFByb21pc2U8c3RyaW5nW10+W10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIG9mIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlQXJyLnB1c2godGhpcy5nZXRTZXJ2aWNlUGVybWlzc2lvbihjb2RlLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCBsb2NhbCBzdG9yYWdlIGNobyBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZSA9IHNlcnZpY2UudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkudG9VcHBlckNhc2UoKSAhPSBzZXJ2aWNlQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgPSByZXMuZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYEFVVEhPUklaQVRJT04uJHtzZXJ2aWNlQ29kZX1gO1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocGVybWlzc2lvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnV54buBbiB2w6BvIGRhbmggc8OhY2ggcGVybWlzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgKiBAcGFyYW0gbHN0UGVybWlzc2lvbkNvZGUgbmjhu69uZyBwZXJybWlzaW9uIGNvZGUgY+G6p24gY2hlY2sgPT4gbsOqbiBkw7luZyB0cm9uZyB0csaw4budbmcgaOG7o3AgY2hlY2sgY8OhYyBidXR0b24gdHJvbmcgY29kZVxyXG4gICAgICogQHJldHVybnMgdHLhuqMgcmEgY8OhYyBwZXJybWlzaW9uQ29kZSBjw7MgcXV54buBblxyXG4gICAgICovXHJcbiAgICBnZXRQZXJtaXNzaW9uQXV0aG9yaXplZChsc3RQZXJtaXNzaW9uQ29kZTogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobHN0UGVybWlzc2lvbkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobHN0UGVybWlzc2lvbkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxzdFBlcm1pc3Npb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5pc0F1dGhvcml6ZWRQZXJtaXNzaW9uKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpc0F1dGhvcml6ZWRQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLmFwcENvZGUsIHBlcm1pc3Npb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzQXV0aG9yaXplZChzZXJ2aWNlOiBzdHJpbmcsIHBlcm1pc3Npb246IHN0cmluZywgY2hlY0Zvck1lbnU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX2FwcENvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xyXG4gICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbiwgY2hlY0Zvck1lbnUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uVG9DaGVjazogc3RyaW5nLCBjaGVja0Zvck1lbnU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUlzRGV2TW9kZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiB2YWx1ZUlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25zICYmIHVzZXJQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tGb3JNZW51XHJcbiAgICAgICAgICAgICAgICAgICAgPyB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zLCBwZXJtaXNzaW9uVG9DaGVjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgS2jDtG5nIGPDsyBxdXnhu4FuIHbhu5tpIHBow6JuIGjhu4cgWyR7c2VydmljZX1dYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgLy8gZHV54buHdCBxdWEgdOG7q25nIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBiaeG6v24gxJHhu4MgYnJlYWsga2jhu49pIHbDsm5nIGtoaSBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGxldCBicmVha091dGVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBwb2ludGVyIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAgICAgbGV0IHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9IDA7XHJcbiAgICAgICAgICAgIC8vIHBvaW50ZXIgcGVybWlzc2lvbiDEkWFuZyBjaGVja1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID0gMDtcclxuICAgICAgICAgICAgLy8gY2hlY2sgdOG7q25nIGNoYXIgY+G7p2EgMiBt4bqjbmdcclxuICAgICAgICAgICAgZm9yICg7IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA8IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgbMOgIGvDvSB04buxIGLhuq90IMSR4bqndSB0ZW1wbGF0ZSA9PiB04buLbmggdGnhur9uIHBvaW50ZXIgY+G7p2EgMiBt4bqjbmdcclxuICAgICAgICAgICAgICAgIGxldCBuZWVkUmVjaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gPT0gJ3snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hvIMSR4bq/biBraGkgdMOsbSDEkcaw4bujYyBrw70gdOG7sSAnLycgdGnhur9wIHRoZW8gdGjDrCBk4burbmcgbOG6oWlcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdXNlclBlcm1pc3Npb25Qb2ludGVyIDwgdXNlclBlcm1pc3Npb24ubGVuZ3RoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25Qb2ludGVyID09IHVzZXJQZXJtaXNzaW9uLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICd9Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKyt1c2VyUGVybWlzc2lvblBvaW50ZXI7IC8vIHRp4bq/biB0aeG6v24gxJHhur9uIGvDvSB04buxIHNhdSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0csaw4budbmcgaOG7o3AgdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3Nla2pmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gPT4gY+G6p24gY2hlY2sgY8OhYyBrw70gdOG7sSBzYXUgdGVtcGxhdGUgdsOgIHRyxrDhu5tjIGvDvSB04buxICcvJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZWNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID09IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJyZWFrSW5uZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJlY2hlY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBs4bqhaSBjaG8gdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3NsZWtmalwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZHV54buHdCBuZ8aw4bujYyBs4bqhaSBjaG8gxJHhur9uIGtoaSBn4bq3cCBrw70gdOG7sSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVXNlclBvaW50ZXIgPSB1c2VyUGVybWlzc2lvblBvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBUb0NoZWNrUG9pbnRlciA9IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga8O9IHThu7Ega2jDoWMgbmhhdSA9PiBicmVhayBraOG7j2kgdsOybmcga2nhu4NtIHRyYSB0cm9uZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXS50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25Ub0NoZWNrW3RlbXBUb0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtJbm5lckxvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFVzZXJQb2ludGVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUb0NoZWNrUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtJbm5lckxvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyQ2hhciA9IHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2tDaGFyID0gcGVybWlzc2lvblRvQ2hlY2tbcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgdXNlclBlcm1pc3Npb24gxJFhbmcg4bufIGluZGV4IGN14buRaVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjdeG7kWkgY+G7p2EgMiBt4bqjbmcgKHRy4burIGtoaSBsw6Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdsOgIGPFqW5nIHBo4bqjaSBsw6AgY2hhciBjdeG7kWkgY+G7p2EgbeG6o25nIHBlcm1pc3Npb24gY+G6p24gY2hlY2tcclxuICAgICAgICAgICAgICAgICAgICAvLyA9PiBuZ8aw4budaSBkw7luZyBhdXRob3JpemVkIHbDoCBicmVhayBraOG7j2kgdsOybmcgbOG6t3Agbmdvw6BpIGPDuW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1c2VyQ2hhciA9PSAnfScgfHwgdXNlckNoYXIgPT0gdG9DaGVja0NoYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9PSBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrT3V0ZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjw7MgZ2nhu5FuZyBuaGF1IGtow7RuZywga2jDtG5nIGdp4buRbmcgdGjDrCBicmVhayBraOG7j2kgdsOybmcgY2hlY2tcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyQ2hhciAhPSB0b0NoZWNrQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgZ2nhu5FuZyBuaGF1IHRow6wgdGnhur9wIHThu6VjIHbDsm5nIGzEg3BcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcisrO1xyXG4gICAgICAgICAgICAgICAgdXNlclBlcm1pc3Npb25Qb2ludGVyKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJyZWFrT3V0ZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb25PbGQodXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBxdXnhu4FuIHRoZW8gY8OhY2ggY8WpIG7hur91IHRyxrDhu51uZyBo4buNcCBsw6AgcGjDom4gcXV54buBbiBtb2R1bGVcclxuICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2suaW5jbHVkZXMoJ01PRFVMRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBD4bqvdCBjaHXhu5dpIHBlcm1pc3Npb24gdGjDoG5oIG3huqNuZyDEkeG7gyB4ZW0gbeG7l2kgZnJhZ2VtZW50IGPDsyBraOG7m3AgbmhhdSBraMO0bmdcclxuICAgICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25GcmFnbWVudHMgPSAodXNlclBlcm1pc3Npb24gYXMgc3RyaW5nKS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnRzID0gcGVybWlzc2lvblRvQ2hlY2suc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE3huqNuZyBraMOhYyDEkeG7mSBkw6BpIHRow6wgdGhvw6F0IHPhu5ttXHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggIT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBiaeG6v24gZmxhZyByYSBoaeG7h3UgbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6Agb3V0IHbDsm5nXHJcbiAgICAgICAgICAgIGxldCBicmVha0xvb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gbuG6v3UgdOG6pXQgY+G6oyBwaOG6p24gdOG7rSBraOG7m3AgbmhhdSA9PiBwZXJtaXNzaW9uIG7DoHkgdHLDuW5nIHbDoCBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckZyYWdlbWVudCA9IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25GcmFnbWVudCA9IHBlcm1pc3Npb25GcmFnbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBxdWEgY8OhYyBwaOG6p24gdOG7rSBjw7Mga8O9IHThu7EgYuG6r3QgxJHhuqd1IGzDoCAneydcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyRnJhZ2VtZW50WzBdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudC50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25GcmFnbWVudC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha0xvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha0xvb3ApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0F1dGhvcml6ZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlzQXV0aG9yaXplZEJ5UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IEFycmF5PFBlcm1pc3Npb24+LCBvcGVyYXRvciA9ICdPUicsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oaXRlbS5zZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25SZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSwgb3ZlcnJpZGVMb2NhbFN0b3JhZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgICAgIGlmICghb3ZlcnJpZGVMb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gJiYgc3RvcmFnZUl0ZW0gIT09ICdudWxsJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG92ZXJyaWRlTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUvJHttb2R1bGVDb2RlfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwaGFuUXV5ZW5OZ3VvaUR1bmcobW9kZWw6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9QaGFuUXV5ZW5OZ3VvaUR1bmdgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==