@sarasanalytics-com/design-system 0.0.155 → 0.0.157

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.
@@ -37,7 +37,7 @@ export class FormInputComponent extends FieldType {
37
37
  };
38
38
  }
39
39
  ngOnInit() {
40
- this.inputVal = _get(this.field.props, 'value', _get(this.model, this.key)) || '';
40
+ this.inputVal = _get(this.field.props, 'value', _get(this.model, [this.key])) || '';
41
41
  this.disabled = this.field.props.disabled || false;
42
42
  this.formControl?.setValue(this.inputVal);
43
43
  this.params = this.params || this.field.props['params'];
@@ -319,4 +319,4 @@ export var IInputEventType;
319
319
  IInputEventType["STATE_CHANGE"] = "STATE_CHANGE";
320
320
  IInputEventType["ICON_CLICK"] = "ICON_CLICK";
321
321
  })(IInputEventType || (IInputEventType = {}));
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQWdCN0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQTBCO0lBK0JoRTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBekJWLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsYUFBUSxHQUFHLEVBQUUs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QUNoQixjQUFjOzsyRkFLTCxrQkFBa0I7a0JBZjlCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixjQUFjO3FCQUNmO3dEQUt1QixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRVAsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQU1KLE1BQU07c0JBQWQsS0FBSzs7QUErVVIsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixnREFBNkIsQ0FBQTtJQUM3QixnREFBNkIsQ0FBQTtJQUM3Qiw0Q0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBnZXRWYWxpZGF0aW9uTWVzc2FnZSxcbiAgcGhvbmVOdW1iZXJWYWxpZGF0b3IsXG59IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuLi9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0IGFzIF9nZXQsIHNldCBhcyBfc2V0LCBtYXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybWx5TW9kdWxlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBDaGlwc0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtLWlucHV0LmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiB7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1JbnB1dCcpIGZvcm1JbnB1dCE6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCdpY29uJykgaWNvbjogSUlucHV0SWNvbjtcblxuICBwcmV0ZXh0OiBzdHJpbmc7XG5cbiAgaW5wdXRTdGF0ZSA9ICdpZGxlJztcbiAgaW5wdXRWYWwgPSAnJztcbiAgQElucHV0KCkgcGFyYW1zOiBJSW5wdXRQYXJhbSB8IG51bGw7XG4gIGRlcGVuZGVudDogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IG51bGw7XG4gIGRlcGVuZGVudFZhbDogYW55ID0gbnVsbDtcbiAgLy8gZHluYW1pY0ljb246IER5bmFtaWNJY29uIHwgbnVsbDtcbiAgLy8gaWNvbjogSUlucHV0SWNvbiB8IG51bGw7XG5cbiAgdHlwZTogc3RyaW5nID0gJyc7XG4gIHZhbGlkYXRvcnM6IGFueVtdO1xuICBhc3luY1ZhbGlkYXRvcnM6IGFueVtdO1xuXG4gIGlucHV0RXJyb3JUZXh0OiBzdHJpbmcgPSAnaW52YWxpZCBpbnB1dCc7XG5cbiAgc2hvd0VtYWlsSWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGlwVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBpc011bHRpVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudElucHV0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBzdGFydEluZDogbnVtYmVyID0gMDtcbiAgbGFiZWxMaW1pdDogbnVtYmVyID0gMTtcblxuICBwcml2YXRlIHN1cHByZXNzT25CbHVyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5wdXRWYWwgPSBfZ2V0KHRoaXMuZmllbGQucHJvcHMsICd2YWx1ZScsIF9nZXQodGhpcy5tb2RlbCwgdGhpcy5rZXkpKSB8fCAnJztcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5maWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZTtcbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcblxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5wYXJhbXMgfHwgdGhpcy5maWVsZC5wcm9wc1sncGFyYW1zJ107XG4gICAgdGhpcy5pY29uID0gdGhpcy5pY29uIHx8IHRoaXMuZmllbGQucHJvcHNbJ2ljb24nXSB8fCB7fTtcbiAgICB0aGlzLnR5cGUgPSB0aGlzLnBhcmFtcz8udHlwZSB8fCAnJztcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgX3NldCh0aGlzLmZvcm1JbnB1dCwgJ25hdGl2ZUVsZW1lbnQudmFsdWUnLCB2YWwpO1xuICAgICAgLy8gSGFuZGxlIG11bHRpLXZhbHVlIGNoaXAgdXBkYXRlc1xuICAgICAgaWYgKHRoaXMuaXNNdWx0aVZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB0aGlzLmNoaXBWYWx1ZXMgPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIG11bHRpLXZhbHVlIG1vZGUgaWYgc3BlY2lmaWVkXG4gICAgaWYgKHRoaXMucGFyYW1zPy50eXBlID09PSAnbXVsdGktdmFsdWUnIHx8IHRoaXMucGFyYW1zPy5tdWx0aVZhbHVlKSB7XG4gICAgICB0aGlzLmlzTXVsdGlWYWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLmNoaXBWYWx1ZXMgPSB0aGlzLm1vZGVsW3RoaXMua2V5IGFzIHN0cmluZ10gfHwgdGhpcy5wYXJhbXM/LmNoaXBWYWx1ZXMgfHwgW107XG4gICAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgLy8gdGhpcy5keW5hbWljSWNvbiA9IHRoaXMuZmllbGQucHJvcHNbJ2R5bmFtaWNJY29uJ107XG4gICAgdGhpcy5zZXRWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5zZXREZXBlbmRlbnRzKCk7XG5cbiAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2VtYWlsJykge1xuICAgICAgICBpZiAoISF0aGlzLmlucHV0VmFsICYmICF0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dFbWFpbEljb24gPVxuICAgICAgICAgIHN0YXRlID09PSAnVkFMSUQnIHx8XG4gICAgICAgICAgKHN0YXRlID09PSAnSU5WQUxJRCcgJiZcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ2ludmFsaWQnKSAmJlxuICAgICAgICAgICAgISF0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgX3NldCh0aGlzLmZvcm1JbnB1dCwgJ25hdGl2ZUVsZW1lbnQudmFsdWUnLCB2YWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0VmFsaWRhdG9ycygpIHtcbiAgICB0aGlzLnZhbGlkYXRvcnMgPSB0aGlzLnBhcmFtcz8udmFsaWRhdG9ycyB8fCB0aGlzLnByZWRlZmluZWRWYWxpZGF0b3JzW3RoaXMudHlwZV0gfHwgW107XG4gICAgdGhpcy5hc3luY1ZhbGlkYXRvcnMgPSB0aGlzLnBhcmFtcz8uYXN5bmNWYWxpZGF0b3JzIHx8IFtdO1xuICAgIGlmKCFfZ2V0KHRoaXMuZmllbGQsICd2YWxpZGF0b3JzLnZhbGlkYXRpb24nLCBudWxsKSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgIC4uLih0aGlzLnR5cGUgPyB0aGlzLnByZWRlZmluZWRWYWxpZGF0b3JzW3RoaXMudHlwZV0gfHwgW10gOiBbXSksXG4gICAgICAgIC4uLih0aGlzLnZhbGlkYXRvcnMpLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIEFzc3VtaW5nIGRlcGVuZGVudCBmaWVsZCBpcyBhIHNpbmdsZSBzZWxlY3QgZHJvcGRvd25cbiAgKi9cbiAgc2V0RGVwZW5kZW50cygpIHtcbiAgICBpZiAodGhpcy5wYXJhbXM/LmRlcGVuZGVudCkge1xuICAgICAgdGhpcy5kZXBlbmRlbnQgPSB0aGlzLmZvcm0uZ2V0KFt0aGlzLnBhcmFtcz8uZGVwZW5kZW50XSk7XG5cbiAgICAgIHRoaXMuZGVwZW5kZW50VmFsID0gdGhpcy5nZXREZXBlbmRlbnRWYWwoX2dldCh0aGlzLmRlcGVuZGVudCwgJ3ZhbHVlJykpO1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgdGhpcy5wcmV0ZXh0ID0gdGhpcy5kZXBlbmRlbnRWYWw/LmRpYWxfY29kZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZXBlbmRlbnQ/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICB0aGlzLmRlcGVuZGVudFZhbCA9IHRoaXMuZ2V0RGVwZW5kZW50VmFsKHZhbCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgICB0aGlzLnByZXRleHQgPSB0aGlzLmRlcGVuZGVudFZhbD8uZGlhbF9jb2RlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0RGVwZW5kZW50VmFsKHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgZGVwZW5kZW50VmFsdWU6IGFueTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGRlcGVuZGVudFZhbHVlID0gdmFsdWUubGVuZ3RoID8gdmFsdWVbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXBlbmRlbnRWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGVwZW5kZW50VmFsdWU7XG4gIH1cblxuICBjaGVja1ZhbGlkaXR5KGRlZmF1bHRJbnB1dFN0YXRlID0gJ2ZvY3VzJykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgJiZcbiAgICAgICF0aGlzLmZvcm1Db250cm9sLnZhbGlkICYmXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQgJiZcbiAgICAgICF0aGlzLmZvcm1Db250cm9sLnBlbmRpbmdcbiAgICApIHtcbiAgICAgIHRoaXMuaW5wdXRTdGF0ZSA9ICdpbnZhbGlkJztcbiAgICAgIHRoaXMuaW5wdXRFcnJvclRleHQgPVxuICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmZvcm1Db250cm9sLmVycm9ycywgdGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdJbnB1dCcsIHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgICAgICBuYXRpdmVWYWxpZGF0aW9uT2JqZWN0OiB0aGlzLmZpZWxkLnZhbGlkYXRpb24sXG4gICAgICAgIH0pIHx8IGBpbnZhbGlkICR7dGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdpbnB1dCd9YFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0U3RhdGUgPSBkZWZhdWx0SW5wdXRTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbGlkKSB0aGlzLmlucHV0U3RhdGUgPSAnZm9jdXMnO1xuICB9XG4gIG9uQmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zdXBwcmVzc09uQmx1cikge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkaXR5KCdpZGxlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cHByZXNzT25CbHVyID0gZmFsc2U7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWwgPSB0aGlzLmlucHV0VmFsLnJlcGxhY2UoL1teMC05KCkrXFwtIF0vZywgJycpO1xuICAgICAgdGhpcy5pbnB1dFZhbCA9IHRoaXMuaHlwaGVuYXRlUGhvbmVOdW1iZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyYW1zPy50eXBlID09PSAncGVyY2VudGFnZScpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuaW5wdXRWYWwucmVwbGFjZSgvW14wLTkuXS9nLCAnJyk7XG4gICAgICB0aGlzLmlucHV0VmFsID0gdmFsdWUgPyBgJHt2YWx1ZX0lYCA6ICcnO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmlucHV0VmFsKTtcbiAgICB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAvKmlmICh0aGlzLnBhcmFtcz8uZXZlbnRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5wYXJhbXM/LmV2ZW50TGlzdGVuZXIoe1xuICAgICAgICB0eXBlOiBJSW5wdXRFdmVudFR5cGUuSU5QVVRfQ0hBTkdFLFxuICAgICAgICB2YWx1ZTogdGhpcy5pbnB1dFZhbCxcbiAgICAgICAgZm9ybUNvbnRyb2w6IHRoaXMuZm9ybUNvbnRyb2xcbiAgICAgIH0gYXMgSUlucHV0RXZlbnQpLnRoZW4odGhpcy5vbkZpZWxkQ2FsbGJhY2suYmluZCh0aGlzKSk7XG4gICAgfSovXG4gIH1cblxuICBoeXBoZW5hdGVQaG9uZU51bWJlcigpIHtcbiAgICBsZXQgbmV3U3RyID0gJyc7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBoeXBoZW5hdGVkQ291bnQgPSAxO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnB1dFZhbC5yZXBsYWNlQWxsKCctJywgJycpO1xuICAgIGZvciAoOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1N0ciA9IG5ld1N0ciArIHZhbHVlLmNoYXJBdChpKTtcbiAgICAgIGlmICghKGh5cGhlbmF0ZWRDb3VudCAlIDMpKSB7XG4gICAgICAgIGlmICghKChpICsgMSkgJSAxMCkgJiYgaSArIDEgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIgKyAnLSc7XG4gICAgICAgICAgaHlwaGVuYXRlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICEoKGkgKyAxIC0gTWF0aC5mbG9vcihoeXBoZW5hdGVkQ291bnQgLyAzKSkgJSAzKSAmJlxuICAgICAgICBpICsgMSA8IHZhbHVlLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIG5ld1N0ciA9IG5ld1N0ciArICctJztcbiAgICAgICAgaHlwaGVuYXRlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0cjtcbiAgfVxuXG4gIG9uSW5wdXRGaWVsZENsaWNrKGV2ZW50OiBhbnkgPSAnaW5wdXQnKSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQgPT09ICdpbnB1dCcgfHxcbiAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3NhLWlucHV0LWZpZWxkJylcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSAhPT0gJ2VtYWlsJylcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb3JtSW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWwubGVuZ3RoLFxuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbC5sZW5ndGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0SWNvbkNsaWNrKCkge1xuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgdGhpcy5zdXBwcmVzc09uQmx1ciA9IHRydWU7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgdGhpcy5pY29uLm5hbWUgPSAnZXllT2ZmJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICAgIHRoaXMuaWNvbi5uYW1lID0gJ2V5ZU91dGxpbmVkJztcbiAgICAgIH1cbiAgICAgIHRoaXMub25JbnB1dEZpZWxkQ2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBhZGRDaGlwKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlIHx8ICF2YWx1ZS50cmltKCkpIHJldHVybjsgIFxuICAgIGNvbnN0IGNoaXBWYWx1ZSA9IHtcbiAgICAgIGxhYmVsOiB2YWx1ZS50cmltKCksXG4gICAgICB2YWx1ZTogdmFsdWUudHJpbSgpLFxuICAgICAgcmVtb3ZhYmxlOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLmNoaXBWYWx1ZXMucHVzaChjaGlwVmFsdWUpOyAgICBcbiAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSBtYXAodGhpcy5jaGlwVmFsdWVzLCAoY2hpcDogYW55KSA9PiBjaGlwLnZhbHVlIHx8IGNoaXAubGFiZWwgfHwgY2hpcCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUoYWN0dWFsVmFsdWVzKTtcbiAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5tb2RlbFt0aGlzLmtleSBhcyBzdHJpbmddID0gYWN0dWFsVmFsdWVzO1xuICB9XG4gIFxuICByZW1vdmVDaGlwKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47ICBcbiAgICB0aGlzLmNoaXBWYWx1ZXMuc3BsaWNlKGluZGV4LCAxKTsgIFxuICAgIGNvbnN0IGFjdHVhbFZhbHVlcyA9IG1hcCh0aGlzLmNoaXBWYWx1ZXMsIChjaGlwOiBhbnkpID0+IGNoaXAudmFsdWUgfHwgY2hpcC5sYWJlbCB8fCBjaGlwKTtcbiAgICB0aGlzLm1vZGVsW3RoaXMua2V5IGFzIHN0cmluZ10gPSBhY3R1YWxWYWx1ZXM7XG4gIH1cblxuICBvbkNoaXBLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlWYWx1ZSkgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnLCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmFkZENoaXAodGhpcy5jdXJyZW50SW5wdXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmICF0aGlzLmN1cnJlbnRJbnB1dFZhbHVlICYmIHRoaXMuY2hpcFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbW92ZUNoaXAodGhpcy5jaGlwVmFsdWVzLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuICBcbiAgb25DaGlwSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5pc011bHRpVmFsdWUpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRJbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgb25DaGlwQmx1cigpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY3VycmVudElucHV0VmFsdWUudHJpbSgpKSB7XG4gICAgICB0aGlzLmFkZENoaXAodGhpcy5jdXJyZW50SW5wdXRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qb25GaWVsZENhbGxiYWNrKHBhcmFtOiBJSW5wdXRQYXJhbSkge1xuICAgIHRoaXMuaWNvbiA9IHBhcmFtLmljb24gfHwgdGhpcy5pY29uO1xuICAgIHRoaXMuY2hlY2tWYWxpZGl0eSgpO1xuICB9Ki9cblxuICBnZXRGb3JtU3VwcG9ydFRleHQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzLnBhcmFtcz8ucGxhY2Vob2xkZXIgfHwgdGhpcy5maWVsZC5wcm9wcz8ubGFiZWwgfHwgJ0lucHV0Jyx7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgbmF0aXZlVmFsaWRhdGlvbk9iamVjdDogX2dldCh0aGlzLmZpZWxkLCAndmFsaWRhdGlvbicpLFxuICAgICAgICB9KSB8fFxuICAgICAgICBgaW52YWxpZCAke3RoaXMucGFyYW1zPy5wbGFjZWhvbGRlciB8fCB0aGlzLmZpZWxkLnByb3BzPy5sYWJlbCB8fCAnaW5wdXQnfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmFtcz8uc3VwcG9ydFRleHQgfHwgJyc7XG4gICAgfVxuICB9XG5cbiAgcHJlZGVmaW5lZFZhbGlkYXRvcnM6IGFueSA9IHtcbiAgICBlbWFpbDogW1ZhbGlkYXRvcnMuZW1haWwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIHBhc3N3b3JkOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgdGVsOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOSArXFxcXC0oKV0qJCcpXSxcbiAgfTtcblxuICBnZXRMYWJlbEZpZWxkR2FwKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcHM/LlsnYmlnTGFiZWwnXSkge1xuICAgICAgcmV0dXJuICd2YXIoLS1tZWRpdW0tMjBweCknO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcz8uWydsYWJlbCddKSB7XG4gICAgICByZXR1cm4gJ3ZhcigtLXNtYWxsLTRweCknO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzBweCc7IC8vIE5vIGdhcFxuICAgIH1cbiAgfVxuXG4gIHNoaWZ0TGFiZWwoYWN0aW9uOiAnY2xpY2tlZCcgfCAnY2xlYXJlZCcpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnY2xpY2tlZCcpIHtcbiAgICAgIHRoaXMuc3RhcnRJbmQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0SW5kID0gTWF0aC5tYXgoMCwgdGhpcy5jaGlwVmFsdWVzLmxlbmd0aCAtIHRoaXMubGFiZWxMaW1pdCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0SWNvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2hvdz86IGJvb2xlYW47XG4gIGNvbG9yPzogc3RyaW5nO1xuICBzaXplPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dFBhcmFtIHtcbiAgdmFsaWRhdG9ycz86IGFueVtdO1xuICBhc3luY1ZhbGlkYXRvcnM/OiBhbnlbXTtcbiAgc3VwcG9ydFRleHQ/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBkZXBlbmRlbnQ/OiBzdHJpbmc7XG4gIGV2ZW50TGlzdGVuZXI/OiBGdW5jdGlvbjtcbiAgaWNvbj86IElJbnB1dEljb247XG4gIGVycm9ycz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlWYWx1ZT86IGJvb2xlYW47IC8vIGZvciBtdWx0aS12YWx1ZSBjaGlwIHN1cHBvcnRcbiAgY2hpcFZhbHVlcz86IGFueVtdOyAvLyBmb3IgbXVsdGktdmFsdWUgY2hpcCBzdXBwb3J0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0RXZlbnQge1xuICB0eXBlOiBJSW5wdXRFdmVudFR5cGU7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNhbGxCYWNrOiBhbnk7XG4gIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbn1cbmV4cG9ydCBlbnVtIElJbnB1dEV2ZW50VHlwZSB7XG4gIElOUFVUX0NIQU5HRSA9ICdJTlBVVF9DSEFOR0UnLFxuICBTVEFURV9DSEFOR0UgPSAnU1RBVEVfQ0hBTkdFJyxcbiAgSUNPTl9DTElDSyA9ICdJQ09OX0NMSUNLJyxcbn1cbiIsIjxkaXYgY2xhc3M9XCJzYS1pbnB1dC1jb250YWluZXIge3twcm9wcz8uWydpbnB1dENvbnRhaW5lckNsYXNzJ119fVwiIFtuZ1N0eWxlXT1cInsnZ2FwJzogZ2V0TGFiZWxGaWVsZEdhcCgpfVwiPlxuICAgIEBpZiAoISFwcm9wcz8uWydiaWdMYWJlbCddIHx8ICEhcHJvcHM/LlsnYmlnRGVzY3JpcHRpb24nXSkge1xuICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1iaWctbGFiZWwtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJycgXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cInNhLWlucHV0LWJpZy1sYWJlbFwiPlxuICAgICAgICAgICAge3twcm9wcz8uWydiaWdMYWJlbCddfX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPHAgY2xhc3M9XCJzYS1pbnB1dC1iaWctZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIHt7cHJvcHM/LlsnYmlnRGVzY3JpcHRpb24nXX19XG4gICAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmKCEhcHJvcHM/LlsnbGFiZWwnXSl7XG4gICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWxhYmVsLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnIFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2EtaW5wdXQtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2EtaW5wdXQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7e3Byb3BzPy5bJ2xhYmVsJ119fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgQGlmKCEhcHJvcHM/LlsndG9vbHRpcCddKXtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJwcm9wcz8uWyd0b29sdGlwJ11cIiBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiIGNsYXNzPVwidG9vbHRpcC1pY29uIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cInByb3BzPy5bJ3Rvb2x0aXBJY29uU2l6ZSddIHx8ICcyMCdcIj48L3NhLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYoISFwcm9wcz8uWydkZXNjcmlwdGlvbiddKSB7XG4gICAgICAgIDxwIGNsYXNzPVwic2EtaW5wdXQtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIHt7cHJvcHM/LlsnZGVzY3JpcHRpb24nXX19XG4gICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwic2EtaW5wdXRcIiBbbmdDbGFzc109XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiAnJyBcIj5cbiAgICAgICAgQGlmKChwcmV0ZXh0IHx8ICghIWlucHV0VmFsPy5sZW5ndGggJiYgKCEhcGFyYW1zPy5wbGFjZWhvbGRlciB8fCAhIXByb3BzPy5wbGFjZWhvbGRlcikpKSAmJiBwcm9wcz8uWydzaG93VGFnJ11cbiAgICAgICAgIT09IGZhbHNlKXtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYS1pbnB1dC10YWdcIj57e3BhcmFtcz8ucGxhY2Vob2xkZXIgfHwgcHJvcHM/LnBsYWNlaG9sZGVyfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWZpZWxkXCIgW25nQ2xhc3NdPVwiZm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkID8gJ2ludmFsaWQnIDogJ2lkbGUnIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbnB1dEZpZWxkQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgQGlmKHByZXRleHQpe1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LXByZXRleHRcIj5cbiAgICAgICAgICAgICAgICB7e3ByZXRleHR9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gTXVsdGktdmFsdWUgY2hpcCBkaXNwbGF5IC0tPlxuICAgICAgICAgICAgQGlmKGlzTXVsdGlWYWx1ZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2EtY2hpcCBcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlwIG9mIChjaGlwVmFsdWVzIHx8IFtdKT8uc2xpY2Uoc3RhcnRJbmQsc3RhcnRJbmQrbGFiZWxMaW1pdCkgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjaGlwPy52YWx1ZSB8fCBjaGlwPy5sYWJlbCB8fCBjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidyZWd1bGFyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxsaW5nXT1cIidmaWxsZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvblBhdGhdPVwiJy4uL2Fzc2V0cy9jbG9zZUJsdWVPdXRsaW5lZC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrRXZlbnQpPVwicmVtb3ZlQ2hpcChpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3NhLWNoaXA+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzaGlmdExhYmVsKCdjbGlja2VkJylcIiBjbGFzcz1cIm5nLXZhbHVlIG92ZXJmbG93LWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGNoaXBWYWx1ZXMgfHwgW10pLmxlbmd0aCA+IChzdGFydEluZCArIGxhYmVsTGltaXQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2EtY2hpcCBbdGV4dF09XCInKycgKyAoKGNoaXBWYWx1ZXMgfHwgW10pLmxlbmd0aCAtIChzdGFydEluZCArIGxhYmVsTGltaXQpKVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmVndWxhclwiICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9XCJwcmltYXJ5XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxpbmc9XCJmaWxsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2EtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ2NoaXAtaW5wdXQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFt0eXBlXT1cInR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLnByb3BzLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjaGlwVmFsdWVzLmxlbmd0aCA9PT0gMCA/IChwcm9wcz8ucGxhY2Vob2xkZXIgfHwgcGFyYW1zPy5wbGFjZWhvbGRlciB8fCAnJykgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQ2hpcEJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGlwSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNoaXBLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50SW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAjZm9ybUlucHV0IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIHNpbmdsZS12YWx1ZSBpbnB1dCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgLS0+XG4gICAgICAgICAgICAgICAgQGlmKCEhcHJvcHM/LlsncHJlZml4J10pe1xuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFByZWZpeD57e3Byb3BzPy5bJ3ByZWZpeCddfX0mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoISFpbnB1dFZhbCAmJiAocGFyYW1zPy50eXBlID09PSAncGFzc3dvcmQnIHx8IHByb3BzPy50eXBlID09PSAncGFzc3dvcmQnKSAmJiBpY29uLm5hbWUgIT09ICdleWVPZmYnKSA/ICdtYXNrZWQnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBbdHlwZV09XCJwcm9wcz8udHlwZSB8fCB0eXBlXCIgdmFsdWU9XCJcIiBbcGF0dGVybl09XCJ0eXBlPT09J3RlbCcgPyAnWzAtOV0nIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLnByb3BzLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIiFwcmV0ZXh0ICYmIHByb3BzPy5wbGFjZWhvbGRlciB8fCBwYXJhbXM/LnBsYWNlaG9sZGVyIHx8ICcnXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCIgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiaW5wdXRWYWxcIiAjZm9ybUlucHV0IC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZihwYXJhbXM/LnR5cGUgPT09ICdwYXNzd29yZCcpe1xuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgaWNvbj1cImV5ZU91dGxpbmVkXCIgW3NpemVdPVwiaWNvbi5zaXplIHx8ICcyNCdcIiAoY2xpY2spPVwiaW5wdXRJY29uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiIWljb24ubmFtZSB8fCBpY29uLm5hbWUgPT09ICdleWVPdXRsaW5lZCcgPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIGljb249XCJleWVPZmZcIiBbc2l6ZV09XCJpY29uLnNpemUgfHwgJzI0J1wiIChjbGljayk9XCJpbnB1dEljb25DbGljaygpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uLm5hbWUgPT09ICdleWVPZmYnID8gJycgOiAnaGlkZSdcIj48L3NhLWljb24+XG4gICAgICAgICAgICB9QGVsc2UgaWYocGFyYW1zPy50eXBlID09PSAnZW1haWwnICYmIGljb24uc2hvdyl7XG4gICAgICAgICAgICA8c2EtaWNvbiBjbGFzcz1cImZsZXhcIiBbaWNvbl09XCJpY29uLm5hbWUgfHwgJ2NoZWNrQ2lyY2xlT3V0bGluZWQnXCIgW3NpemVdPVwiaWNvbi5zaXplIHx8ICcyNCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEljb25DbGljaygpXCIgW25nQ2xhc3NdPVwic2hvd0VtYWlsSWNvbiA/ICcnIDogJ2hpZGUnXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2UgaWYoaWNvbj8ubmFtZSl7XG4gICAgICAgICAgICA8c2EtaWNvbiBjbGFzcz1cImZsZXhcIiBbaWNvbl09XCJpY29uLm5hbWVcIiBbc2l6ZV09XCJpY29uPy5zaXplIHx8ICcyNCdcIiBbY29sb3JdPVwiaWNvbj8uY29sb3IgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImljb24/LnNob3cgPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZigoIWZvcm1Db250cm9sLnZhbGlkKSB8fCAocGFyYW1zPy5zdXBwb3J0VGV4dCkpe1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cHBvcnQtbGFiZWwge3tmb3JtQ29udHJvbC5pbnZhbGlkICYmIGZvcm1Db250cm9sLnRvdWNoZWQgPyBwYXJhbXM/LmNsYXNzTmFtZSA6ICcnfX1cIiBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkID8gJ2ludmFsaWQnIDogJ2lkbGUnXG4gICAgICAgICAgICAgIF1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIHt7IWZvcm1Db250cm9sLnZhbGlkID8gaW5wdXRFcnJvclRleHQgOiBwYXJhbXMuc3VwcG9ydFRleHR9fSAtLT5cbiAgICAgICAgICAgICAgICB7e2dldEZvcm1TdXBwb3J0VGV4dCgpfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9kaXY+Il19
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQWdCN0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQTBCO0lBK0JoRTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBekJWLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsYUFBUSxHQUFHLEVBQUUs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LGdCQUFnQiw2VEFDaEIsY0FBYzs7MkZBS0wsa0JBQWtCO2tCQWY5QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsY0FBYztxQkFDZjt3REFLdUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUVQLElBQUk7c0JBQWxCLEtBQUs7dUJBQUMsTUFBTTtnQkFNSixNQUFNO3NCQUFkLEtBQUs7O0FBK1VSLE1BQU0sQ0FBTixJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsZ0RBQTZCLENBQUE7SUFDN0IsZ0RBQTZCLENBQUE7SUFDN0IsNENBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1Db250cm9sLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTmdTZWxlY3RNb2R1bGUgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UsXG4gIHBob25lTnVtYmVyVmFsaWRhdG9yLFxufSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IGdldCBhcyBfZ2V0LCBzZXQgYXMgX3NldCwgbWFwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NhLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgQ2hpcHNDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0taW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUlucHV0Q29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz4ge1xuICBAVmlld0NoaWxkKCdmb3JtSW5wdXQnKSBmb3JtSW5wdXQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgnaWNvbicpIGljb246IElJbnB1dEljb247XG5cbiAgcHJldGV4dDogc3RyaW5nO1xuXG4gIGlucHV0U3RhdGUgPSAnaWRsZSc7XG4gIGlucHV0VmFsID0gJyc7XG4gIEBJbnB1dCgpIHBhcmFtczogSUlucHV0UGFyYW0gfCBudWxsO1xuICBkZXBlbmRlbnQ6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfCBudWxsO1xuICBkZXBlbmRlbnRWYWw6IGFueSA9IG51bGw7XG4gIC8vIGR5bmFtaWNJY29uOiBEeW5hbWljSWNvbiB8IG51bGw7XG4gIC8vIGljb246IElJbnB1dEljb24gfCBudWxsO1xuXG4gIHR5cGU6IHN0cmluZyA9ICcnO1xuICB2YWxpZGF0b3JzOiBhbnlbXTtcbiAgYXN5bmNWYWxpZGF0b3JzOiBhbnlbXTtcblxuICBpbnB1dEVycm9yVGV4dDogc3RyaW5nID0gJ2ludmFsaWQgaW5wdXQnO1xuXG4gIHNob3dFbWFpbEljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2hpcFZhbHVlczogYW55W10gPSBbXTtcbiAgaXNNdWx0aVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGN1cnJlbnRJbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgc3RhcnRJbmQ6IG51bWJlciA9IDA7XG4gIGxhYmVsTGltaXQ6IG51bWJlciA9IDE7XG5cbiAgcHJpdmF0ZSBzdXBwcmVzc09uQmx1ciA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlucHV0VmFsID0gX2dldCh0aGlzLmZpZWxkLnByb3BzLCAndmFsdWUnLCBfZ2V0KHRoaXMubW9kZWwsIFt0aGlzLmtleSBhcyBzdHJpbmddKSkgfHwgJyc7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuZmllbGQucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5pbnB1dFZhbCk7XG5cbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMucGFyYW1zIHx8IHRoaXMuZmllbGQucHJvcHNbJ3BhcmFtcyddO1xuICAgIHRoaXMuaWNvbiA9IHRoaXMuaWNvbiB8fCB0aGlzLmZpZWxkLnByb3BzWydpY29uJ10gfHwge307XG4gICAgdGhpcy50eXBlID0gdGhpcy5wYXJhbXM/LnR5cGUgfHwgJyc7XG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIF9zZXQodGhpcy5mb3JtSW5wdXQsICduYXRpdmVFbGVtZW50LnZhbHVlJywgdmFsKTtcbiAgICAgIC8vIEhhbmRsZSBtdWx0aS12YWx1ZSBjaGlwIHVwZGF0ZXNcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlWYWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdGhpcy5jaGlwVmFsdWVzID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtdWx0aS12YWx1ZSBtb2RlIGlmIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ211bHRpLXZhbHVlJyB8fCB0aGlzLnBhcmFtcz8ubXVsdGlWYWx1ZSkge1xuICAgICAgdGhpcy5pc011bHRpVmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGlwVmFsdWVzID0gdGhpcy5tb2RlbFt0aGlzLmtleSBhcyBzdHJpbmddIHx8IHRoaXMucGFyYW1zPy5jaGlwVmFsdWVzIHx8IFtdO1xuICAgICAgdGhpcy5jdXJyZW50SW5wdXRWYWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIC8vIHRoaXMuZHluYW1pY0ljb24gPSB0aGlzLmZpZWxkLnByb3BzWydkeW5hbWljSWNvbiddO1xuICAgIHRoaXMuc2V0VmFsaWRhdG9ycygpO1xuICAgIHRoaXMuc2V0RGVwZW5kZW50cygpO1xuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdlbWFpbCcpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5pbnB1dFZhbCAmJiAhdGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RW1haWxJY29uID1cbiAgICAgICAgICBzdGF0ZSA9PT0gJ1ZBTElEJyB8fFxuICAgICAgICAgIChzdGF0ZSA9PT0gJ0lOVkFMSUQnICYmXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLmhhc0Vycm9yKCdpbnZhbGlkJykgJiZcbiAgICAgICAgICAgICEhdGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIF9zZXQodGhpcy5mb3JtSW5wdXQsICduYXRpdmVFbGVtZW50LnZhbHVlJywgdmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFZhbGlkYXRvcnMoKSB7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gdGhpcy5wYXJhbXM/LnZhbGlkYXRvcnMgfHwgdGhpcy5wcmVkZWZpbmVkVmFsaWRhdG9yc1t0aGlzLnR5cGVdIHx8IFtdO1xuICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzID0gdGhpcy5wYXJhbXM/LmFzeW5jVmFsaWRhdG9ycyB8fCBbXTtcbiAgICBpZighX2dldCh0aGlzLmZpZWxkLCAndmFsaWRhdG9ycy52YWxpZGF0aW9uJywgbnVsbCkpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldFZhbGlkYXRvcnMoW1xuICAgICAgICAuLi4odGhpcy50eXBlID8gdGhpcy5wcmVkZWZpbmVkVmFsaWRhdG9yc1t0aGlzLnR5cGVdIHx8IFtdIDogW10pLFxuICAgICAgICAuLi4odGhpcy52YWxpZGF0b3JzKSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnMpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLmFzeW5jVmFsaWRhdG9ycyk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICBBc3N1bWluZyBkZXBlbmRlbnQgZmllbGQgaXMgYSBzaW5nbGUgc2VsZWN0IGRyb3Bkb3duXG4gICovXG4gIHNldERlcGVuZGVudHMoKSB7XG4gICAgaWYgKHRoaXMucGFyYW1zPy5kZXBlbmRlbnQpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW50ID0gdGhpcy5mb3JtLmdldChbdGhpcy5wYXJhbXM/LmRlcGVuZGVudF0pO1xuXG4gICAgICB0aGlzLmRlcGVuZGVudFZhbCA9IHRoaXMuZ2V0RGVwZW5kZW50VmFsKF9nZXQodGhpcy5kZXBlbmRlbnQsICd2YWx1ZScpKTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZWwnKSB7XG4gICAgICAgIHRoaXMucHJldGV4dCA9IHRoaXMuZGVwZW5kZW50VmFsPy5kaWFsX2NvZGU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVwZW5kZW50Py52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgdGhpcy5kZXBlbmRlbnRWYWwgPSB0aGlzLmdldERlcGVuZGVudFZhbCh2YWwpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5pbnB1dFZhbCk7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0ZWwnKSB7XG4gICAgICAgICAgdGhpcy5wcmV0ZXh0ID0gdGhpcy5kZXBlbmRlbnRWYWw/LmRpYWxfY29kZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldERlcGVuZGVudFZhbCh2YWx1ZTogYW55KSB7XG4gICAgbGV0IGRlcGVuZGVudFZhbHVlOiBhbnk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBkZXBlbmRlbnRWYWx1ZSA9IHZhbHVlLmxlbmd0aCA/IHZhbHVlWzBdIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVwZW5kZW50VmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlcGVuZGVudFZhbHVlO1xuICB9XG5cbiAgY2hlY2tWYWxpZGl0eShkZWZhdWx0SW5wdXRTdGF0ZSA9ICdmb2N1cycpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm1Db250cm9sICYmXG4gICAgICAhdGhpcy5mb3JtQ29udHJvbC52YWxpZCAmJlxuICAgICAgdGhpcy5mb3JtQ29udHJvbC50b3VjaGVkICYmXG4gICAgICAhdGhpcy5mb3JtQ29udHJvbC5wZW5kaW5nXG4gICAgKSB7XG4gICAgICB0aGlzLmlucHV0U3RhdGUgPSAnaW52YWxpZCc7XG4gICAgICB0aGlzLmlucHV0RXJyb3JUZXh0ID1cbiAgICAgICAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMucGFyYW1zPy5wbGFjZWhvbGRlciB8fCB0aGlzLmZpZWxkLnByb3BzPy5sYWJlbCB8fCAnSW5wdXQnLCB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgbmF0aXZlVmFsaWRhdGlvbk9iamVjdDogdGhpcy5maWVsZC52YWxpZGF0aW9uLFxuICAgICAgICB9KSB8fCBgaW52YWxpZCAke3RoaXMucGFyYW1zPy5wbGFjZWhvbGRlciB8fCB0aGlzLmZpZWxkLnByb3BzPy5sYWJlbCB8fCAnaW5wdXQnfWBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFN0YXRlID0gZGVmYXVsdElucHV0U3RhdGU7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWxpZCkgdGhpcy5pbnB1dFN0YXRlID0gJ2ZvY3VzJztcbiAgfVxuICBvbkJsdXIoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc3VwcHJlc3NPbkJsdXIpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZGl0eSgnaWRsZScpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdXBwcmVzc09uQmx1ciA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5wYXJhbXM/LnR5cGUgPT09ICd0ZWwnKSB7XG4gICAgICB0aGlzLmlucHV0VmFsID0gdGhpcy5pbnB1dFZhbC5yZXBsYWNlKC9bXjAtOSgpK1xcLSBdL2csICcnKTtcbiAgICAgIHRoaXMuaW5wdXRWYWwgPSB0aGlzLmh5cGhlbmF0ZVBob25lTnVtYmVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcmFtcz8udHlwZSA9PT0gJ3BlcmNlbnRhZ2UnKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmlucHV0VmFsLnJlcGxhY2UoL1teMC05Ll0vZywgJycpO1xuICAgICAgdGhpcy5pbnB1dFZhbCA9IHZhbHVlID8gYCR7dmFsdWV9JWAgOiAnJztcbiAgICB9XG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5pbnB1dFZhbCk7XG4gICAgdGhpcy5jaGVja1ZhbGlkaXR5KCk7XG4gICAgLyppZiAodGhpcy5wYXJhbXM/LmV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucGFyYW1zPy5ldmVudExpc3RlbmVyKHtcbiAgICAgICAgdHlwZTogSUlucHV0RXZlbnRUeXBlLklOUFVUX0NIQU5HRSxcbiAgICAgICAgdmFsdWU6IHRoaXMuaW5wdXRWYWwsXG4gICAgICAgIGZvcm1Db250cm9sOiB0aGlzLmZvcm1Db250cm9sXG4gICAgICB9IGFzIElJbnB1dEV2ZW50KS50aGVuKHRoaXMub25GaWVsZENhbGxiYWNrLmJpbmQodGhpcykpO1xuICAgIH0qL1xuICB9XG5cbiAgaHlwaGVuYXRlUGhvbmVOdW1iZXIoKSB7XG4gICAgbGV0IG5ld1N0ciA9ICcnO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgaHlwaGVuYXRlZENvdW50ID0gMTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRWYWwucmVwbGFjZUFsbCgnLScsICcnKTtcbiAgICBmb3IgKDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdTdHIgPSBuZXdTdHIgKyB2YWx1ZS5jaGFyQXQoaSk7XG4gICAgICBpZiAoIShoeXBoZW5hdGVkQ291bnQgJSAzKSkge1xuICAgICAgICBpZiAoISgoaSArIDEpICUgMTApICYmIGkgKyAxIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgbmV3U3RyID0gbmV3U3RyICsgJy0nO1xuICAgICAgICAgIGh5cGhlbmF0ZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAhKChpICsgMSAtIE1hdGguZmxvb3IoaHlwaGVuYXRlZENvdW50IC8gMykpICUgMykgJiZcbiAgICAgICAgaSArIDEgPCB2YWx1ZS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBuZXdTdHIgPSBuZXdTdHIgKyAnLSc7XG4gICAgICAgIGh5cGhlbmF0ZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdTdHI7XG4gIH1cblxuICBvbklucHV0RmllbGRDbGljayhldmVudDogYW55ID0gJ2lucHV0Jykge1xuICAgIGlmIChcbiAgICAgIGV2ZW50ID09PSAnaW5wdXQnIHx8XG4gICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYS1pbnB1dC1maWVsZCcpXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICBpZiAodGhpcy5wYXJhbXM/LnR5cGUgIT09ICdlbWFpbCcpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9ybUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsLmxlbmd0aCxcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWwubGVuZ3RoLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dEljb25DbGljaygpIHtcbiAgICBpZiAodGhpcy5wYXJhbXM/LnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIHRoaXMuc3VwcHJlc3NPbkJsdXIgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICB0aGlzLnR5cGUgPSAndGV4dCc7XG4gICAgICAgIHRoaXMuaWNvbi5uYW1lID0gJ2V5ZU9mZic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnR5cGUgPSAncGFzc3dvcmQnO1xuICAgICAgICB0aGlzLmljb24ubmFtZSA9ICdleWVPdXRsaW5lZCc7XG4gICAgICB9XG4gICAgICB0aGlzLm9uSW5wdXRGaWVsZENsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ2hpcCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlWYWx1ZSB8fCAhdmFsdWUudHJpbSgpKSByZXR1cm47ICBcbiAgICBjb25zdCBjaGlwVmFsdWUgPSB7XG4gICAgICBsYWJlbDogdmFsdWUudHJpbSgpLFxuICAgICAgdmFsdWU6IHZhbHVlLnRyaW0oKSxcbiAgICAgIHJlbW92YWJsZTogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5jaGlwVmFsdWVzLnB1c2goY2hpcFZhbHVlKTsgICAgXG4gICAgY29uc3QgYWN0dWFsVmFsdWVzID0gbWFwKHRoaXMuY2hpcFZhbHVlcywgKGNoaXA6IGFueSkgPT4gY2hpcC52YWx1ZSB8fCBjaGlwLmxhYmVsIHx8IGNoaXApO1xuICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldFZhbHVlKGFjdHVhbFZhbHVlcyk7XG4gICAgdGhpcy5jdXJyZW50SW5wdXRWYWx1ZSA9ICcnO1xuICAgIHRoaXMubW9kZWxbdGhpcy5rZXkgYXMgc3RyaW5nXSA9IGFjdHVhbFZhbHVlcztcbiAgfVxuICBcbiAgcmVtb3ZlQ2hpcChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlWYWx1ZSkgcmV0dXJuOyAgXG4gICAgdGhpcy5jaGlwVmFsdWVzLnNwbGljZShpbmRleCwgMSk7ICBcbiAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSBtYXAodGhpcy5jaGlwVmFsdWVzLCAoY2hpcDogYW55KSA9PiBjaGlwLnZhbHVlIHx8IGNoaXAubGFiZWwgfHwgY2hpcCk7XG4gICAgdGhpcy5tb2RlbFt0aGlzLmtleSBhcyBzdHJpbmddID0gYWN0dWFsVmFsdWVzO1xuICB9XG5cbiAgb25DaGlwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICghdGhpcy5pc011bHRpVmFsdWUpIHJldHVybjtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJywnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5hZGRDaGlwKHRoaXMuY3VycmVudElucHV0VmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5jdXJyZW50SW5wdXRWYWx1ZSAmJiB0aGlzLmNoaXBWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlwKHRoaXMuY2hpcFZhbHVlcy5sZW5ndGggLSAxKTtcbiAgICB9XG4gIH1cbiAgXG4gIG9uQ2hpcElucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50SW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuXG4gIG9uQ2hpcEJsdXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlWYWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbnB1dFZhbHVlLnRyaW0oKSkge1xuICAgICAgdGhpcy5hZGRDaGlwKHRoaXMuY3VycmVudElucHV0VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKm9uRmllbGRDYWxsYmFjayhwYXJhbTogSUlucHV0UGFyYW0pIHtcbiAgICB0aGlzLmljb24gPSBwYXJhbS5pY29uIHx8IHRoaXMuaWNvbjtcbiAgICB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgfSovXG5cbiAgZ2V0Rm9ybVN1cHBvcnRUZXh0KCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLmludmFsaWQgJiYgdGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmZvcm1Db250cm9sLmVycm9ycywgdGhpcy5wYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHRoaXMuZmllbGQucHJvcHM/LmxhYmVsIHx8ICdJbnB1dCcse1xuICAgICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgICAgIG5hdGl2ZVZhbGlkYXRpb25PYmplY3Q6IF9nZXQodGhpcy5maWVsZCwgJ3ZhbGlkYXRpb24nKSxcbiAgICAgICAgfSkgfHxcbiAgICAgICAgYGludmFsaWQgJHt0aGlzLnBhcmFtcz8ucGxhY2Vob2xkZXIgfHwgdGhpcy5maWVsZC5wcm9wcz8ubGFiZWwgfHwgJ2lucHV0J31gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbXM/LnN1cHBvcnRUZXh0IHx8ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByZWRlZmluZWRWYWxpZGF0b3JzOiBhbnkgPSB7XG4gICAgZW1haWw6IFtWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICBwYXNzd29yZDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIHRlbDogW1ZhbGlkYXRvcnMucGF0dGVybignXlswLTkgK1xcXFwtKCldKiQnKV0sXG4gIH07XG5cbiAgZ2V0TGFiZWxGaWVsZEdhcCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzPy5bJ2JpZ0xhYmVsJ10pIHtcbiAgICAgIHJldHVybiAndmFyKC0tbWVkaXVtLTIwcHgpJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHM/LlsnbGFiZWwnXSkge1xuICAgICAgcmV0dXJuICd2YXIoLS1zbWFsbC00cHgpJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcwcHgnOyAvLyBObyBnYXBcbiAgICB9XG4gIH1cblxuICBzaGlmdExhYmVsKGFjdGlvbjogJ2NsaWNrZWQnIHwgJ2NsZWFyZWQnKSB7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2NsaWNrZWQnKSB7XG4gICAgICB0aGlzLnN0YXJ0SW5kID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydEluZCA9IE1hdGgubWF4KDAsIHRoaXMuY2hpcFZhbHVlcy5sZW5ndGggLSB0aGlzLmxhYmVsTGltaXQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dEljb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNob3c/OiBib29sZWFuO1xuICBjb2xvcj86IHN0cmluZztcbiAgc2l6ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW5wdXRQYXJhbSB7XG4gIHZhbGlkYXRvcnM/OiBhbnlbXTtcbiAgYXN5bmNWYWxpZGF0b3JzPzogYW55W107XG4gIHN1cHBvcnRUZXh0Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgZGVwZW5kZW50Pzogc3RyaW5nO1xuICBldmVudExpc3RlbmVyPzogRnVuY3Rpb247XG4gIGljb24/OiBJSW5wdXRJY29uO1xuICBlcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG11bHRpVmFsdWU/OiBib29sZWFuOyAvLyBmb3IgbXVsdGktdmFsdWUgY2hpcCBzdXBwb3J0XG4gIGNoaXBWYWx1ZXM/OiBhbnlbXTsgLy8gZm9yIG11bHRpLXZhbHVlIGNoaXAgc3VwcG9ydFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dEV2ZW50IHtcbiAgdHlwZTogSUlucHV0RXZlbnRUeXBlO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjYWxsQmFjazogYW55O1xuICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG59XG5leHBvcnQgZW51bSBJSW5wdXRFdmVudFR5cGUge1xuICBJTlBVVF9DSEFOR0UgPSAnSU5QVVRfQ0hBTkdFJyxcbiAgU1RBVEVfQ0hBTkdFID0gJ1NUQVRFX0NIQU5HRScsXG4gIElDT05fQ0xJQ0sgPSAnSUNPTl9DTElDSycsXG59XG4iLCI8ZGl2IGNsYXNzPVwic2EtaW5wdXQtY29udGFpbmVyIHt7cHJvcHM/LlsnaW5wdXRDb250YWluZXJDbGFzcyddfX1cIiBbbmdTdHlsZV09XCJ7J2dhcCc6IGdldExhYmVsRmllbGRHYXAoKX1cIj5cbiAgICBAaWYgKCEhcHJvcHM/LlsnYmlnTGFiZWwnXSB8fCAhIXByb3BzPy5bJ2JpZ0Rlc2NyaXB0aW9uJ10pIHtcbiAgICA8ZGl2IGNsYXNzPVwic2EtaW5wdXQtYmlnLWxhYmVsLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnIFwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJzYS1pbnB1dC1iaWctbGFiZWxcIj5cbiAgICAgICAgICAgIHt7cHJvcHM/LlsnYmlnTGFiZWwnXX19XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxwIGNsYXNzPVwic2EtaW5wdXQtYmlnLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICB7e3Byb3BzPy5bJ2JpZ0Rlc2NyaXB0aW9uJ119fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZighIXByb3BzPy5bJ2xhYmVsJ10pe1xuICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1sYWJlbC1jb250YWluZXJcIiBbbmdDbGFzc109XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiAnJyBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNhLWlucHV0LWxhYmVsLXRvb2x0aXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNhLWlucHV0LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3twcm9wcz8uWydsYWJlbCddfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZighIXByb3BzPy5bJ3Rvb2x0aXAnXSl7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gW2ljb25dPVwicHJvcHM/LlsndG9vbHRpcEljb24nXSB8fCAnaW5mb0NpcmNsZU91dGxpbmVkJ1wiIGN1c3RvbUNsYXNzPVwiaW5mby1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwicHJvcHM/LlsndG9vbHRpcCddXCIgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIiBjbGFzcz1cInRvb2x0aXAtaWNvbiBkLWZsZXhcIlxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJwcm9wcz8uWyd0b29sdGlwSWNvblNpemUnXSB8fCAnMjAnXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmKCEhcHJvcHM/LlsnZGVzY3JpcHRpb24nXSkge1xuICAgICAgICA8cCBjbGFzcz1cInNhLWlucHV0LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICB7e3Byb3BzPy5bJ2Rlc2NyaXB0aW9uJ119fVxuICAgICAgICA8L3A+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInNhLWlucHV0XCIgW25nQ2xhc3NdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJycgXCI+XG4gICAgICAgIEBpZigocHJldGV4dCB8fCAoISFpbnB1dFZhbD8ubGVuZ3RoICYmICghIXBhcmFtcz8ucGxhY2Vob2xkZXIgfHwgISFwcm9wcz8ucGxhY2Vob2xkZXIpKSkgJiYgcHJvcHM/Llsnc2hvd1RhZyddXG4gICAgICAgICE9PSBmYWxzZSl7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2EtaW5wdXQtdGFnXCI+e3twYXJhbXM/LnBsYWNlaG9sZGVyIHx8IHByb3BzPy5wbGFjZWhvbGRlcn19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1maWVsZFwiIFtuZ0NsYXNzXT1cImZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZCA/ICdpbnZhbGlkJyA6ICdpZGxlJyBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW5wdXRGaWVsZENsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIEBpZihwcmV0ZXh0KXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1wcmV0ZXh0XCI+XG4gICAgICAgICAgICAgICAge3twcmV0ZXh0fX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIE11bHRpLXZhbHVlIGNoaXAgZGlzcGxheSAtLT5cbiAgICAgICAgICAgIEBpZihpc011bHRpVmFsdWUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNhLWNoaXAgXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiAoY2hpcFZhbHVlcyB8fCBbXSk/LnNsaWNlKHN0YXJ0SW5kLHN0YXJ0SW5kK2xhYmVsTGltaXQpIGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiY2hpcD8udmFsdWUgfHwgY2hpcD8ubGFiZWwgfHwgY2hpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCIncmVndWxhcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsbGluZ109XCInZmlsbGVkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidyaWdodCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25QYXRoXT1cIicuLi9hc3NldHMvY2xvc2VCbHVlT3V0bGluZWQuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGlja0V2ZW50KT1cInJlbW92ZUNoaXAoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zYS1jaGlwPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2hpZnRMYWJlbCgnY2xpY2tlZCcpXCIgY2xhc3M9XCJuZy12YWx1ZSBvdmVyZmxvdy1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihjaGlwVmFsdWVzIHx8IFtdKS5sZW5ndGggPiAoc3RhcnRJbmQgKyBsYWJlbExpbWl0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWNoaXAgW3RleHRdPVwiJysnICsgKChjaGlwVmFsdWVzIHx8IFtdKS5sZW5ndGggLSAoc3RhcnRJbmQgKyBsYWJlbExpbWl0KSlcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJlZ3VsYXJcIiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlPVwicHJpbWFyeVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsaW5nPVwiZmlsbGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NhLWNoaXA+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidjaGlwLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY2hpcFZhbHVlcy5sZW5ndGggPT09IDAgPyAocHJvcHM/LnBsYWNlaG9sZGVyIHx8IHBhcmFtcz8ucGxhY2Vob2xkZXIgfHwgJycpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkNoaXBCbHVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hpcElucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25DaGlwS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudElucHV0VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgI2Zvcm1JbnB1dCAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFyZCBzaW5nbGUtdmFsdWUgaW5wdXQgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIC0tPlxuICAgICAgICAgICAgICAgIEBpZighIXByb3BzPy5bJ3ByZWZpeCddKXtcbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRQcmVmaXg+e3twcm9wcz8uWydwcmVmaXgnXX19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKCEhaW5wdXRWYWwgJiYgKHBhcmFtcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJyB8fCBwcm9wcz8udHlwZSA9PT0gJ3Bhc3N3b3JkJykgJiYgaWNvbi5uYW1lICE9PSAnZXllT2ZmJykgPyAnbWFza2VkJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgW3R5cGVdPVwicHJvcHM/LnR5cGUgfHwgdHlwZVwiIHZhbHVlPVwiXCIgW3BhdHRlcm5dPVwidHlwZT09PSd0ZWwnID8gJ1swLTldJyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIhcHJldGV4dCAmJiBwcm9wcz8ucGxhY2Vob2xkZXIgfHwgcGFyYW1zPy5wbGFjZWhvbGRlciB8fCAnJ1wiIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIiBbKG5nTW9kZWwpXT1cImlucHV0VmFsXCIgI2Zvcm1JbnB1dCAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYocGFyYW1zPy50eXBlID09PSAncGFzc3dvcmQnKXtcbiAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiIGljb249XCJleWVPdXRsaW5lZFwiIFtzaXplXT1cImljb24uc2l6ZSB8fCAnMjQnXCIgKGNsaWNrKT1cImlucHV0SWNvbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFpY29uLm5hbWUgfHwgaWNvbi5uYW1lID09PSAnZXllT3V0bGluZWQnID8gJycgOiAnaGlkZSdcIj48L3NhLWljb24+XG4gICAgICAgICAgICA8c2EtaWNvbiBjbGFzcz1cImZsZXhcIiBpY29uPVwiZXllT2ZmXCIgW3NpemVdPVwiaWNvbi5zaXplIHx8ICcyNCdcIiAoY2xpY2spPVwiaW5wdXRJY29uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbi5uYW1lID09PSAnZXllT2ZmJyA/ICcnIDogJ2hpZGUnXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgfUBlbHNlIGlmKHBhcmFtcz8udHlwZSA9PT0gJ2VtYWlsJyAmJiBpY29uLnNob3cpe1xuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiaWNvbi5uYW1lIHx8ICdjaGVja0NpcmNsZU91dGxpbmVkJ1wiIFtzaXplXT1cImljb24uc2l6ZSB8fCAnMjQnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5wdXRJY29uQ2xpY2soKVwiIFtuZ0NsYXNzXT1cInNob3dFbWFpbEljb24gPyAnJyA6ICdoaWRlJ1wiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBlbHNlIGlmKGljb24/Lm5hbWUpe1xuICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgW2ljb25dPVwiaWNvbi5uYW1lXCIgW3NpemVdPVwiaWNvbj8uc2l6ZSB8fCAnMjQnXCIgW2NvbG9yXT1cImljb24/LmNvbG9yIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uPy5zaG93ID8gJycgOiAnaGlkZSdcIj48L3NhLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYoKCFmb3JtQ29udHJvbC52YWxpZCkgfHwgKHBhcmFtcz8uc3VwcG9ydFRleHQpKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXBwb3J0LWxhYmVsIHt7Zm9ybUNvbnRyb2wuaW52YWxpZCAmJiBmb3JtQ29udHJvbC50b3VjaGVkID8gcGFyYW1zPy5jbGFzc05hbWUgOiAnJ319XCIgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZCA/ICdpbnZhbGlkJyA6ICdpZGxlJ1xuICAgICAgICAgICAgICBdXCI+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyFmb3JtQ29udHJvbC52YWxpZCA/IGlucHV0RXJyb3JUZXh0IDogcGFyYW1zLnN1cHBvcnRUZXh0fX0gLS0+XG4gICAgICAgICAgICAgICAge3tnZXRGb3JtU3VwcG9ydFRleHQoKX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -294,7 +294,7 @@ export class FormSelectComponent extends FieldType {
294
294
  }
295
295
  }
296
296
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
297
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormSelectComponent, isStandalone: true, selector: "lib-form-select", outputs: { hoverEvent: "hoverEvent" }, viewQueries: [{ propertyName: "ngSelect", first: true, predicate: NgSelectComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\n @if(!!props?.['label']){\n <div class=\"sa-select-label-container\">\n <div class=\"sa-select-label-tooltip-container\">\n <span class=\"sa-select-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-select-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-select-field-container\">\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\n class=\"clicked-label\">{{params.label}}\n </div>\n <div\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\n </div>\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" class=\"form-ng-select\"> \n <!-- Multi-label template for displaying selected items as chips -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\n [iconPath]=\"params.iconPath\" \n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \n [type]=\"params.type\"\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \n [filling]=\"params.filling\"\n [iconPosition]=\"params.iconPosition\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"items.length > (startInd+labelLimit)\">\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'primary'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\n class=\"ng-value overflow-label\">\n <sa-chip text=\"...\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'default'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n </ng-template>\n \n <!-- Universal option template with tooltip support for any select type -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\n <!-- Checkbox for multi-select -->\n <input *ngIf=\"params?.showCheckboxes\" \n type=\"checkbox\" \n [checked]=\"isOptionSelected(item)\" \n (mousedown)=\"toggleItemSelection(item, $event)\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n class=\"option-checkbox\">\n \n <!-- Option label -->\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\n \n <!-- Tooltip icon - shows when item has description/tooltip -->\n <sa-icon *ngIf=\"item.description || item.tooltip\" \n [icon]=\"'infoCircleOutlined'\" \n [size]=\"'16'\" \n class=\"option-tooltip-icon d-flex\"\n [matTooltip]=\"item.description || item.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\"\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\n </sa-icon>\n </div>\n </ng-template>\n \n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\n <div class=\"select-all-header\">\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\n </div>\n </ng-template>\n\n <ng-template ng-arrow-tmp>\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\n </ng-template>\n </ng-select>\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\n (blur)=\"openClose(false)\" ></sa-icon>\n </div>\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\n </div> -->\n\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\n </div>\n </div>\n @if(!formControl.valid){\n <div class=\"error-message-container\">\n <span class=\"error-message\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </span>\n </div>\n }\n <div class=\"support-label\">{{params.supportText}}</div>\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.form-ng-select.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
297
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormSelectComponent, isStandalone: true, selector: "lib-form-select", outputs: { hoverEvent: "hoverEvent" }, viewQueries: [{ propertyName: "ngSelect", first: true, predicate: NgSelectComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\n @if(!!props?.['label']){\n <div class=\"sa-select-label-container\">\n <div class=\"sa-select-label-tooltip-container\">\n <span class=\"sa-select-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-select-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-select-field-container\">\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\n class=\"clicked-label\">{{params.label}}\n </div>\n <div\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\n </div>\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" [closeOnSelect]=\"!params?.showCheckboxes\" class=\"form-ng-select\"> \n <!-- Multi-label template for displaying selected items as chips -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\n [iconPath]=\"params.iconPath\" \n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \n [type]=\"params.type\"\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \n [filling]=\"params.filling\"\n [iconPosition]=\"params.iconPosition\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"items.length > (startInd+labelLimit)\">\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'primary'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\n class=\"ng-value overflow-label\">\n <sa-chip text=\"...\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'default'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n </ng-template>\n \n <!-- Universal option template with tooltip support for any select type -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\n <!-- Checkbox for multi-select -->\n <input *ngIf=\"params?.showCheckboxes\" \n type=\"checkbox\" \n [checked]=\"isOptionSelected(item)\" \n (mousedown)=\"toggleItemSelection(item, $event)\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n class=\"option-checkbox\">\n \n <!-- Option label -->\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\n \n <!-- Tooltip icon - shows when item has description/tooltip -->\n <sa-icon *ngIf=\"item.description || item.tooltip\" \n [icon]=\"'infoCircleOutlined'\" \n [size]=\"'16'\" \n class=\"option-tooltip-icon d-flex\"\n [matTooltip]=\"item.description || item.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\"\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\n </sa-icon>\n </div>\n </ng-template>\n \n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\n <div class=\"select-all-header\">\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\n </div>\n </ng-template>\n\n <ng-template ng-arrow-tmp>\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\n </ng-template>\n </ng-select>\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\n (blur)=\"openClose(false)\" ></sa-icon>\n </div>\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\n </div> -->\n\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\n </div>\n </div>\n @if(!formControl.valid){\n <div class=\"error-message-container\">\n <span class=\"error-message\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </span>\n </div>\n }\n <div class=\"support-label\">{{params.supportText}}</div>\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.form-ng-select.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
298
298
  }
299
299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectComponent, decorators: [{
300
300
  type: Component,
@@ -310,7 +310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
310
310
  IconComponent,
311
311
  CommonModule,
312
312
  MatTooltipModule
313
- ], template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\n @if(!!props?.['label']){\n <div class=\"sa-select-label-container\">\n <div class=\"sa-select-label-tooltip-container\">\n <span class=\"sa-select-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-select-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-select-field-container\">\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\n class=\"clicked-label\">{{params.label}}\n </div>\n <div\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\n </div>\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" class=\"form-ng-select\"> \n <!-- Multi-label template for displaying selected items as chips -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\n [iconPath]=\"params.iconPath\" \n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \n [type]=\"params.type\"\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \n [filling]=\"params.filling\"\n [iconPosition]=\"params.iconPosition\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"items.length > (startInd+labelLimit)\">\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'primary'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\n class=\"ng-value overflow-label\">\n <sa-chip text=\"...\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'default'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n </ng-template>\n \n <!-- Universal option template with tooltip support for any select type -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\n <!-- Checkbox for multi-select -->\n <input *ngIf=\"params?.showCheckboxes\" \n type=\"checkbox\" \n [checked]=\"isOptionSelected(item)\" \n (mousedown)=\"toggleItemSelection(item, $event)\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n class=\"option-checkbox\">\n \n <!-- Option label -->\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\n \n <!-- Tooltip icon - shows when item has description/tooltip -->\n <sa-icon *ngIf=\"item.description || item.tooltip\" \n [icon]=\"'infoCircleOutlined'\" \n [size]=\"'16'\" \n class=\"option-tooltip-icon d-flex\"\n [matTooltip]=\"item.description || item.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\"\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\n </sa-icon>\n </div>\n </ng-template>\n \n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\n <div class=\"select-all-header\">\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\n </div>\n </ng-template>\n\n <ng-template ng-arrow-tmp>\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\n </ng-template>\n </ng-select>\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\n (blur)=\"openClose(false)\" ></sa-icon>\n </div>\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\n </div> -->\n\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\n </div>\n </div>\n @if(!formControl.valid){\n <div class=\"error-message-container\">\n <span class=\"error-message\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </span>\n </div>\n }\n <div class=\"support-label\">{{params.supportText}}</div>\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.form-ng-select.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"] }]
313
+ ], template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\n @if(!!props?.['label']){\n <div class=\"sa-select-label-container\">\n <div class=\"sa-select-label-tooltip-container\">\n <span class=\"sa-select-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-select-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-select-field-container\">\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\n class=\"clicked-label\">{{params.label}}\n </div>\n <div\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\n </div>\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" [closeOnSelect]=\"!params?.showCheckboxes\" class=\"form-ng-select\"> \n <!-- Multi-label template for displaying selected items as chips -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\n [iconPath]=\"params.iconPath\" \n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \n [type]=\"params.type\"\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \n [filling]=\"params.filling\"\n [iconPosition]=\"params.iconPosition\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"items.length > (startInd+labelLimit)\">\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'primary'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\n class=\"ng-value overflow-label\">\n <sa-chip text=\"...\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'default'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n </ng-template>\n \n <!-- Universal option template with tooltip support for any select type -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\n <!-- Checkbox for multi-select -->\n <input *ngIf=\"params?.showCheckboxes\" \n type=\"checkbox\" \n [checked]=\"isOptionSelected(item)\" \n (mousedown)=\"toggleItemSelection(item, $event)\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n class=\"option-checkbox\">\n \n <!-- Option label -->\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\n \n <!-- Tooltip icon - shows when item has description/tooltip -->\n <sa-icon *ngIf=\"item.description || item.tooltip\" \n [icon]=\"'infoCircleOutlined'\" \n [size]=\"'16'\" \n class=\"option-tooltip-icon d-flex\"\n [matTooltip]=\"item.description || item.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\"\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\n </sa-icon>\n </div>\n </ng-template>\n \n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\n <div class=\"select-all-header\">\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\n </div>\n </ng-template>\n\n <ng-template ng-arrow-tmp>\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\n </ng-template>\n </ng-select>\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\n (blur)=\"openClose(false)\" ></sa-icon>\n </div>\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\n </div> -->\n\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\n </div>\n </div>\n @if(!formControl.valid){\n <div class=\"error-message-container\">\n <span class=\"error-message\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </span>\n </div>\n }\n <div class=\"support-label\">{{params.supportText}}</div>\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.form-ng-select.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"] }]
314
314
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { hoverEvent: [{
315
315
  type: Output,
316
316
  args: ['hoverEvent']
@@ -318,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
318
318
  type: ViewChild,
319
319
  args: [NgSelectComponent]
320
320
  }] } });
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9mb3JtLXNlbGVjdC9mb3JtLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0tc2VsZWN0L2Zvcm0tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFzQnpFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUEwQjtJQUlqRSxvREFBb0Q7SUFDcEQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMs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QUMsV0FBVyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQXdCLEVBQUUsUUFBYSxJQUFJLEVBQUUsT0FBbUI7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQTdUVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0SkFvQm5CLGlCQUFpQix1RUNuRDlCLHN1TkE4SE0sdWtORDlHRixtQkFBbUIseVRBQ25CLFlBQVkseVFBRVosY0FBYyxzcUNBQ2QsY0FBYywyTkFDZCxJQUFJLDZGQUNKLEtBQUssa0hBQ0wsZ0JBQWdCLDZUQUNoQixhQUFhLG9NQUNiLFlBQVk7OzJGQU1ILG1CQUFtQjtrQkFuQi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZ0JBQWdCO3FCQUNqQjsrRUF1QnFCLFVBQVU7c0JBQS9CLE1BQU07dUJBQUMsWUFBWTtnQkFDVSxRQUFRO3NCQUFyQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE5nU2VsZWN0Q29tcG9uZW50LCBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwLCBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBTZWxlY3RJbnRlcmZhY2UsIFNlbGVjdFN1YkludGVyZmFjZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ1NlbGVjdE1vZHVsZSxcbiAgICBDaGlwc0NvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybS1zZWxlY3QuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IHtcbiAgc2VsZWN0YWJsZXM6IGFueTtcbiAgcGFyYW1zOiBhbnk7XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgZnVsbCBvYmplY3QgZnJvbSBib3VuZCB2YWx1ZVxuICBnZXRGdWxsT2JqZWN0RnJvbVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGJpbmRWYWx1ZSA9IHRoaXMucGFyYW1zPy5iaW5kVmFsdWUgfHwgdGhpcy5maWVsZC5wcm9wcz8uWydiaW5kVmFsdWUnXTtcbiAgICBpZiAoIWJpbmRWYWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIFxuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbVtiaW5kVmFsdWVdID09PSB2YWx1ZSkgfHwgdmFsdWU7XG4gIH1cblxuICBzdmdTdHlsZSA9IHt9O1xuICBvcGVuU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9wTGFiZWw6IGJvb2xlYW47XG4gIHN0YXJ0SW5kOiBudW1iZXIgPSAwO1xuICBsYWJlbExpbWl0OiBudW1iZXIgPSAyO1xuXG4gIHBsYWNlaG9sZGVyTGFiZWw6IHN0cmluZztcbiAgQE91dHB1dCgnaG92ZXJFdmVudCcpIGhvdmVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxzZWxlY3RIb3ZlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZChOZ1NlbGVjdENvbXBvbmVudCkgbmdTZWxlY3QhOiBOZ1NlbGVjdENvbXBvbmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGFibGVzID0gdGhpcy5maWVsZC5wcm9wcy5vcHRpb25zOyAgICBcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZmllbGQucHJvcHNbJ3BhcmFtcyddIHx8IHt9O1xuICAgIFxuICAgIC8vIEZhbGxiYWNrIHRvIGZpZWxkLnByb3BzIGlmIHBhcmFtcyBpcyBlbXB0eVxuICAgIGlmICghdGhpcy5wYXJhbXMgfHwgT2JqZWN0LmtleXModGhpcy5wYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZpZWxkLnByb3BzO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5sYWJlbCB8fCB0aGlzLmZpZWxkLnByb3BzLnBsYWNlaG9sZGVyO1xuICAgIHRoaXMuc3ZnU3R5bGUgPSB7XG4gICAgICAnLXdlYmtpdC1tYXNrLWltYWdlJzogYHVybCgke3RoaXMucGFyYW1zLmRyb3BJY29ufSl9KWAsXG4gICAgICAnbWFzay1pbWFnZSc6IGB1cmwoJHt0aGlzLnBhcmFtcy5kcm9wSWNvbn0pYCxcbiAgICB9XG4gICAgXG4gICAgLy8gU2V0IENTUyBjdXN0b20gcHJvcGVydHkgZm9yIGNoaXAgYmFja2dyb3VuZCBiYXNlZCBvbiBzdGF0ZVxuICAgIHRoaXMuc2V0Q2hpcEJhY2tncm91bmRDb2xvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGlwQmFja2dyb3VuZENvbG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5wYXJhbXM/LnN0YXRlO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tcHJpbWFyeS01MCknOyAvLyBkZWZhdWx0IGZhbGxiYWNrXG4gICAgXG4gICAgLy8gTWFwIGNoaXAgc3RhdGVzIHRvIGFwcHJvcHJpYXRlIGJhY2tncm91bmQgY29sb3JzXG4gICAgc3dpdGNoKHN0YXRlKSB7XG4gICAgICBjYXNlICduZXV0cmFsJzpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLWdyZXktNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXN1Y2Nlc3MtNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGJhY2tncm91bmRDb2xvciA9ICd2YXIoLS1lcnJvci01MCknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0td2FybmluZy01MCknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ByaW1hcnknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXByaW1hcnktNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZy1zZWxlY3QtY2hpcC1iZycsIGJhY2tncm91bmRDb2xvcik7XG4gICAgfVxuICB9XG4gIG9wZW5DbG9zZShzdGF0ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmZpZWxkLnByb3BzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5vcGVuU3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlckxhYmVsID0gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLmxhYmVsO1xuICAgIH1cbiAgfVxuICBzaGlmdExhYmVsKGFjdGlvbjogc3RyaW5nKSB7XG4gIGlmIChhY3Rpb24gPT0gJ2NsaWNrZWQnKSB0aGlzLnN0YXJ0SW5kKys7XG4gIGlmIChhY3Rpb24gPT0gJ2NsZWFyZWQnKSB0aGlzLnN0YXJ0SW5kID0gMDtcbiAgaWYgKGFjdGlvbiA9PSAncmVtb3ZlZCcgJiYgdGhpcy5zdGFydEluZCA+IDApIHRoaXMuc3RhcnRJbmQtLTtcbiAgdGhpcy50b3BMYWJlbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU/Lmxlbmd0aCA+IDA7IFxuICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLm9wZW5TdGF0ZSB8fCB0aGlzLmZvcm1Db250cm9sLnZhbHVlPy5sZW5ndGggPiAwIFxuICAgID8gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXIgXG4gICAgOiB0aGlzLnBhcmFtcy5sYWJlbDtcbn1cblxuICB0b2dnbGVPcHRpb24oaXRlbTogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICghdGhpcy5wYXJhbXM/Lm11bHRpcGxlKSB7XG4gICAgICAvLyBTaW5nbGUgc2VsZWN0IG1vZGVcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbSk7XG4gICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlOyBcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNdWx0aS1zZWxlY3QgbW9kZVxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wYXJhbXM/LmJpbmRWYWx1ZSB8fCB0aGlzLmZpZWxkLnByb3BzPy5bJ2JpbmRWYWx1ZSddO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGJpbmRWYWx1ZSA/IGl0ZW1bYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgXG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gYmluZFZhbHVlID8gc2VsZWN0ZWRbYmluZFZhbHVlXSA6IHNlbGVjdGVkO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWUgPT09IGl0ZW1WYWx1ZTtcbiAgICB9KTtcblxuICAgIGxldCBuZXdWYWx1ZTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlXTtcbiAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gWy4uLmN1cnJlbnRWYWx1ZSwgaXRlbV07XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBcbiAgICB0aGlzLmNoZWNrRm9yWmVybyhuZXdWYWx1ZSk7XG4gICAgXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuXG4gIG9uTmdTZWxlY3RDaGFuZ2Uoc2VsZWN0ZWQ6IGFueSk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIG5nLXNlbGVjdCBjaGFuZ2VzIHdoZW4gTk9UIGluIGNoZWNrYm94IG1vZGVcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5zaG93Q2hlY2tib3hlcykge1xuICAgICAgdGhpcy5jaGVja0Zvclplcm8oc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBjaGVja2JveCBtb2RlLCBwcmV2ZW50IG5nLXNlbGVjdCBmcm9tIGNoYW5naW5nIHRoZSBmb3JtIGNvbnRyb2xcbiAgICAgIC8vIFJlc3RvcmUgdGhlIGN1cnJlbnQgdmFsdWUgdG8gcHJldmVudCBuZy1zZWxlY3QgaW50ZXJmZXJlbmNlXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICAgICAgdGhpcy5vcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY3VycmVudFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gdHJ1ZTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5tdWx0aXBsZSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYmluZFZhbHVlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgbGV0IGFsbFZhbHVlcztcbiAgICBpZiAoYmluZFZhbHVlKSB7XG4gICAgICAvLyBJZiBiaW5kVmFsdWUgaXMgY29uZmlndXJlZCwgZXh0cmFjdCBvbmx5IHRoZSBib3VuZCB2YWx1ZXNcbiAgICAgIGFsbFZhbHVlcyA9IHRoaXMuc2VsZWN0YWJsZXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bYmluZFZhbHVlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIGJpbmRWYWx1ZSwgc3RvcmUgZnVsbCBvYmplY3RzXG4gICAgICBhbGxWYWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RhYmxlc107XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoYWxsVmFsdWVzKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgXG4gICAgdGhpcy5jaGVja0Zvclplcm8oYWxsVmFsdWVzKTtcbiAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgRm9ybWx5IGludGVncmF0aW9uXG4gICAgaWYgKHRoaXMuZmllbGQgJiYgdGhpcy5maWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbGxWYWx1ZXMpO1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgdW5zZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmFtcz8ubXVsdGlwbGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBlbXB0eVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZW1wdHlWYWx1ZSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIFxuICAgIHRoaXMuY2hlY2tGb3JaZXJvKGVtcHR5VmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZW1wdHlWYWx1ZSk7XG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiBcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RhYmxlcy5sZW5ndGggJiZcbiAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQoaXRlbSkpO1xuICB9XG5cbiAgaXNTb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmIFxuICAgICAgICAgICBjdXJyZW50VmFsdWUubGVuZ3RoID4gMCAmJiBcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA8IHRoaXMuc2VsZWN0YWJsZXMubGVuZ3RoO1xuICB9XG4gIHRvZ2dsZUl0ZW1TZWxlY3Rpb24oaXRlbTogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICghdGhpcy5wYXJhbXM/Lm11bHRpcGxlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgbGV0IGl0ZW1JbmRleCA9IC0xO1xuICAgIGxldCBpdGVtVmFsdWUgPSBiaW5kVmFsdWUgPyBpdGVtW2JpbmRWYWx1ZV0gOiBpdGVtO1xuICAgIFxuICAgIGlmIChiaW5kVmFsdWUpIHtcbiAgICAgIC8vIFdoZW4gdXNpbmcgYmluZFZhbHVlLCBjdXJyZW50VmFsdWUgc2hvdWxkIGNvbnRhaW4gb25seSB0aGUgYm91bmQgdmFsdWVzXG4gICAgICBpdGVtSW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiBzZWxlY3RlZCA9PT0gaXRlbVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgdXNpbmcgYmluZFZhbHVlLCBjb21wYXJlIGZ1bGwgb2JqZWN0c1xuICAgICAgaXRlbUluZGV4ID0gY3VycmVudFZhbHVlLmZpbmRJbmRleCgoc2VsZWN0ZWQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHNlbGVjdGVkID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWQpID09PSBKU09OLnN0cmluZ2lmeShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQgPT09IGl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgbGV0IG5ld1ZhbHVlO1xuICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtXG4gICAgICBuZXdWYWx1ZSA9IFsuLi5jdXJyZW50VmFsdWVdO1xuICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0aGUgaXRlbVxuICAgICAgaWYgKGJpbmRWYWx1ZSkge1xuICAgICAgICAvLyBBZGQgb25seSB0aGUgYm91bmQgdmFsdWVcbiAgICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlLCBpdGVtVmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIHRoZSBmdWxsIG9iamVjdFxuICAgICAgICBuZXdWYWx1ZSA9IFsuLi5jdXJyZW50VmFsdWUsIGl0ZW1dO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgXG4gICAgdGhpcy5jaGVja0Zvclplcm8obmV3VmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvcmNlIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIFVJXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uZ1NlbGVjdCAmJiAhdGhpcy5uZ1NlbGVjdC5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5uZ1NlbGVjdC5vcGVuKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBpc09wdGlvblNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgaWYgKGJpbmRWYWx1ZSkge1xuICAgICAgLy8gV2hlbiB1c2luZyBiaW5kVmFsdWUsIGN1cnJlbnRWYWx1ZSBjb250YWlucyBvbmx5IHRoZSBib3VuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGl0ZW1bYmluZFZhbHVlXTtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWUuaW5jbHVkZXMoaXRlbVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgdXNpbmcgYmluZFZhbHVlLCBjb21wYXJlIGZ1bGwgb2JqZWN0c1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5zb21lKChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzZWxlY3RlZCkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3RlZCA9PT0gaXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yWmVybyhzZWxlY3RlZDogYW55LCBzdGF0ZT86IGJvb2xlYW4pIHtcbiAgICAvLyBVc2UgdGhlIHBhc3NlZCBzZWxlY3RlZCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIGNvbnN0IHZhbHVlVG9DaGVjayA9IHNlbGVjdGVkICE9PSB1bmRlZmluZWQgPyBzZWxlY3RlZCA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgXG4gICAgdGhpcy50b3BMYWJlbCA9IHZhbHVlVG9DaGVjaz8ubGVuZ3RoID09IDAgPyBmYWxzZSA6IHRydWU7XG4gICAgLy8gY29uc29sZS5sb2coXCJ0ZXN0XCIsIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU/Lmxlbmd0aClcbiAgICAvLyBjb25zb2xlLmxvZyhcInRlc3RcIiwgdGhpcy5vcGVuU3RhdGUpXG4gICAgLy8gY29uc29sZS5sb2coXCJwbGFjZWhvbGRlci0tLSBcIiwgdGhpcy5wbGFjZWhvbGRlckxhYmVsKVxuICAgIC8vIGNvbnNvbGUubG9nKFwicGFyYW1zLmxhYmVsLS0tIFwiLCB0aGlzLnBhcmFtcy5sYWJlbClcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZSB8fCB2YWx1ZVRvQ2hlY2s/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLnBsYWNlaG9sZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5sYWJlbDtcbiAgICB9XG4gIH1cbiAgbW91c2VIb3ZlcihpdGVtOiBTZWxlY3RTdWJJbnRlcmZhY2UsIGV2ZW50OiBhbnkgPSBudWxsLCB0b29sdGlwOiBNYXRUb29sdGlwKSB7ICAvLyBOZXcgbWV0aG9kIGZvciBtb3VzZWVudGVyIGV2ZW50XG4gICAgdGhpcy5ob3ZlckV2ZW50LmVtaXQoe1xuICAgICAgZXZlbnQsXG4gICAgICBpdGVtXG4gICAgfSk7XG4gICAgaWYgKHRvb2x0aXApIHtcbiAgICAgIHRvb2x0aXAuc2hvdygpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIHNlbGVjdEhvdmVyRXZlbnQge1xuICBldmVudDogYW55LFxuICBpdGVtOiBTZWxlY3RTdWJJbnRlcmZhY2Vcbn0iLCI8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWNvbnRhaW5lciB7e3Byb3BzPy5bJ2lucHV0Q29udGFpbmVyQ2xhc3MnXX19XCI+XG4gIEBpZighIXByb3BzPy5bJ2xhYmVsJ10pe1xuICA8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWxhYmVsLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYS1zZWxlY3QtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2Etc2VsZWN0LWxhYmVsXCI+XG4gICAgICAgIHt7cHJvcHM/LlsnbGFiZWwnXX19XG4gICAgICA8L3NwYW4+XG4gICAgICBAaWYoISFwcm9wcz8uWyd0b29sdGlwJ10pe1xuICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cInByb3BzPy5bJ3Rvb2x0aXAnXVwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcbiAgICAgICAgICBbc2l6ZV09XCJwcm9wcz8uWyd0b29sdGlwSWNvblNpemUnXSB8fCAnMjAnXCI+PC9zYS1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZighIXByb3BzPy5bJ2Rlc2NyaXB0aW9uJ10pIHtcbiAgICA8cCBjbGFzcz1cInNhLXNlbGVjdC1kZXNjcmlwdGlvblwiPlxuICAgICAge3twcm9wcz8uWydkZXNjcmlwdGlvbiddfX1cbiAgICA8L3A+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWZpZWxkLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgW3N0eWxlLnZpc2liaWxpdHldPVwiKHByb3BzPy5bJ3Nob3dUYWcnXSAhPT0gZmFsc2UgJiYgKG9wZW5TdGF0ZSB8fCB0b3BMYWJlbCkpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgY2xhc3M9XCJjbGlja2VkLWxhYmVsXCI+e3twYXJhbXMubGFiZWx9fVxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibmctc2VsZWN0LWZpZWxkIHt7b3BlblN0YXRlID8gJ2FjdGl2YXRlZCcgOiAnaWRsZSd9fSB7e2ZpZWxkLnByb3BzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnfX0ge3tmb3JtQ29udHJvbC52YWxpZCA/ICcnIDogJ2ludmFsaWQnfX1cIj5cbiAgICAgIDxkaXYgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiZHJvcC1idXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImxlZnQtaWNvbiBzdmctaWNvblwiIFtzdHlsZV09XCJzdmdTdHlsZVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuQ2xvc2UoIXRoaXMub3BlblN0YXRlKVwiIChibHVyKT1cIm9wZW5DbG9zZShmYWxzZSlcIlxuICAgICAgICAqbmdJZj1cIihwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAnbGVmdCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctc2VsZWN0IChjaGFuZ2UpPVwib25OZ1NlbGVjdENoYW5nZSgkZXZlbnQpXCIgKHJlbW92ZSk9XCJzaGlmdExhYmVsKCdyZW1vdmVkJylcIiAoY2xlYXIpPVwic2hpZnRMYWJlbCgnY2xlYXJlZCcpXCJcbiAgICAgIChzZWFyY2gpPVwib3BlbkNsb3NlKHRydWUpXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCIgKGJsdXIpPVwib3BlbkNsb3NlKGZhbHNlKVwiIFtpc09wZW5dPVwib3BlblN0YXRlXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlckxhYmVsXCIgW2JpbmRMYWJlbF09XCJwcm9wcz8uWydiaW5kTGFiZWwnXSB8fCAnbmFtZSdcIiBbYmluZFZhbHVlXT1cInByb3BzPy5bJ2JpbmRWYWx1ZSddIHx8IG51bGxcIiBbaXRlbXNdPVwic2VsZWN0YWJsZXNcIiBbbXVsdGlwbGVdPVwicGFyYW1zPy5tdWx0aXBsZVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbc3R5bGVdIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCIgW3NlYXJjaGFibGVdPVwiZmllbGQucHJvcHNbJ3NlYXJjaGFibGUnXVwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBjbGFzcz1cImZvcm0tbmctc2VsZWN0XCI+ICAgICAgXG4gICAgICA8IS0tIE11bHRpLWxhYmVsIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHNlbGVjdGVkIGl0ZW1zIGFzIGNoaXBzIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nLW11bHRpLWxhYmVsLXRtcCBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1jbGVhcj1cImNsZWFyXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgKGl0ZW1zID8gaXRlbXMuc2xpY2Uoc3RhcnRJbmQsc3RhcnRJbmQrbGFiZWxMaW1pdCk6IFtdKVwiPlxuICAgICAgICAgIDxzYS1jaGlwIChvbkNsaWNrRXZlbnQpPVwiICghZmllbGQucHJvcHMuZGlzYWJsZWQpID8gIGNsZWFyKGl0ZW0pIDogbnVsbFwiIFxuICAgICAgICAgICAgW2lkXT1cImdldEZ1bGxPYmplY3RGcm9tVmFsdWUoaXRlbSlbcGFyYW1zPy5iaW5kVmFsdWUgfHwgcHJvcHM/LlsnYmluZFZhbHVlJ10gfHwgJ2lkJ11cIlxuICAgICAgICAgICAgW2ljb25QYXRoXT1cInBhcmFtcy5pY29uUGF0aFwiIFxuICAgICAgICAgICAgW3RleHRdPVwiZ2V0RnVsbE9iamVjdEZyb21WYWx1ZShpdGVtKVtwYXJhbXM/LmJpbmRMYWJlbCB8fCBwcm9wcz8uWydiaW5kTGFiZWwnXSB8fCAnbmFtZSddXCIgXG4gICAgICAgICAgICBbdHlwZV09XCJwYXJhbXMudHlwZVwiXG4gICAgICAgICAgICBbc3RhdGVdPVwiZmllbGQucHJvcHMuZGlzYWJsZWQgPyAnbmV1dHJhbCcgOiBwYXJhbXMuc3RhdGVcIiBcbiAgICAgICAgICAgIFtmaWxsaW5nXT1cInBhcmFtcy5maWxsaW5nXCJcbiAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwicGFyYW1zLmljb25Qb3NpdGlvblwiPlxuICAgICAgICAgIDwvc2EtY2hpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNoaWZ0TGFiZWwoJ2NsaWNrZWQnKVwiIGNsYXNzPVwibmctdmFsdWUgb3ZlcmZsb3ctbGFiZWxcIlxuICAgICAgICAgICpuZ0lmPVwiaXRlbXMubGVuZ3RoID4gKHN0YXJ0SW5kK2xhYmVsTGltaXQpXCI+XG4gICAgICAgICAgPHNhLWNoaXAgdGV4dD1cIit7e2l0ZW1zLmxlbmd0aC0oc3RhcnRJbmQrbGFiZWxMaW1pdCl9fVwiIFxuICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInBhcmFtcy50eXBlIHx8ICdyZWd1bGFyJ1wiIFxuICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJwYXJhbXMuc3RhdGUgfHwgJ3ByaW1hcnknXCIgXG4gICAgICAgICAgICAgICAgICAgW2ZpbGxpbmddPVwicGFyYW1zLmZpbGxpbmcgfHwgJ2ZpbGxlZCdcIj5cbiAgICAgICAgICA8L3NhLWNoaXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IChjbGljayk9XCJzaGlmdExhYmVsKCdjbGVhcmVkJylcIiAqbmdJZj1cInN0YXJ0SW5kID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJuZy12YWx1ZSBvdmVyZmxvdy1sYWJlbFwiPlxuICAgICAgICAgIDxzYS1jaGlwIHRleHQ9XCIuLi5cIiBcbiAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJwYXJhbXMudHlwZSB8fCAncmVndWxhcidcIiBcbiAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwicGFyYW1zLnN0YXRlIHx8ICdkZWZhdWx0J1wiIFxuICAgICAgICAgICAgICAgICAgIFtmaWxsaW5nXT1cInBhcmFtcy5maWxsaW5nIHx8ICdmaWxsZWQnXCI+XG4gICAgICAgICAgPC9zYS1jaGlwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICBcbiAgICAgIDwhLS0gVW5pdmVyc2FsIG9wdGlvbiB0ZW1wbGF0ZSB3aXRoIHRvb2x0aXAgc3VwcG9ydCBmb3IgYW55IHNlbGVjdCB0eXBlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnY2hlY2tib3gtb3B0aW9uJzogcGFyYW1zPy5zaG93Q2hlY2tib3hlcywgJ3NpbmdsZS1vcHRpb24td2l0aC10b29sdGlwJzogIXBhcmFtcz8uc2hvd0NoZWNrYm94ZXN9XCI+XG4gICAgICAgICAgPCEtLSBDaGVja2JveCBmb3IgbXVsdGktc2VsZWN0IC0tPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInBhcmFtcz8uc2hvd0NoZWNrYm94ZXNcIiBcbiAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXG4gICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzT3B0aW9uU2VsZWN0ZWQoaXRlbSlcIiBcbiAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJ0b2dnbGVJdGVtU2VsZWN0aW9uKGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWNoZWNrYm94XCI+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBPcHRpb24gbGFiZWwgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb24tbGFiZWxcIj57eyBpdGVtW3Byb3BzPy5bJ2JpbmRMYWJlbCddIHx8ICduYW1lJ10gfX08L3NwYW4+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBUb29sdGlwIGljb24gLSBzaG93cyB3aGVuIGl0ZW0gaGFzIGRlc2NyaXB0aW9uL3Rvb2x0aXAgLS0+XG4gICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtLmRlc2NyaXB0aW9uIHx8IGl0ZW0udG9vbHRpcFwiIFxuICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidpbmZvQ2lyY2xlT3V0bGluZWQnXCIgXG4gICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJzE2J1wiIFxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLXRvb2x0aXAtaWNvbiBkLWZsZXhcIlxuICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIml0ZW0uZGVzY3JpcHRpb24gfHwgaXRlbS50b29sdGlwIHx8ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIShpdGVtLmRlc2NyaXB0aW9uIHx8IGl0ZW0udG9vbHRpcClcIj5cbiAgICAgICAgICA8L3NhLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPCEtLSBTaW1wbGUgaGVhZGVyIHRlbXBsYXRlIGZvciBTZWxlY3QgQWxsIC8gVW5zZWxlY3QgQWxsIHdoZW4gaW4gY2hlY2tib3ggbW9kZSAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZy1oZWFkZXItdG1wICpuZ0lmPVwicGFyYW1zPy5zaG93Q2hlY2tib3hlcyAmJiBwYXJhbXM/Lm11bHRpcGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWFsbC1sYWJlbFwiIChjbGljayk9XCJzZWxlY3RBbGwoKVwiPlNlbGVjdCBhbGw8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bnNlbGVjdC1hbGwtbGFiZWxcIiAoY2xpY2spPVwidW5zZWxlY3RBbGwoKVwiPlVuc2VsZWN0IGFsbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgbmctYXJyb3ctdG1wPlxuICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCInZG93bkNoZXZyb25PdXRsaW5lZCdcIiBjbGFzcz1cImQtZmxleCBjdXN0b20tZHJvcGRvd24tYXJyb3dcIiBbc2l6ZV09XCInMTgnXCI+PC9zYS1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXNlbGVjdD5cbiAgICA8ZGl2ICpuZ0lmPVwiKHBhcmFtcy5kcm9wSWNvblBvc2l0aW9uID09ICdyaWdodCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiIGNsYXNzPVwicmlnaHQtaWNvblwiPlxuICAgICAgPHNhLWljb24gW2ljb25dPVwiJ2Rvd25DaGV2cm9uT3V0bGluZWQnXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJkLWZsZXhcIiBbc2l6ZV09XCInMTgnXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCJcbiAgICAgICAgKGJsdXIpPVwib3BlbkNsb3NlKGZhbHNlKVwiID48L3NhLWljb24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8ZGl2IHJvbGU9XCJidXR0b25cIiB0aXRsZT1cImRyb3AtYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyaWdodC1pY29uIHN2Zy1pY29uXCIgW3N0eWxlXT1cInN2Z1N0eWxlXCJcbiAgICAgIChjbGljayk9XCJvcGVuQ2xvc2UodHJ1ZSlcIiAoYmx1cik9XCJvcGVuQ2xvc2UoZmFsc2UpXCJcbiAgICAgICpuZ0lmPVwiKHBhcmFtcy5kcm9wSWNvblBvc2l0aW9uID09ICdyaWdodCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiPlxuICAgIDwvZGl2PiAtLT5cblxuIDxkaXYgY2xhc3M9XCJmYWxsYmFjay1hcnJvd1wiICpuZ0lmPVwiIW9wZW5TdGF0ZVwiPlxuICA8c2EtaWNvbiBbaWNvbl09XCInZG93bkNoZXZyb25PdXRsaW5lZCdcIiBjbGFzcz1cImQtZmxleFwiIFtzaXplXT1cIicxOCdcIj48L3NhLWljb24+XG4gPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYoIWZvcm1Db250cm9sLnZhbGlkKXtcbiAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UtY29udGFpbmVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSBbZmllbGRdPVwiZmllbGRcIj48L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwic3VwcG9ydC1sYWJlbFwiPnt7cGFyYW1zLnN1cHBvcnRUZXh0fX08L2Rpdj5cbjwvZGl2PiJdfQ==
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9mb3JtLXNlbGVjdC9mb3JtLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0tc2VsZWN0L2Zvcm0tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFzQnpFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUEwQjtJQUlqRSxvREFBb0Q7SUFDcEQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMs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QUMsV0FBVyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQXdCLEVBQUUsUUFBYSxJQUFJLEVBQUUsT0FBbUI7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQTdUVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0SkFvQm5CLGlCQUFpQix1RUNuRDlCLGt4TkE4SE0sdWtORDlHRixtQkFBbUIseVRBQ25CLFlBQVkseVFBRVosY0FBYyxzcUNBQ2QsY0FBYywyTkFDZCxJQUFJLDZGQUNKLEtBQUssa0hBQ0wsZ0JBQWdCLDZUQUNoQixhQUFhLG9NQUNiLFlBQVk7OzJGQU1ILG1CQUFtQjtrQkFuQi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZ0JBQWdCO3FCQUNqQjsrRUF1QnFCLFVBQVU7c0JBQS9CLE1BQU07dUJBQUMsWUFBWTtnQkFDVSxRQUFRO3NCQUFyQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE5nU2VsZWN0Q29tcG9uZW50LCBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwLCBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBTZWxlY3RJbnRlcmZhY2UsIFNlbGVjdFN1YkludGVyZmFjZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ1NlbGVjdE1vZHVsZSxcbiAgICBDaGlwc0NvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybS1zZWxlY3QuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IHtcbiAgc2VsZWN0YWJsZXM6IGFueTtcbiAgcGFyYW1zOiBhbnk7XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgZnVsbCBvYmplY3QgZnJvbSBib3VuZCB2YWx1ZVxuICBnZXRGdWxsT2JqZWN0RnJvbVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGJpbmRWYWx1ZSA9IHRoaXMucGFyYW1zPy5iaW5kVmFsdWUgfHwgdGhpcy5maWVsZC5wcm9wcz8uWydiaW5kVmFsdWUnXTtcbiAgICBpZiAoIWJpbmRWYWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIFxuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbVtiaW5kVmFsdWVdID09PSB2YWx1ZSkgfHwgdmFsdWU7XG4gIH1cblxuICBzdmdTdHlsZSA9IHt9O1xuICBvcGVuU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9wTGFiZWw6IGJvb2xlYW47XG4gIHN0YXJ0SW5kOiBudW1iZXIgPSAwO1xuICBsYWJlbExpbWl0OiBudW1iZXIgPSAyO1xuXG4gIHBsYWNlaG9sZGVyTGFiZWw6IHN0cmluZztcbiAgQE91dHB1dCgnaG92ZXJFdmVudCcpIGhvdmVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxzZWxlY3RIb3ZlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZChOZ1NlbGVjdENvbXBvbmVudCkgbmdTZWxlY3QhOiBOZ1NlbGVjdENvbXBvbmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGFibGVzID0gdGhpcy5maWVsZC5wcm9wcy5vcHRpb25zOyAgICBcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZmllbGQucHJvcHNbJ3BhcmFtcyddIHx8IHt9O1xuICAgIFxuICAgIC8vIEZhbGxiYWNrIHRvIGZpZWxkLnByb3BzIGlmIHBhcmFtcyBpcyBlbXB0eVxuICAgIGlmICghdGhpcy5wYXJhbXMgfHwgT2JqZWN0LmtleXModGhpcy5wYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZpZWxkLnByb3BzO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5sYWJlbCB8fCB0aGlzLmZpZWxkLnByb3BzLnBsYWNlaG9sZGVyO1xuICAgIHRoaXMuc3ZnU3R5bGUgPSB7XG4gICAgICAnLXdlYmtpdC1tYXNrLWltYWdlJzogYHVybCgke3RoaXMucGFyYW1zLmRyb3BJY29ufSl9KWAsXG4gICAgICAnbWFzay1pbWFnZSc6IGB1cmwoJHt0aGlzLnBhcmFtcy5kcm9wSWNvbn0pYCxcbiAgICB9XG4gICAgXG4gICAgLy8gU2V0IENTUyBjdXN0b20gcHJvcGVydHkgZm9yIGNoaXAgYmFja2dyb3VuZCBiYXNlZCBvbiBzdGF0ZVxuICAgIHRoaXMuc2V0Q2hpcEJhY2tncm91bmRDb2xvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGlwQmFja2dyb3VuZENvbG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5wYXJhbXM/LnN0YXRlO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tcHJpbWFyeS01MCknOyAvLyBkZWZhdWx0IGZhbGxiYWNrXG4gICAgXG4gICAgLy8gTWFwIGNoaXAgc3RhdGVzIHRvIGFwcHJvcHJpYXRlIGJhY2tncm91bmQgY29sb3JzXG4gICAgc3dpdGNoKHN0YXRlKSB7XG4gICAgICBjYXNlICduZXV0cmFsJzpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLWdyZXktNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXN1Y2Nlc3MtNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGJhY2tncm91bmRDb2xvciA9ICd2YXIoLS1lcnJvci01MCknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0td2FybmluZy01MCknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ByaW1hcnknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXByaW1hcnktNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZy1zZWxlY3QtY2hpcC1iZycsIGJhY2tncm91bmRDb2xvcik7XG4gICAgfVxuICB9XG4gIG9wZW5DbG9zZShzdGF0ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmZpZWxkLnByb3BzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5vcGVuU3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlckxhYmVsID0gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLmxhYmVsO1xuICAgIH1cbiAgfVxuICBzaGlmdExhYmVsKGFjdGlvbjogc3RyaW5nKSB7XG4gIGlmIChhY3Rpb24gPT0gJ2NsaWNrZWQnKSB0aGlzLnN0YXJ0SW5kKys7XG4gIGlmIChhY3Rpb24gPT0gJ2NsZWFyZWQnKSB0aGlzLnN0YXJ0SW5kID0gMDtcbiAgaWYgKGFjdGlvbiA9PSAncmVtb3ZlZCcgJiYgdGhpcy5zdGFydEluZCA+IDApIHRoaXMuc3RhcnRJbmQtLTtcbiAgdGhpcy50b3BMYWJlbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU/Lmxlbmd0aCA+IDA7IFxuICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLm9wZW5TdGF0ZSB8fCB0aGlzLmZvcm1Db250cm9sLnZhbHVlPy5sZW5ndGggPiAwIFxuICAgID8gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXIgXG4gICAgOiB0aGlzLnBhcmFtcy5sYWJlbDtcbn1cblxuICB0b2dnbGVPcHRpb24oaXRlbTogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICghdGhpcy5wYXJhbXM/Lm11bHRpcGxlKSB7XG4gICAgICAvLyBTaW5nbGUgc2VsZWN0IG1vZGVcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbSk7XG4gICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlOyBcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNdWx0aS1zZWxlY3QgbW9kZVxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wYXJhbXM/LmJpbmRWYWx1ZSB8fCB0aGlzLmZpZWxkLnByb3BzPy5bJ2JpbmRWYWx1ZSddO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGJpbmRWYWx1ZSA/IGl0ZW1bYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgXG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gYmluZFZhbHVlID8gc2VsZWN0ZWRbYmluZFZhbHVlXSA6IHNlbGVjdGVkO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWUgPT09IGl0ZW1WYWx1ZTtcbiAgICB9KTtcblxuICAgIGxldCBuZXdWYWx1ZTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlXTtcbiAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gWy4uLmN1cnJlbnRWYWx1ZSwgaXRlbV07XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBcbiAgICB0aGlzLmNoZWNrRm9yWmVybyhuZXdWYWx1ZSk7XG4gICAgXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuXG4gIG9uTmdTZWxlY3RDaGFuZ2Uoc2VsZWN0ZWQ6IGFueSk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIG5nLXNlbGVjdCBjaGFuZ2VzIHdoZW4gTk9UIGluIGNoZWNrYm94IG1vZGVcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5zaG93Q2hlY2tib3hlcykge1xuICAgICAgdGhpcy5jaGVja0Zvclplcm8oc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBjaGVja2JveCBtb2RlLCBwcmV2ZW50IG5nLXNlbGVjdCBmcm9tIGNoYW5naW5nIHRoZSBmb3JtIGNvbnRyb2xcbiAgICAgIC8vIFJlc3RvcmUgdGhlIGN1cnJlbnQgdmFsdWUgdG8gcHJldmVudCBuZy1zZWxlY3QgaW50ZXJmZXJlbmNlXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICAgICAgdGhpcy5vcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY3VycmVudFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gdHJ1ZTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5tdWx0aXBsZSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYmluZFZhbHVlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgbGV0IGFsbFZhbHVlcztcbiAgICBpZiAoYmluZFZhbHVlKSB7XG4gICAgICAvLyBJZiBiaW5kVmFsdWUgaXMgY29uZmlndXJlZCwgZXh0cmFjdCBvbmx5IHRoZSBib3VuZCB2YWx1ZXNcbiAgICAgIGFsbFZhbHVlcyA9IHRoaXMuc2VsZWN0YWJsZXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bYmluZFZhbHVlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIGJpbmRWYWx1ZSwgc3RvcmUgZnVsbCBvYmplY3RzXG4gICAgICBhbGxWYWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RhYmxlc107XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoYWxsVmFsdWVzKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgXG4gICAgdGhpcy5jaGVja0Zvclplcm8oYWxsVmFsdWVzKTtcbiAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgRm9ybWx5IGludGVncmF0aW9uXG4gICAgaWYgKHRoaXMuZmllbGQgJiYgdGhpcy5maWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbGxWYWx1ZXMpO1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgdW5zZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmFtcz8ubXVsdGlwbGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBlbXB0eVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZW1wdHlWYWx1ZSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIFxuICAgIHRoaXMuY2hlY2tGb3JaZXJvKGVtcHR5VmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZW1wdHlWYWx1ZSk7XG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiBcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RhYmxlcy5sZW5ndGggJiZcbiAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQoaXRlbSkpO1xuICB9XG5cbiAgaXNTb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmIFxuICAgICAgICAgICBjdXJyZW50VmFsdWUubGVuZ3RoID4gMCAmJiBcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA8IHRoaXMuc2VsZWN0YWJsZXMubGVuZ3RoO1xuICB9XG4gIHRvZ2dsZUl0ZW1TZWxlY3Rpb24oaXRlbTogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICghdGhpcy5wYXJhbXM/Lm11bHRpcGxlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgbGV0IGl0ZW1JbmRleCA9IC0xO1xuICAgIGxldCBpdGVtVmFsdWUgPSBiaW5kVmFsdWUgPyBpdGVtW2JpbmRWYWx1ZV0gOiBpdGVtO1xuICAgIFxuICAgIGlmIChiaW5kVmFsdWUpIHtcbiAgICAgIC8vIFdoZW4gdXNpbmcgYmluZFZhbHVlLCBjdXJyZW50VmFsdWUgc2hvdWxkIGNvbnRhaW4gb25seSB0aGUgYm91bmQgdmFsdWVzXG4gICAgICBpdGVtSW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiBzZWxlY3RlZCA9PT0gaXRlbVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgdXNpbmcgYmluZFZhbHVlLCBjb21wYXJlIGZ1bGwgb2JqZWN0c1xuICAgICAgaXRlbUluZGV4ID0gY3VycmVudFZhbHVlLmZpbmRJbmRleCgoc2VsZWN0ZWQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHNlbGVjdGVkID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWQpID09PSBKU09OLnN0cmluZ2lmeShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQgPT09IGl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgbGV0IG5ld1ZhbHVlO1xuICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtXG4gICAgICBuZXdWYWx1ZSA9IFsuLi5jdXJyZW50VmFsdWVdO1xuICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0aGUgaXRlbVxuICAgICAgaWYgKGJpbmRWYWx1ZSkge1xuICAgICAgICAvLyBBZGQgb25seSB0aGUgYm91bmQgdmFsdWVcbiAgICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlLCBpdGVtVmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIHRoZSBmdWxsIG9iamVjdFxuICAgICAgICBuZXdWYWx1ZSA9IFsuLi5jdXJyZW50VmFsdWUsIGl0ZW1dO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgXG4gICAgdGhpcy5jaGVja0Zvclplcm8obmV3VmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvcmNlIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIFVJXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uZ1NlbGVjdCAmJiAhdGhpcy5uZ1NlbGVjdC5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5uZ1NlbGVjdC5vcGVuKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBpc09wdGlvblNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgaWYgKGJpbmRWYWx1ZSkge1xuICAgICAgLy8gV2hlbiB1c2luZyBiaW5kVmFsdWUsIGN1cnJlbnRWYWx1ZSBjb250YWlucyBvbmx5IHRoZSBib3VuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGl0ZW1bYmluZFZhbHVlXTtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWUuaW5jbHVkZXMoaXRlbVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgdXNpbmcgYmluZFZhbHVlLCBjb21wYXJlIGZ1bGwgb2JqZWN0c1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5zb21lKChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzZWxlY3RlZCkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3RlZCA9PT0gaXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yWmVybyhzZWxlY3RlZDogYW55LCBzdGF0ZT86IGJvb2xlYW4pIHtcbiAgICAvLyBVc2UgdGhlIHBhc3NlZCBzZWxlY3RlZCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIGNvbnN0IHZhbHVlVG9DaGVjayA9IHNlbGVjdGVkICE9PSB1bmRlZmluZWQgPyBzZWxlY3RlZCA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgXG4gICAgdGhpcy50b3BMYWJlbCA9IHZhbHVlVG9DaGVjaz8ubGVuZ3RoID09IDAgPyBmYWxzZSA6IHRydWU7XG4gICAgLy8gY29uc29sZS5sb2coXCJ0ZXN0XCIsIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU/Lmxlbmd0aClcbiAgICAvLyBjb25zb2xlLmxvZyhcInRlc3RcIiwgdGhpcy5vcGVuU3RhdGUpXG4gICAgLy8gY29uc29sZS5sb2coXCJwbGFjZWhvbGRlci0tLSBcIiwgdGhpcy5wbGFjZWhvbGRlckxhYmVsKVxuICAgIC8vIGNvbnNvbGUubG9nKFwicGFyYW1zLmxhYmVsLS0tIFwiLCB0aGlzLnBhcmFtcy5sYWJlbClcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZSB8fCB2YWx1ZVRvQ2hlY2s/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLnBsYWNlaG9sZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5sYWJlbDtcbiAgICB9XG4gIH1cbiAgbW91c2VIb3ZlcihpdGVtOiBTZWxlY3RTdWJJbnRlcmZhY2UsIGV2ZW50OiBhbnkgPSBudWxsLCB0b29sdGlwOiBNYXRUb29sdGlwKSB7ICAvLyBOZXcgbWV0aG9kIGZvciBtb3VzZWVudGVyIGV2ZW50XG4gICAgdGhpcy5ob3ZlckV2ZW50LmVtaXQoe1xuICAgICAgZXZlbnQsXG4gICAgICBpdGVtXG4gICAgfSk7XG4gICAgaWYgKHRvb2x0aXApIHtcbiAgICAgIHRvb2x0aXAuc2hvdygpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIHNlbGVjdEhvdmVyRXZlbnQge1xuICBldmVudDogYW55LFxuICBpdGVtOiBTZWxlY3RTdWJJbnRlcmZhY2Vcbn0iLCI8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWNvbnRhaW5lciB7e3Byb3BzPy5bJ2lucHV0Q29udGFpbmVyQ2xhc3MnXX19XCI+XG4gIEBpZighIXByb3BzPy5bJ2xhYmVsJ10pe1xuICA8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWxhYmVsLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYS1zZWxlY3QtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2Etc2VsZWN0LWxhYmVsXCI+XG4gICAgICAgIHt7cHJvcHM/LlsnbGFiZWwnXX19XG4gICAgICA8L3NwYW4+XG4gICAgICBAaWYoISFwcm9wcz8uWyd0b29sdGlwJ10pe1xuICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cInByb3BzPy5bJ3Rvb2x0aXAnXVwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcbiAgICAgICAgICBbc2l6ZV09XCJwcm9wcz8uWyd0b29sdGlwSWNvblNpemUnXSB8fCAnMjAnXCI+PC9zYS1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZighIXByb3BzPy5bJ2Rlc2NyaXB0aW9uJ10pIHtcbiAgICA8cCBjbGFzcz1cInNhLXNlbGVjdC1kZXNjcmlwdGlvblwiPlxuICAgICAge3twcm9wcz8uWydkZXNjcmlwdGlvbiddfX1cbiAgICA8L3A+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWZpZWxkLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgW3N0eWxlLnZpc2liaWxpdHldPVwiKHByb3BzPy5bJ3Nob3dUYWcnXSAhPT0gZmFsc2UgJiYgKG9wZW5TdGF0ZSB8fCB0b3BMYWJlbCkpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgY2xhc3M9XCJjbGlja2VkLWxhYmVsXCI+e3twYXJhbXMubGFiZWx9fVxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibmctc2VsZWN0LWZpZWxkIHt7b3BlblN0YXRlID8gJ2FjdGl2YXRlZCcgOiAnaWRsZSd9fSB7e2ZpZWxkLnByb3BzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnfX0ge3tmb3JtQ29udHJvbC52YWxpZCA/ICcnIDogJ2ludmFsaWQnfX1cIj5cbiAgICAgIDxkaXYgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiZHJvcC1idXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImxlZnQtaWNvbiBzdmctaWNvblwiIFtzdHlsZV09XCJzdmdTdHlsZVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuQ2xvc2UoIXRoaXMub3BlblN0YXRlKVwiIChibHVyKT1cIm9wZW5DbG9zZShmYWxzZSlcIlxuICAgICAgICAqbmdJZj1cIihwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAnbGVmdCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctc2VsZWN0IChjaGFuZ2UpPVwib25OZ1NlbGVjdENoYW5nZSgkZXZlbnQpXCIgKHJlbW92ZSk9XCJzaGlmdExhYmVsKCdyZW1vdmVkJylcIiAoY2xlYXIpPVwic2hpZnRMYWJlbCgnY2xlYXJlZCcpXCJcbiAgICAgIChzZWFyY2gpPVwib3BlbkNsb3NlKHRydWUpXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCIgKGJsdXIpPVwib3BlbkNsb3NlKGZhbHNlKVwiIFtpc09wZW5dPVwib3BlblN0YXRlXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlckxhYmVsXCIgW2JpbmRMYWJlbF09XCJwcm9wcz8uWydiaW5kTGFiZWwnXSB8fCAnbmFtZSdcIiBbYmluZFZhbHVlXT1cInByb3BzPy5bJ2JpbmRWYWx1ZSddIHx8IG51bGxcIiBbaXRlbXNdPVwic2VsZWN0YWJsZXNcIiBbbXVsdGlwbGVdPVwicGFyYW1zPy5tdWx0aXBsZVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbc3R5bGVdIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCIgW3NlYXJjaGFibGVdPVwiZmllbGQucHJvcHNbJ3NlYXJjaGFibGUnXVwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBbY2xvc2VPblNlbGVjdF09XCIhcGFyYW1zPy5zaG93Q2hlY2tib3hlc1wiIGNsYXNzPVwiZm9ybS1uZy1zZWxlY3RcIj4gICAgICBcbiAgICAgIDwhLS0gTXVsdGktbGFiZWwgdGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgc2VsZWN0ZWQgaXRlbXMgYXMgY2hpcHMgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgbmctbXVsdGktbGFiZWwtdG1wIGxldC1pdGVtcz1cIml0ZW1zXCIgbGV0LWNsZWFyPVwiY2xlYXJcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiAoaXRlbXMgPyBpdGVtcy5zbGljZShzdGFydEluZCxzdGFydEluZCtsYWJlbExpbWl0KTogW10pXCI+XG4gICAgICAgICAgPHNhLWNoaXAgKG9uQ2xpY2tFdmVudCk9XCIgKCFmaWVsZC5wcm9wcy5kaXNhYmxlZCkgPyAgY2xlYXIoaXRlbSkgOiBudWxsXCIgXG4gICAgICAgICAgICBbaWRdPVwiZ2V0RnVsbE9iamVjdEZyb21WYWx1ZShpdGVtKVtwYXJhbXM/LmJpbmRWYWx1ZSB8fCBwcm9wcz8uWydiaW5kVmFsdWUnXSB8fCAnaWQnXVwiXG4gICAgICAgICAgICBbaWNvblBhdGhdPVwicGFyYW1zLmljb25QYXRoXCIgXG4gICAgICAgICAgICBbdGV4dF09XCJnZXRGdWxsT2JqZWN0RnJvbVZhbHVlKGl0ZW0pW3BhcmFtcz8uYmluZExhYmVsIHx8IHByb3BzPy5bJ2JpbmRMYWJlbCddIHx8ICduYW1lJ11cIiBcbiAgICAgICAgICAgIFt0eXBlXT1cInBhcmFtcy50eXBlXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCA/ICduZXV0cmFsJyA6IHBhcmFtcy5zdGF0ZVwiIFxuICAgICAgICAgICAgW2ZpbGxpbmddPVwicGFyYW1zLmZpbGxpbmdcIlxuICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCJwYXJhbXMuaWNvblBvc2l0aW9uXCI+XG4gICAgICAgICAgPC9zYS1jaGlwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwic2hpZnRMYWJlbCgnY2xpY2tlZCcpXCIgY2xhc3M9XCJuZy12YWx1ZSBvdmVyZmxvdy1sYWJlbFwiXG4gICAgICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiAoc3RhcnRJbmQrbGFiZWxMaW1pdClcIj5cbiAgICAgICAgICA8c2EtY2hpcCB0ZXh0PVwiK3t7aXRlbXMubGVuZ3RoLShzdGFydEluZCtsYWJlbExpbWl0KX19XCIgXG4gICAgICAgICAgICAgICAgICAgW3R5cGVdPVwicGFyYW1zLnR5cGUgfHwgJ3JlZ3VsYXInXCIgXG4gICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cInBhcmFtcy5zdGF0ZSB8fCAncHJpbWFyeSdcIiBcbiAgICAgICAgICAgICAgICAgICBbZmlsbGluZ109XCJwYXJhbXMuZmlsbGluZyB8fCAnZmlsbGVkJ1wiPlxuICAgICAgICAgIDwvc2EtY2hpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNoaWZ0TGFiZWwoJ2NsZWFyZWQnKVwiICpuZ0lmPVwic3RhcnRJbmQgPiAwXCJcbiAgICAgICAgICBjbGFzcz1cIm5nLXZhbHVlIG92ZXJmbG93LWxhYmVsXCI+XG4gICAgICAgICAgPHNhLWNoaXAgdGV4dD1cIi4uLlwiIFxuICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInBhcmFtcy50eXBlIHx8ICdyZWd1bGFyJ1wiIFxuICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJwYXJhbXMuc3RhdGUgfHwgJ2RlZmF1bHQnXCIgXG4gICAgICAgICAgICAgICAgICAgW2ZpbGxpbmddPVwicGFyYW1zLmZpbGxpbmcgfHwgJ2ZpbGxlZCdcIj5cbiAgICAgICAgICA8L3NhLWNoaXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPCEtLSBVbml2ZXJzYWwgb3B0aW9uIHRlbXBsYXRlIHdpdGggdG9vbHRpcCBzdXBwb3J0IGZvciBhbnkgc2VsZWN0IHR5cGUgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXRlbSQ9XCJpdGVtJFwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydjaGVja2JveC1vcHRpb24nOiBwYXJhbXM/LnNob3dDaGVja2JveGVzLCAnc2luZ2xlLW9wdGlvbi13aXRoLXRvb2x0aXAnOiAhcGFyYW1zPy5zaG93Q2hlY2tib3hlc31cIj5cbiAgICAgICAgICA8IS0tIENoZWNrYm94IGZvciBtdWx0aS1zZWxlY3QgLS0+XG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwicGFyYW1zPy5zaG93Q2hlY2tib3hlc1wiIFxuICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcbiAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNPcHRpb25TZWxlY3RlZChpdGVtKVwiIFxuICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInRvZ2dsZUl0ZW1TZWxlY3Rpb24oaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24tY2hlY2tib3hcIj5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE9wdGlvbiBsYWJlbCAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1sYWJlbFwiPnt7IGl0ZW1bcHJvcHM/LlsnYmluZExhYmVsJ10gfHwgJ25hbWUnXSB9fTwvc3Bhbj5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIFRvb2x0aXAgaWNvbiAtIHNob3dzIHdoZW4gaXRlbSBoYXMgZGVzY3JpcHRpb24vdG9vbHRpcCAtLT5cbiAgICAgICAgICA8c2EtaWNvbiAqbmdJZj1cIml0ZW0uZGVzY3JpcHRpb24gfHwgaXRlbS50b29sdGlwXCIgXG4gICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2luZm9DaXJjbGVPdXRsaW5lZCdcIiBcbiAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInMTYnXCIgXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24tdG9vbHRpcC1pY29uIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXRlbS5kZXNjcmlwdGlvbiB8fCBpdGVtLnRvb2x0aXAgfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhKGl0ZW0uZGVzY3JpcHRpb24gfHwgaXRlbS50b29sdGlwKVwiPlxuICAgICAgICAgIDwvc2EtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgXG4gICAgICA8IS0tIFNpbXBsZSBoZWFkZXIgdGVtcGxhdGUgZm9yIFNlbGVjdCBBbGwgLyBVbnNlbGVjdCBBbGwgd2hlbiBpbiBjaGVja2JveCBtb2RlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nLWhlYWRlci10bXAgKm5nSWY9XCJwYXJhbXM/LnNob3dDaGVja2JveGVzICYmIHBhcmFtcz8ubXVsdGlwbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1hbGwtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QtYWxsLWxhYmVsXCIgKGNsaWNrKT1cInNlbGVjdEFsbCgpXCI+U2VsZWN0IGFsbDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVuc2VsZWN0LWFsbC1sYWJlbFwiIChjbGljayk9XCJ1bnNlbGVjdEFsbCgpXCI+VW5zZWxlY3QgYWxsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZy1hcnJvdy10bXA+XG4gICAgICAgIDxzYS1pY29uIFtpY29uXT1cIidkb3duQ2hldnJvbk91dGxpbmVkJ1wiIGNsYXNzPVwiZC1mbGV4IGN1c3RvbS1kcm9wZG93bi1hcnJvd1wiIFtzaXplXT1cIicxOCdcIj48L3NhLWljb24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctc2VsZWN0PlxuICAgIDxkaXYgKm5nSWY9XCIocGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ3JpZ2h0JyB8fCBwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAnYm90aCcpXCIgY2xhc3M9XCJyaWdodC1pY29uXCI+XG4gICAgICA8c2EtaWNvbiBbaWNvbl09XCInZG93bkNoZXZyb25PdXRsaW5lZCdcIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImQtZmxleFwiIFtzaXplXT1cIicxOCdcIiAoY2xpY2spPVwib3BlbkNsb3NlKCF0aGlzLm9wZW5TdGF0ZSlcIlxuICAgICAgICAoYmx1cik9XCJvcGVuQ2xvc2UoZmFsc2UpXCIgPjwvc2EtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiZHJvcC1idXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJpZ2h0LWljb24gc3ZnLWljb25cIiBbc3R5bGVdPVwic3ZnU3R5bGVcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5DbG9zZSh0cnVlKVwiIChibHVyKT1cIm9wZW5DbG9zZShmYWxzZSlcIlxuICAgICAgKm5nSWY9XCIocGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ3JpZ2h0JyB8fCBwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAnYm90aCcpXCI+XG4gICAgPC9kaXY+IC0tPlxuXG4gPGRpdiBjbGFzcz1cImZhbGxiYWNrLWFycm93XCIgKm5nSWY9XCIhb3BlblN0YXRlXCI+XG4gIDxzYS1pY29uIFtpY29uXT1cIidkb3duQ2hldnJvbk91dGxpbmVkJ1wiIGNsYXNzPVwiZC1mbGV4XCIgW3NpemVdPVwiJzE4J1wiPjwvc2EtaWNvbj5cbiA8L2Rpdj5cbiAgPC9kaXY+XG4gIEBpZighZm9ybUNvbnRyb2wudmFsaWQpe1xuICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZS1jb250YWluZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgIDxmb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlIFtmaWVsZF09XCJmaWVsZFwiPjwvZm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZT5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJzdXBwb3J0LWxhYmVsXCI+e3twYXJhbXMuc3VwcG9ydFRleHR9fTwvZGl2PlxuPC9kaXY+Il19