tnx-shared 5.0.73 → 5.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/bundles/tnx-shared.umd.js +817 -650
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-form-base.d.ts +2 -2
  6. package/classes/base/data-form-base.d.ts.map +1 -1
  7. package/classes/base/data-list-base.d.ts +3 -1
  8. package/classes/base/data-list-base.d.ts.map +1 -1
  9. package/classes/constants.d.ts +4 -0
  10. package/classes/constants.d.ts.map +1 -1
  11. package/classes/form-schema.d.ts +38 -4
  12. package/classes/form-schema.d.ts.map +1 -1
  13. package/components/autocomplete-picker/autocomplete-picker.component.d.ts +1 -0
  14. package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
  15. package/components/common-app-component/common-app-component.d.ts +4 -1
  16. package/components/common-app-component/common-app-component.d.ts.map +1 -1
  17. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  18. package/components/crud/crud-list/crud-list.component.d.ts +6 -1
  19. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  20. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
  21. package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
  22. package/components/file-explorer/file-manager/file-manager.component.d.ts +0 -2
  23. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  24. package/components/file-explorer/models/file-settings.d.ts +46 -0
  25. package/components/file-explorer/models/file-settings.d.ts.map +1 -0
  26. package/components/file-explorer/services/download-link.service.d.ts +0 -1
  27. package/components/file-explorer/services/download-link.service.d.ts.map +1 -1
  28. package/components/file-explorer/services/file-explorer.service.d.ts +0 -2
  29. package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
  30. package/components/file-explorer/services/file-object.service.d.ts +0 -2
  31. package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
  32. package/components/file-upload/file-upload.component.d.ts +0 -3
  33. package/components/file-upload/file-upload.component.d.ts.map +1 -1
  34. package/components/mask/mask.component.d.ts +2 -0
  35. package/components/mask/mask.component.d.ts.map +1 -1
  36. package/components/service-file-upload/service-file-upload.component.d.ts +0 -3
  37. package/components/service-file-upload/service-file-upload.component.d.ts.map +1 -1
  38. package/configs/component-context.constant.d.ts +1 -0
  39. package/configs/component-context.constant.d.ts.map +1 -1
  40. package/esm2015/classes/base/data-form-base.js +5 -5
  41. package/esm2015/classes/base/data-list-base.js +48 -23
  42. package/esm2015/classes/constants.js +6 -1
  43. package/esm2015/classes/form-schema.js +34 -3
  44. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +72 -16
  45. package/esm2015/components/common-app-component/app.menu.component.js +2 -2
  46. package/esm2015/components/common-app-component/common-app-component.js +26 -3
  47. package/esm2015/components/crud/crud-form/crud-form.component.js +9 -2
  48. package/esm2015/components/crud/crud-list/crud-list.component.js +71 -6
  49. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +29 -3
  50. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +29 -3
  51. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +12 -151
  52. package/esm2015/components/file-explorer/models/file-settings.js +60 -0
  53. package/esm2015/components/file-explorer/services/download-link.service.js +1 -4
  54. package/esm2015/components/file-explorer/services/file-explorer.service.js +8 -22
  55. package/esm2015/components/file-explorer/services/file-object.service.js +1 -18
  56. package/esm2015/components/file-upload/file-upload.component.js +2 -34
  57. package/esm2015/components/mask/mask.component.js +8 -4
  58. package/esm2015/components/service-file-upload/service-file-upload.component.js +2 -32
  59. package/esm2015/components/workflow/services/entity-workflow-history.service.js +3 -3
  60. package/esm2015/components/workflow/services/entity-workflow-setting.service.js +4 -4
  61. package/esm2015/configs/component-context.constant.js +3 -2
  62. package/esm2015/models/grid-info.js +1 -1
  63. package/esm2015/pipes/tn-date.pipe.js +12 -2
  64. package/esm2015/public-api.js +3 -7
  65. package/esm2015/services/base.service.js +16 -1
  66. package/esm2015/services/common.service.js +9 -1
  67. package/esm2015/services/crud.service.js +23 -4
  68. package/esm2015/services/menu.service.js +6 -3
  69. package/esm2015/services/notifier.service.js +2 -2
  70. package/esm2015/services/organization-base.service.js +57 -0
  71. package/esm2015/services/permission.service.js +9 -2
  72. package/esm2015/services/template-text-v4.service.js +1 -1
  73. package/esm2015/services/user-v5.service.js +1 -1
  74. package/esm2015/services/user.service.js +8 -2
  75. package/esm2015/tnx-shared.js +24 -22
  76. package/esm2015/tnx-shared.module.js +2 -4
  77. package/fesm2015/tnx-shared.js +532 -408
  78. package/fesm2015/tnx-shared.js.map +1 -1
  79. package/models/grid-info.d.ts +1 -0
  80. package/models/grid-info.d.ts.map +1 -1
  81. package/package.json +2 -2
  82. package/pipes/tn-date.pipe.d.ts +2 -0
  83. package/pipes/tn-date.pipe.d.ts.map +1 -1
  84. package/public-api.d.ts +2 -6
  85. package/public-api.d.ts.map +1 -1
  86. package/services/base.service.d.ts +1 -0
  87. package/services/base.service.d.ts.map +1 -1
  88. package/services/common.service.d.ts +4 -0
  89. package/services/common.service.d.ts.map +1 -1
  90. package/services/crud.service.d.ts.map +1 -1
  91. package/services/menu.service.d.ts +1 -1
  92. package/services/menu.service.d.ts.map +1 -1
  93. package/services/organization-base.service.d.ts +16 -0
  94. package/services/organization-base.service.d.ts.map +1 -0
  95. package/services/organization-base.service.ngfactory.d.ts.map +1 -0
  96. package/services/permission.service.d.ts +1 -0
  97. package/services/permission.service.d.ts.map +1 -1
  98. package/services/template-text-v4.service.d.ts.map +1 -1
  99. package/services/user.service.d.ts.map +1 -1
  100. package/tnx-shared.d.ts +23 -21
  101. package/tnx-shared.d.ts.map +1 -1
  102. package/tnx-shared.metadata.json +1 -1
  103. package/tnx-shared.module.d.ts +2 -2
  104. package/tnx-shared.module.d.ts.map +1 -1
  105. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
  106. package/components/file-explorer/signature-detail/signature-detail.component.d.ts +0 -8
  107. package/components/file-explorer/signature-detail/signature-detail.component.d.ts.map +0 -1
  108. package/components/file-explorer/signature-detail/signature-detail.component.ngfactory.d.ts.map +0 -1
  109. package/components/file-explorer/signature-detail/signature-detail.component.scss.shim.ngstyle.d.ts.map +0 -1
  110. package/esm2015/components/file-explorer/signature-detail/signature-detail.component.js +0 -66
@@ -37,12 +37,6 @@ export class FileUploadComponent extends ComponentBase {
37
37
  this.hasFile = false;
38
38
  this.showNoti = false;
39
39
  this.notification = null;
40
- this.supportedExtensions = [
41
- 'pdf',
42
- 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp',
43
- 'mp4', 'webm', 'ogg',
44
- 'mp3', 'wav', 'aac' // Âm thanh
45
- ];
46
40
  }
47
41
  writeValue(obj) {
48
42
  this.fileId = obj;
@@ -163,37 +157,11 @@ export class FileUploadComponent extends ComponentBase {
163
157
  this._downloadLinkService.download(model);
164
158
  }
165
159
  }
166
- isViewableFile(url) {
167
- var _a;
168
- if (!url) {
169
- return false;
170
- }
171
- try {
172
- // Lấy phần mở rộng của file từ URL
173
- const extension = (_a = url.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
174
- return extension ? this.supportedExtensions.includes(extension) : false;
175
- }
176
- catch (error) {
177
- console.error('Lỗi khi kiểm tra đuôi file:', error);
178
- return false;
179
- }
180
- }
181
- onDownloadOrViewFile() {
182
- if (this.isViewableFile(this.selectedFileName)) {
183
- if (this.fileId) {
184
- const url = this._fileObjectService.getPublicDownloadLinkByFileId(this.fileId);
185
- window.open(url, '_blank');
186
- }
187
- }
188
- else {
189
- this.onDownloadFile();
190
- }
191
- }
192
160
  }
193
161
  FileUploadComponent.decorators = [
194
162
  { type: Component, args: [{
195
163
  selector: 'file-upload',
196
- template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"onDownloadOrViewFile()\">\r\n <span *ngIf=\"!showNoti\">{{selectedFileName}}</span>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" [auto]=\"false\" class=\"file-upload\" mode=\"basic\"\r\n [chooseLabel]=\"chooseLabel\" name=\"file[]\" [maxFileSize]=\"maxFileSize\" accept=\"{{accept}}\"\r\n pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" multiple=\"single\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\"\r\n (onError)=\"handleError($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>",
164
+ template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"onDownloadFile()\">\r\n <span *ngIf=\"!showNoti\">{{selectedFileName}}</span>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" [auto]=\"false\" class=\"file-upload\" mode=\"basic\"\r\n [chooseLabel]=\"chooseLabel\" name=\"file[]\" [maxFileSize]=\"maxFileSize\" accept=\"{{accept}}\"\r\n pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" multiple=\"single\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\"\r\n (onError)=\"handleError($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>",
197
165
  providers: [
198
166
  {
199
167
  provide: NG_VALUE_ACCESSOR,
@@ -229,4 +197,4 @@ FileUploadComponent.propDecorators = {
229
197
  onRemove: [{ type: Output }],
230
198
  onChanged: [{ type: Output }]
231
199
  };
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBZ0I1RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQXFDbEQsWUFDWSxrQkFBcUMsRUFDckMsZ0JBQWlDLEVBQ2pDLG9CQUF5QyxFQUNqRCxTQUFtQjtRQUVuQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFMVCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLHFCQUFnQixH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aEIsU0FBUyxTQUFDLGFBQWE7MEJBRXZCLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLOzBCQUNMLEtBQUs7NENBQ0wsS0FBSzsyQ0FDTCxLQUFLOzRDQUNMLEtBQUs7MkNBQ0wsS0FBSzs2Q0FDTCxLQUFLOzRDQUNMLEtBQUs7K0JBQ0wsS0FBSzt1QkFDTCxNQUFNO3VCQUNOLE1BQU07d0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xyXG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9kb3dubG9hZC1saW5rLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZWRGb2xkZXJUeXBlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2NvbnRleHRtZW51JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnZmlsZS11cGxvYWQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGaWxlVXBsb2FkQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEZpbGVVcGxvYWQ7XHJcbiAgICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScpIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcclxuXHJcbiAgICBASW5wdXQoKSBjaG9vc2VMYWJlbDogc3RyaW5nID0gJ0No4buNbic7XHJcbiAgICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBhY2NlcHQgPSBcImltYWdlLyosLnhsc3gsLnhscywucGRmLC5kb2MsLmRvY3gsLnppcCwucmFyXCJcclxuICAgIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAxMDAwMDAwMDA7IC8vIFNpemUgaW4gYnl0ZVxyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnezB9OiBRdcOhIGR1bmcgbMaw4bujbmcgZmlsZSBjaG8gcGjDqXAsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ2R1bmcgbMaw4bujbmcgdOG7kWkgxJFhIGzDoCB7MH0uJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5Pzogc3RyaW5nID0gJ3swfTogS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBmaWxlLCAnO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbD86IHN0cmluZyA9ICfEkeG7i25oIGThuqFuZyBmaWxlIGNobyBwaMOpcDogezB9Lic7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnUXXDoSBz4buRIGzGsOG7o25nIGZpbGUgY2hvIHBow6lwLCAnO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAndOG7kWkgxJFhIHswfSBmaWxlLic7XHJcbiAgICBASW5wdXQoKSBzaGFyZWRGb2xkZXJUeXBlOiBTaGFyZWRGb2xkZXJUeXBlID0gU2hhcmVkRm9sZGVyVHlwZS5UZW1wdDtcclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgb25DaGFuZ2VCYXNlOiAodmFsKSA9PiB2b2lkO1xyXG4gICAgb25Ub3VjaGVkOiAodmFsKSA9PiB2b2lkO1xyXG4gICAgaXNEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgICBmaWxlSWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBzZWxlY3RlZEZpbGU6IGFueTtcclxuICAgIG1lbnU6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIHNlbGVjdGVkRmlsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBoYXNGaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzaG93Tm90aTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbm90aWZpY2F0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBzdXBwb3J0ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAncGRmJywgICAgICAgICAgLy8gUERGXHJcbiAgICAgICAgJ2pwZycsICdqcGVnJywgJ3BuZycsICdnaWYnLCAnYm1wJywgJ3dlYnAnLCAvLyBIw6xuaCDhuqNuaFxyXG4gICAgICAgICdtcDQnLCAnd2VibScsICdvZ2cnLCAgICAgICAgICAgICAgICAgICAgICAvLyBWaWRlb1xyXG4gICAgICAgICdtcDMnLCAnd2F2JywgJ2FhYycgICAgICAgICAgICAgICAgICAgICAgICAvLyDDgm0gdGhhbmhcclxuICAgIF07XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcclxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGVJZCA9IG9iajtcclxuICAgICAgICB0aGlzLmdldEZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gJ8SQYW5nIMSRw61uaCBrw6htLi4uJztcclxuICAgICAgICAgICAgbGV0IGZpbGVPYmplY3QgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZmlsZUlkKSkuZGF0YTtcclxuICAgICAgICAgICAgaWYgKGZpbGVPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IGZpbGVPYmplY3QubmFtZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVudSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWVudSgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51ID0gW3tcclxuICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJywgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25Eb3dubG9hZEZpbGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dDb250ZXh0TWVudShldnQpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHRNZW51LnRvZ2dsZShldnQpO1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk9wZW5TZWxlY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZS5iYXNpY0ZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdEZpbGUoZXZ0KSB7XHJcbiAgICAgICAgaWYgKGV2dC5lcnJvckZpbGVzICYmIGV2dC5lcnJvckZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gYCR7ZXZ0LmVycm9yTWVzc2FnZXNbMF0uc3VtbWFyeX0ke2V2dC5lcnJvck1lc3NhZ2VzWzBdLmRldGFpbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVXBsb2FkIGZpbGUuXHJcbiAgICAgICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3NoYXJlZEZvbGRlclR5cGUnLCBgJHt0aGlzLnNoYXJlZEZvbGRlclR5cGV9YCk7XHJcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGV2dC5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gZXZ0LmZpbGVzWzBdO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldE5vdGkoJ8SQYW5nIHThuqNpIGZpbGUgbMOqbi4uLicpO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jcmVhdGVGaWxlSW50b1NoYXJlZEZvbGRlcihmb3JtRGF0YSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJZCA9IHJzLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShycy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UocnMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm90aShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1VwbG9hZCBmaWxlIGNoxrBhIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKGV2dCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Tm90aShtc2cpIHtcclxuICAgICAgICBpZiAobXNnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG1zZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dOb3RpID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVGaWxlKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XHJcblxyXG4gICAgICAgIHRoaXMub25SZW1vdmUuZW1pdCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRvd25sb2FkRmlsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5maWxlSWQpIHtcclxuICAgICAgICAgICAgbGV0IG1vZGVsID0gbmV3IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKCk7XHJcbiAgICAgICAgICAgIG1vZGVsLmZpbGVJZCA9IHRoaXMuZmlsZUlkO1xyXG4gICAgICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkKG1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNWaWV3YWJsZUZpbGUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBM4bqleSBwaOG6p24gbeG7nyBy4buZbmcgY+G7p2EgZmlsZSB04burIFVSTFxyXG4gICAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbiA/IHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucy5pbmNsdWRlcyhleHRlbnNpb24pIDogZmFsc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTOG7l2kga2hpIGtp4buDbSB0cmEgxJF1w7RpIGZpbGU6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRG93bmxvYWRPclZpZXdGaWxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmlld2FibGVGaWxlKHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRQdWJsaWNEb3dubG9hZExpbmtCeUZpbGVJZCh0aGlzLmZpbGVJZCk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vbkRvd25sb2FkRmlsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIl19
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBZ0I1RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQWdDbEQsWUFDWSxrQkFBcUMsRUFDckMsZ0JBQWlDLEVBQ2pDLG9CQUF5QyxFQUNqRCxTQUFtQjtRQUVuQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFMVCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLHFCQUFnQixH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VGtCLFFBQVE7OzttQkE0QmpELFNBQVMsU0FBQyxNQUFNOzBCQUNoQixTQUFTLFNBQUMsYUFBYTswQkFFdkIsS0FBSzt1QkFDTCxLQUFLO3FCQUNMLEtBQUs7MEJBQ0wsS0FBSzs0Q0FDTCxLQUFLOzJDQUNMLEtBQUs7NENBQ0wsS0FBSzsyQ0FDTCxLQUFLOzZDQUNMLEtBQUs7NENBQ0wsS0FBSzsrQkFDTCxLQUFLO3VCQUNMLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtb2JqZWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XHJcbmltcG9ydCB7IERvd25sb2FkTGlua1NlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XHJcbmltcG9ydCB7IFNoYXJlZEZvbGRlclR5cGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdmaWxlLXVwbG9hZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpbGVVcGxvYWRDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlJykgZmlsZTogRmlsZVVwbG9hZDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JykgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG5cclxuICAgIEBJbnB1dCgpIGNob29zZUxhYmVsOiBzdHJpbmcgPSAnQ2jhu41uJztcclxuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGFjY2VwdCA9IFwiaW1hZ2UvKiwueGxzeCwueGxzLC5wZGYsLmRvYywuZG9jeCwuemlwLC5yYXJcIlxyXG4gICAgQElucHV0KCkgbWF4RmlsZVNpemU6IG51bWJlciA9IDEwMDAwMDAwMDsgLy8gU2l6ZSBpbiBieXRlXHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICd7MH06IFF1w6EgZHVuZyBsxrDhu6NuZyBmaWxlIGNobyBwaMOpcCwgJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAnZHVuZyBsxrDhu6NuZyB04buRaSDEkWEgbMOgIHswfS4nO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnezB9OiBLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIGZpbGUsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ8SR4buLbmggZOG6oW5nIGZpbGUgY2hvIHBow6lwOiB7MH0uJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICdRdcOhIHPhu5EgbMaw4bujbmcgZmlsZSBjaG8gcGjDqXAsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbD86IHN0cmluZyA9ICd04buRaSDEkWEgezB9IGZpbGUuJztcclxuICAgIEBJbnB1dCgpIHNoYXJlZEZvbGRlclR5cGU6IFNoYXJlZEZvbGRlclR5cGUgPSBTaGFyZWRGb2xkZXJUeXBlLlRlbXB0O1xyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVtb3ZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBvbkNoYW5nZUJhc2U6ICh2YWwpID0+IHZvaWQ7XHJcbiAgICBvblRvdWNoZWQ6ICh2YWwpID0+IHZvaWQ7XHJcbiAgICBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAgIGZpbGVJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHNlbGVjdGVkRmlsZTogYW55O1xyXG4gICAgbWVudTogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgc2VsZWN0ZWRGaWxlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGhhc0ZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNob3dOb3RpOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBub3RpZmljYXRpb246IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxlSWQgPSBvYmo7XHJcbiAgICAgICAgdGhpcy5nZXRGaWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGaWxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9ICfEkGFuZyDEkcOtbmgga8OobS4uLic7XHJcbiAgICAgICAgICAgIGxldCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldERldGFpbCh0aGlzLmZpbGVJZCkpLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChmaWxlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBmaWxlT2JqZWN0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lbnUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldE1lbnUoKSB7XHJcblxyXG4gICAgICAgIHRoaXMubWVudSA9IFt7XHJcbiAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsIGljb246ICdmYXMgZmEtZG93bmxvYWQnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uRG93bmxvYWRGaWxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29udGV4dE1lbnUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudS50b2dnbGUoZXZ0KTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25PcGVuU2VsZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlLmJhc2ljRmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RGaWxlKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQuZXJyb3JGaWxlcyAmJiBldnQuZXJyb3JGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IGAke2V2dC5lcnJvck1lc3NhZ2VzWzBdLnN1bW1hcnl9JHtldnQuZXJyb3JNZXNzYWdlc1swXS5kZXRhaWx9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFVwbG9hZCBmaWxlLlxyXG4gICAgICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdzaGFyZWRGb2xkZXJUeXBlJywgYCR7dGhpcy5zaGFyZWRGb2xkZXJUeXBlfWApO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBldnQuZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IGV2dC5maWxlc1swXTtcclxuICAgICAgICAgICAgdGhpcy5maWxlLmNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXROb3RpKCfEkGFuZyB04bqjaSBmaWxlIGzDqm4uLi4nKTtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuY3JlYXRlRmlsZUludG9TaGFyZWRGb2xkZXIoZm9ybURhdGEpXHJcbiAgICAgICAgICAgICAgICAudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUocnMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHJzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdVcGxvYWQgZmlsZSBjaMawYSB0aMOgbmggY8O0bmcnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcihldnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE5vdGkobXNnKSB7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dOb3RpID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBtc2c7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlRmlsZSgpIHtcclxuICAgICAgICB0aGlzLmZpbGVJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIGxldCBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTygpO1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlSWQgPSB0aGlzLmZpbGVJZDtcclxuICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZChtb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -12,9 +12,11 @@ export class MaskComponent {
12
12
  this.decimalPlaces = 2;
13
13
  this.viewMode = false;
14
14
  this.inputStyleClass = '';
15
+ this.thousandSeperator = '.';
15
16
  this.onFocus = new EventEmitter();
16
17
  this.onBlur = new EventEmitter();
17
18
  this.onChanged = new EventEmitter();
19
+ this.locale = 'vi-VN';
18
20
  }
19
21
  set placeholder(value) {
20
22
  if (value == null)
@@ -22,10 +24,11 @@ export class MaskComponent {
22
24
  this._placeholder = value;
23
25
  }
24
26
  ngOnInit() {
27
+ this.locale = this.thousandSeperator == '.' ? 'vi-VN' : 'en-US';
25
28
  }
26
29
  writeValue(obj) {
27
30
  if (obj) {
28
- this.model = this._numberPipe.transform(obj, '', 'vi-VN');
31
+ this.model = this._numberPipe.transform(obj, '', this.locale);
29
32
  this.value = Number(this.model);
30
33
  }
31
34
  else if (obj === 0) {
@@ -43,7 +46,7 @@ export class MaskComponent {
43
46
  return 'separator.0';
44
47
  }
45
48
  getThousandSeperator() {
46
- return '.';
49
+ return this.thousandSeperator || '.';
47
50
  }
48
51
  handleFocus() {
49
52
  this.onFocus.emit(this.value);
@@ -75,7 +78,7 @@ export class MaskComponent {
75
78
  }
76
79
  }
77
80
  numberToStringVN(number) {
78
- return this._numberPipe.transform(number, '', 'vi-VN');
81
+ return this._numberPipe.transform(number, '', this.locale);
79
82
  }
80
83
  registerOnChange(fn) {
81
84
  this.onChange = fn;
@@ -119,8 +122,9 @@ MaskComponent.propDecorators = {
119
122
  decimalPlaces: [{ type: Input }],
120
123
  viewMode: [{ type: Input }],
121
124
  inputStyleClass: [{ type: Input }],
125
+ thousandSeperator: [{ type: Input }],
122
126
  onFocus: [{ type: Output }],
123
127
  onBlur: [{ type: Output }],
124
128
  onChanged: [{ type: Output }]
125
129
  };
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9tYXNrL21hc2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFlekUsTUFBTSxPQUFPLGFBQWE7SUE0QnRCLFlBQ1ksV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF4QjNCLGFBQVEsR0FBc0IsU0FBUyxDQUFDO1FBQ2pELGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBTWpCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFDekIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFHWixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXBCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBTzFDLENBQUM7SUF2QkwsSUFBYSxXQUFXLENBQUMsS0FBYTtRQUNsQyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQ2IsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFxQkQsUUFBUTtJQUNSLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtRQUNm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QUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELGdCQUFnQixDQUFFLFVBQW1CO1FBQ2pDLElBQUksQ0FBQyxVQUFVO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7O1lBRXJCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7OztZQXpISixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLGc0QkFBb0M7Z0JBRXBDLFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQzt3QkFDNUMsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsV0FBVztpQkFDZDs7YUFDSjs7O1lBaEJRLFdBQVc7Ozt1QkFzQmYsS0FBSzswQkFFTCxLQUFLO3VCQUtMLEtBQUs7cUJBQ0wsS0FBSztxQkFDTCxLQUFLO2tCQUNMLEtBQUs7a0JBQ0wsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLEtBQUs7OEJBQ0wsS0FBSztzQkFFTCxNQUFNO3FCQUNOLE1BQU07d0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndG4tbWFzaycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWFzay5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9tYXNrLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXNrQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIERlY2ltYWxQaXBlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xyXG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKSBtYXNrVHlwZTogJ2RlY2ltYWwnIHwgJ2ludCcgPSAnZGVjaW1hbCc7XHJcbiAgICBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgQElucHV0KCkgc3VmZml4ID0gJyc7XHJcbiAgICBASW5wdXQoKSBwcmVmaXggPSAnJztcclxuICAgIEBJbnB1dCgpIG1pbjogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbWF4OiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBkZWNpbWFsUGxhY2VzID0gMjtcclxuICAgIEBJbnB1dCgpIHZpZXdNb2RlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBpbnB1dFN0eWxlQ2xhc3MgPSAnJztcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIG1vZGVsOiBhbnk7XHJcbiAgICB2YWx1ZTogTnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX251bWJlclBpcGU6IERlY2ltYWxQaXBlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShvYmosICcnLCAndmktVk4nKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IE51bWJlcih0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob2JqID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSAnMCc7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSAnJztcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1hc2tCeVR5cGUobWFza1R5cGUpIHtcclxuICAgICAgICBpZiAobWFza1R5cGUgPT09ICdkZWNpbWFsJylcclxuICAgICAgICAgICAgcmV0dXJuIGBzZXBhcmF0b3IuJHt0aGlzLmRlY2ltYWxQbGFjZXN9YDtcclxuICAgICAgICByZXR1cm4gJ3NlcGFyYXRvci4wJztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUaG91c2FuZFNlcGVyYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gJy4nO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDaGFuZ2VkVmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja1ZhbHVlSW5SYW5nZSgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1ZhbHVlSW5SYW5nZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLnRyaW0oKSAhPSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gTnVtYmVyKHRoaXMubW9kZWwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWluICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMubnVtYmVyVG9TdHJpbmdWTih0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXggJiYgdGhpcy52YWx1ZSA+IHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5udW1iZXJUb1N0cmluZ1ZOKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG51bWJlclRvU3RyaW5nVk4obnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlclBpcGUudHJhbnNmb3JtKG51bWJlciwgJycsICd2aS1WTicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghaXNEaXNhYmxlZClcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IG51bGw7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9tYXNrL21hc2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFlekUsTUFBTSxPQUFPLGFBQWE7SUE2QnRCLFlBQ1ksV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUExQjNCLGFBQVEsR0FBc0IsU0FBUyxDQUFDO1FBQ2pELGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBTWpCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFDekIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFHWixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLHNCQUFpQixHQUFHLEdBQUcsQ0FBQztRQUV2QixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUk5QyxXQUFNLEdBQUcsT0FBTyxDQUFDO0lBSWIsQ0FBQztJQXpCTCxJQUFhLFdBQVcsQ0FBQyxLQUFhO1FBQ2xDLElBQUksS0FBSyxJQUFJLElBQUk7WUFDYixLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFD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V0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUUsVUFBbUI7UUFDakMsSUFBSSxDQUFDLFVBQVU7WUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzs7WUFFckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQzs7O1lBM0hKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsZzRCQUFvQztnQkFFcEMsU0FBUyxFQUFFO29CQUNQO3dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO3dCQUM1QyxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCxXQUFXO2lCQUNkOzthQUNKOzs7WUFoQlEsV0FBVzs7O3VCQXFCZixLQUFLOzBCQUVMLEtBQUs7dUJBS0wsS0FBSztxQkFDTCxLQUFLO3FCQUNMLEtBQUs7a0JBQ0wsS0FBSztrQkFDTCxLQUFLOzRCQUNMLEtBQUs7dUJBQ0wsS0FBSzs4QkFDTCxLQUFLO2dDQUNMLEtBQUs7c0JBRUwsTUFBTTtxQkFDTixNQUFNO3dCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RuLW1hc2snLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21hc2suY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWFzay5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWFza0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBEZWNpbWFsUGlwZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFza0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xyXG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKSBtYXNrVHlwZTogJ2RlY2ltYWwnIHwgJ2ludCcgPSAnZGVjaW1hbCc7XHJcbiAgICBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgQElucHV0KCkgc3VmZml4ID0gJyc7XHJcbiAgICBASW5wdXQoKSBwcmVmaXggPSAnJztcclxuICAgIEBJbnB1dCgpIG1pbjogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbWF4OiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBkZWNpbWFsUGxhY2VzID0gMjtcclxuICAgIEBJbnB1dCgpIHZpZXdNb2RlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBpbnB1dFN0eWxlQ2xhc3MgPSAnJztcclxuICAgIEBJbnB1dCgpIHRob3VzYW5kU2VwZXJhdG9yID0gJy4nO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgbW9kZWw6IGFueTtcclxuICAgIHZhbHVlOiBOdW1iZXI7XHJcbiAgICBsb2NhbGUgPSAndmktVk4nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX251bWJlclBpcGU6IERlY2ltYWxQaXBlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy50aG91c2FuZFNlcGVyYXRvciA9PSAnLicgPyAndmktVk4nIDogJ2VuLVVTJztcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0ob2JqLCAnJywgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gTnVtYmVyKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvYmogPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9ICcwJztcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWFza0J5VHlwZShtYXNrVHlwZSkge1xyXG4gICAgICAgIGlmIChtYXNrVHlwZSA9PT0gJ2RlY2ltYWwnKVxyXG4gICAgICAgICAgICByZXR1cm4gYHNlcGFyYXRvci4ke3RoaXMuZGVjaW1hbFBsYWNlc31gO1xyXG4gICAgICAgIHJldHVybiAnc2VwYXJhdG9yLjAnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRob3VzYW5kU2VwZXJhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRob3VzYW5kU2VwZXJhdG9yIHx8ICcuJztcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGb2N1cygpIHtcclxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ2hhbmdlZFZhbHVlKCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tWYWx1ZUluUmFuZ2UoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tWYWx1ZUluUmFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC50cmltKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IE51bWJlcih0aGlzLm1vZGVsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbiAmJiB0aGlzLnZhbHVlIDwgdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLm51bWJlclRvU3RyaW5nVk4odGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF4ICYmIHRoaXMudmFsdWUgPiB0aGlzLm1heCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWF4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMubnVtYmVyVG9TdHJpbmdWTih0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBudW1iZXJUb1N0cmluZ1ZOKG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShudW1iZXIsICcnLCB0aGlzLmxvY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gbnVsbDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -55,12 +55,6 @@ export class ServiceFileUploadComponent extends ComponentBase {
55
55
  this.onRemove = new EventEmitter();
56
56
  this.onChanged = new EventEmitter();
57
57
  this.dataModel = {};
58
- this.supportedExtensions = [
59
- 'pdf',
60
- 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp',
61
- 'mp4', 'webm', 'ogg',
62
- 'mp3', 'wav', 'aac' // Âm thanh
63
- ];
64
58
  if (this._userService.isValidAccessToken()) {
65
59
  this.userId = this._userService.getUserIdCombine();
66
60
  }
@@ -355,35 +349,11 @@ export class ServiceFileUploadComponent extends ComponentBase {
355
349
  setDisabledState(isDisabled) {
356
350
  this.isDisabled = isDisabled;
357
351
  }
358
- isViewableFile(url) {
359
- var _a;
360
- if (!url) {
361
- return false;
362
- }
363
- try {
364
- // Lấy phần mở rộng của file từ URL
365
- const extension = (_a = url.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
366
- return extension ? this.supportedExtensions.includes(extension) : false;
367
- }
368
- catch (error) {
369
- console.error('Lỗi khi kiểm tra đuôi file:', error);
370
- return false;
371
- }
372
- }
373
- onDownloadOrViewFile() {
374
- if (this.isViewableFile(this.selectedFileName)) {
375
- const url = this._fileObjectService.getPublicDownloadLinkByFileId(this.fileId);
376
- window.open(url, '_blank');
377
- }
378
- else {
379
- this.onDownloadFile();
380
- }
381
- }
382
352
  }
383
353
  ServiceFileUploadComponent.decorators = [
384
354
  { type: Component, args: [{
385
355
  selector: 'service-file-upload',
386
- template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"onDownloadOrViewFile()\">\r\n <div>\r\n <ng-container *ngIf=\"!showNoti\">\r\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\r\n <span *ngIf=\"extension\">.{{extension}} </span>\r\n </ng-container>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\r\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" multiple=\"single\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" [accept]=\"accept\"\r\n (onSelect)=\"onSelectFile($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>",
356
+ template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"onDownloadFile()\">\r\n <div>\r\n <ng-container *ngIf=\"!showNoti\">\r\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\r\n <span *ngIf=\"extension\">.{{extension}} </span>\r\n </ng-container>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\r\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" multiple=\"single\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" [accept]=\"accept\"\r\n (onSelect)=\"onSelectFile($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>",
387
357
  providers: [
388
358
  {
389
359
  provide: NG_VALUE_ACCESSOR,
@@ -420,4 +390,4 @@ ServiceFileUploadComponent.propDecorators = {
420
390
  onRemove: [{ type: Output }],
421
391
  onChanged: [{ type: Output }]
422
392
  };
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zZXJ2aWNlLWZpbGUtdXBsb2FkL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFP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QUUscUJBQXFCO2dCQUMvQiwyb0ZBQW1EO2dCQUVuRCxTQUFTLEVBQUU7b0JBQ1A7d0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQzt3QkFDekQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsdUJBQXVCO2lCQUMxQjs7YUFDSjs7O1lBaENRLGlCQUFpQjtZQVFqQixjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixhQUFhO1lBQ2IsV0FBVztZQVhYLGVBQWU7WUFFZixtQkFBbUI7WUFSa0IsUUFBUTs7OzBCQXVDakQsU0FBUyxTQUFDLGFBQWE7c0JBRXZCLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUVMLEtBQUs7MEJBU0wsS0FBSzttQkFtQkwsU0FBUyxTQUFDLE1BQU07Z0NBQ2hCLFNBQVMsU0FBQyxtQkFBbUI7NEJBQzdCLFNBQVMsU0FBQyxlQUFlO3VCQU96QixNQUFNO3VCQUNOLE1BQU07d0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xyXG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9kb3dubG9hZC1saW5rLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJJdGVtIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvZmlsZS1leHBsb3Jlci1pdGVtJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvb3ZlcmxheXBhbmVsJztcclxuaW1wb3J0IHsgRmlsZVZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvZmlsZS12aWV3ZXIvZmlsZS12aWV3ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9jb250ZXh0bWVudSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzZXJ2aWNlLWZpbGUtdXBsb2FkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXJ2aWNlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnKSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEgPSBuZXcgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEoKTtcclxuICAgIEBJbnB1dCgpIHNlcnZpY2VDb2RlID0gJyc7XHJcbiAgICBASW5wdXQoKSBlbnRpdHkgPSAnJztcclxuICAgIF9lbnRpdHlLZXk6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHNldCBlbnRpdHlLZXkodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9lbnRpdHlLZXkgPSB2YWw7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VGaWxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGdldCBlbnRpdHlLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIGNob29zZUxhYmVsID0gJ0No4buNbic7XHJcblxyXG4gICAgZmlsZUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIHNlbGVjdGVkRmlsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBleHRlbnNpb246IHN0cmluZyA9IG51bGw7XHJcbiAgICBzZWxlY3RlZEZpbGVOYW1lU2hvcnQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBoYXNGaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzaG93Tm90aTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZmlsZU9iajogRmlsZUV4cGxvcmVySXRlbSA9IG5ldyBGaWxlRXhwbG9yZXJJdGVtKCk7XHJcbiAgICB1c2VySWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBub3RpZmljYXRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgICBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XHJcbiAgICBhY2NlcHQgPSBcImltYWdlLyosLnhsc3gsLnhscywucGRmLC5kb2MsLmRvY3gsLnppcCwucmFyXCI7XHJcbiAgICByZWFkb25seSA9IG51bGw7XHJcbiAgICBkZWZhdWx0U2NhbkZpbGVOYW1lID0gbnVsbDtcclxuICAgIG1lbnU6IEFycmF5PGFueT4gPSBbXTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdmaWxlJykgZmlsZTogRmlsZVVwbG9hZDtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVEZXRhaWxDb21tYW5kJykgZmlsZURldGFpbENvbW1hbmQ6IE92ZXJsYXlQYW5lbDtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVWaWV3ZXJOZXcnKSBmaWxlVmlld2VyTmV3OiBGaWxlVmlld2VyQ29tcG9uZW50O1xyXG5cclxuICAgIG9uQ2hhbmdlQmFzZTogKHZhbCkgPT4gdm9pZDtcclxuICAgIG9uVG91Y2hlZDogKHZhbCkgPT4gdm9pZDtcclxuICAgIGlzRGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBfc3Vic2NyaWJlOiBTdWJzY3JpcHRpb24gPSBudWxsO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgZGF0YU1vZGVsOiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgc3VwcG9ydGVkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgJ3BkZicsICAgICAgICAgIC8vIFBERlxyXG4gICAgICAgICdqcGcnLCAnanBlZycsICdwbmcnLCAnZ2lmJywgJ2JtcCcsICd3ZWJwJywgLy8gSMOsbmgg4bqjbmhcclxuICAgICAgICAnbXA0JywgJ3dlYm0nLCAnb2dnJywgICAgICAgICAgICAgICAgICAgICAgLy8gVmlkZW9cclxuICAgICAgICAnbXAzJywgJ3dhdicsICdhYWMnICAgICAgICAgICAgICAgICAgICAgICAgLy8gw4JtIHRoYW5oXHJcbiAgICBdO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbFJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyID0ge307XHJcbiAgICAgICAgdGhpcy5kYXRhTW9kZWwuZHJpdmVGaWxlRGlhbG9nID0geyBwb3B1cFNpemU6IDxhbnk+e30gfTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0VXAoKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVwKCkge1xyXG4gICAgICAgIHRoaXMuYWNjZXB0ID0gdGhpcy5jb250cm9sLmFjY2VwdDtcclxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5jb250cm9sLnJlYWRvbmx5O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNlcnZpY2VGaWxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0tleXMoKSkge1xyXG4gICAgICAgICAgICB2YXIgc2VydmljZVJlcXVlc3RNb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5lbnRpdHlLZXksXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Tm90aSgnxJBhbmcgbOG6pXkgxJHDrW5oIGvDqG0uLi4nKTtcclxuICAgICAgICAgICAgdmFyIGZpbGVPYmplY3QgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0U2luZ2xlU2VydmljZUZpbGUoc2VydmljZVJlcXVlc3RNb2RlbCkpLmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmogPSBmaWxlT2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBmaWxlT2JqZWN0LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShmaWxlT2JqZWN0Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSgnaGFzLXZhbHVlJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVPYmogPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZShudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRNZW51KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlQ29kZVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eUtleVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eUtleSAhPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1lbnUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0ZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51ID0gW107XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWVudSA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdmYXMgZmEtZG93bmxvYWQnLFxyXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0ICYmICF0aGlzLmNvbnRyb2wuYXV0b1NhdmVkKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYC0tLS0tLS0tLS0tLS0tLS0tPnN1YnNjcmliZSBldmVudCAke3RoaXMuY29udHJvbC5maWVsZH1fJHt0aGlzLnJvb3RDb250ZXh0LmtleX1gKTtcclxuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5TQVZFX0ZJTEVfSU5fRk9STSwgcnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0+c2F2ZSBldmVudCAnICsgdGhpcy5jb250cm9sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2F2ZUZpbGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpYmUpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygndW5zdWJzY3JpYmUgJyArIHRoaXMuY29udHJvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk9wZW5TZWxlY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZS5iYXNpY0ZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdEZpbGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlsZS5jbGVhcigpO1xyXG4gICAgICAgIGlmIChldnQuZXJyb3JGaWxlcyAmJiBldnQuZXJyb3JGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IGAke2V2dC5lcnJvck1lc3NhZ2VzWzBdLnN1bW1hcnl9JHtldnQuZXJyb3JNZXNzYWdlc1swXS5kZXRhaWx9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZXZ0LnN1Y2Nlc3NGaWxlc1swXTtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWxlTmFtZSh0aGlzLnNlbGVjdGVkRmlsZSA/IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWUgOiBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYXV0b1NhdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNhdmVGaWxlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKCdoYXMtdmFsdWUnKTtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZUZpbGUoKSB7XHJcbiAgICAgICAgLy8gxJDDoyBsxrB1IGZpbGUuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIMSR4bunIGtleXMuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0tleXMoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoXCJDaMawYSBj4bqldSBow6xuaCBrZXlzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaMawYSBjaOG7jW4gZmlsZS5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2VydmljZUNvZGUnLCB0aGlzLnNlcnZpY2VDb2RlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VudGl0eScsIHRoaXMuZW50aXR5KTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VudGl0eUtleScsIHRoaXMuZW50aXR5S2V5KTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzTXVsdGlwbGUnLCAnZmFsc2UnKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCB0aGlzLnNlbGVjdGVkRmlsZSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXROb3RpKCfEkGFuZyB04bqjaSBmaWxlIGzDqm4uLi4nKTtcclxuICAgICAgICB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jcmVhdGVTZXJ2aWNlRmlsZShmb3JtRGF0YSlcclxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IHRoaXMuc2VsZWN0ZWRGaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgY2jGsGEgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXROb3RpKG1zZykge1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbXNnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWxlTmFtZShmaWxlTmFtZSkge1xyXG4gICAgICAgIGlmIChmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lU2hvcnQgPSBmaWxlTmFtZS5zdWJzdHIoMCwgZmlsZU5hbWUubGVuZ3RoIC0gdGhpcy5leHRlbnNpb24ubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lU2hvcnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29udGV4dE1lbnUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudS50b2dnbGUoZXZ0KTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVGaWxlKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZU9iaiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldEZpbGVOYW1lKG51bGwpO1xyXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZShudWxsKTtcclxuICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5GaWxlKGV2dCkge1xyXG4gICAgICAgIC8vIHNlbmQgdG4gY29tbWFuZFxyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XHJcbiAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLlNjYW47XHJcbiAgICAgICAgLy8gY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcbiAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYW5GaWxlQ29tbWFuZCA9IHtcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgdXBsb2FkRmlsZUFwaTogdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0U2NhbkZpbGVVcGxvYWRFbmRwb2ludChjb3JyZWxhdGlvbklkKSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lOiB0aGlzLmRlZmF1bHRTY2FuRmlsZU5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbW1hbmQuZGF0YSA9IHNjYW5GaWxlQ29tbWFuZDtcclxuXHJcbiAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWApO1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWAsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmogPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmoubmFtZSA9IG9iai5tZXNzYWdlLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmoubmFtZSA9IG9iai5tZXNzYWdlLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlld09ubGluZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKHRoaXMuZmlsZU9iai5uYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmZpbGVJZCA9IHRoaXMuZmlsZUlkO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuZmlsZU5hbWUgPSB0aGlzLmZpbGVPYmoubmFtZTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLnNlcnZpY2UgPSB0aGlzLnNlcnZpY2VDb2RlO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuZW50aXR5ID0gdGhpcy5lbnRpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5lbnRpdHlLZXkgPSB0aGlzLmVudGl0eUtleTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5pc0ZpbGVWZXJzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyh7XHJcbiAgICAgICAgICAgIGZpbGVJZDogdGhpcy5maWxlSWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZChtb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkRmlsZUZyb21Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLmRhdGFNb2RlbC5kcml2ZUZpbGVEaWFsb2cgPSB7XHJcbiAgICAgICAgLy8gICAgIHNob3c6IHRydWVcclxuICAgICAgICAvLyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlVG9Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldEZvbGRlcklkKHRoaXMudXNlcklkKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgdmFyIGNvcHlGaWxlRHRvID0gbmV3IENvcHlGaWxlRHRvKCk7XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLmlkID0gdGhpcy5maWxlSWQ7XHJcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmZpbGVOYW1lID09IFwiXCIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLmZpbGVPYmogIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVPYmoubmFtZTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVOYW1lO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLm93bmVyVHlwZSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIC8vICAgICBjb3B5RmlsZUR0by5mb2xkZXJJZCA9IHJlc3BvbnNlLmRhdGE7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvcHlGaWxlKGNvcHlGaWxlRHRvKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnU2FvIGNow6lwIHTDoGkgbGnhu4d1IHbhu4EgdGjGsCBt4bulYyBjw6EgbmjDom4gdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgLy8gICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93QnVzaW5lc3NFcnJvcihlcnJvci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaXNWaWV3YWJsZUZpbGUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBM4bqleSBwaOG6p24gbeG7nyBy4buZbmcgY+G7p2EgZmlsZSB04burIFVSTFxyXG4gICAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbiA/IHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucy5pbmNsdWRlcyhleHRlbnNpb24pIDogZmFsc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTOG7l2kga2hpIGtp4buDbSB0cmEgxJF1w7RpIGZpbGU6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRG93bmxvYWRPclZpZXdGaWxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmlld2FibGVGaWxlKHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0UHVibGljRG93bmxvYWRMaW5rQnlGaWxlSWQodGhpcy5maWxlSWQpO1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25Eb3dubG9hZEZpbGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zZXJ2aWNlLWZpbGUtdXBsb2FkL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFP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Q2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7OztZQTlZSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IscW9GQUFtRDtnQkFFbkQsU0FBUyxFQUFFO29CQUNQO3dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUM7d0JBQ3pELEtBQUssRUFBRSxJQUFJO3FCQUNkO29CQUNELHVCQUF1QjtpQkFDMUI7O2FBQ0o7OztZQWhDUSxpQkFBaUI7WUFRakIsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YsYUFBYTtZQUNiLFdBQVc7WUFYWCxlQUFlO1lBRWYsbUJBQW1CO1lBUmtCLFFBQVE7OzswQkF1Q2pELFNBQVMsU0FBQyxhQUFhO3NCQUV2QixLQUFLOzBCQUNMLEtBQUs7cUJBQ0wsS0FBSzt3QkFFTCxLQUFLOzBCQVNMLEtBQUs7bUJBbUJMLFNBQVMsU0FBQyxNQUFNO2dDQUNoQixTQUFTLFNBQUMsbUJBQW1COzRCQUM3QixTQUFTLFNBQUMsZUFBZTt1QkFPekIsTUFBTTt1QkFDTixNQUFNO3dCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgRG93bmxvYWRMaW5rU2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVySXRlbSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvbW9kZWxzL2ZpbGUtZXhwbG9yZXItaXRlbSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IEZpbGVWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL2ZpbGUtdmlld2VyL2ZpbGUtdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIFRuQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uLy4uL21vZGVscy90bi1jbGllbnQtY29tbWFuZCc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc2VydmljZS1maWxlLXVwbG9hZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZXJ2aWNlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JykgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hID0gbmV3IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKCk7XHJcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZSA9ICcnO1xyXG4gICAgQElucHV0KCkgZW50aXR5ID0gJyc7XHJcbiAgICBfZW50aXR5S2V5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5S2V5ID0gdmFsO1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTZXJ2aWNlRmlsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBnZXQgZW50aXR5S2V5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnRpdHlLZXk7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBjaG9vc2VMYWJlbCA9ICdDaOG7jW4nO1xyXG5cclxuICAgIGZpbGVJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICBzZWxlY3RlZEZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgZXh0ZW5zaW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRGaWxlTmFtZVNob3J0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaGFzRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc2hvd05vdGk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGZpbGVPYmo6IEZpbGVFeHBsb3Jlckl0ZW0gPSBuZXcgRmlsZUV4cGxvcmVySXRlbSgpO1xyXG4gICAgdXNlcklkOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbm90aWZpY2F0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xyXG4gICAgYWNjZXB0ID0gXCJpbWFnZS8qLC54bHN4LC54bHMsLnBkZiwuZG9jLC5kb2N4LC56aXAsLnJhclwiO1xyXG4gICAgcmVhZG9ubHkgPSBudWxsO1xyXG4gICAgZGVmYXVsdFNjYW5GaWxlTmFtZSA9IG51bGw7XHJcbiAgICBtZW51OiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEZpbGVVcGxvYWQ7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlRGV0YWlsQ29tbWFuZCcpIGZpbGVEZXRhaWxDb21tYW5kOiBPdmVybGF5UGFuZWw7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlVmlld2VyTmV3JykgZmlsZVZpZXdlck5ldzogRmlsZVZpZXdlckNvbXBvbmVudDtcclxuXHJcbiAgICBvbkNoYW5nZUJhc2U6ICh2YWwpID0+IHZvaWQ7XHJcbiAgICBvblRvdWNoZWQ6ICh2YWwpID0+IHZvaWQ7XHJcbiAgICBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgX3N1YnNjcmliZTogU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGRhdGFNb2RlbDogYW55ID0ge307XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZmlsZU9iamVjdFNlcnZpY2U6IEZpbGVPYmplY3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbFJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyID0ge307XHJcbiAgICAgICAgdGhpcy5kYXRhTW9kZWwuZHJpdmVGaWxlRGlhbG9nID0geyBwb3B1cFNpemU6IDxhbnk+e30gfTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0VXAoKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVwKCkge1xyXG4gICAgICAgIHRoaXMuYWNjZXB0ID0gdGhpcy5jb250cm9sLmFjY2VwdDtcclxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5jb250cm9sLnJlYWRvbmx5O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNlcnZpY2VGaWxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0tleXMoKSkge1xyXG4gICAgICAgICAgICB2YXIgc2VydmljZVJlcXVlc3RNb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5lbnRpdHlLZXksXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Tm90aSgnxJBhbmcgbOG6pXkgxJHDrW5oIGvDqG0uLi4nKTtcclxuICAgICAgICAgICAgdmFyIGZpbGVPYmplY3QgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0U2luZ2xlU2VydmljZUZpbGUoc2VydmljZVJlcXVlc3RNb2RlbCkpLmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmogPSBmaWxlT2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBmaWxlT2JqZWN0LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShmaWxlT2JqZWN0Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSgnaGFzLXZhbHVlJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVPYmogPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZShudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRNZW51KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlQ29kZVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eUtleVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eUtleSAhPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1lbnUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0ZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51ID0gW107XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWVudSA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdmYXMgZmEtZG93bmxvYWQnLFxyXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0ICYmICF0aGlzLmNvbnRyb2wuYXV0b1NhdmVkKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYC0tLS0tLS0tLS0tLS0tLS0tPnN1YnNjcmliZSBldmVudCAke3RoaXMuY29udHJvbC5maWVsZH1fJHt0aGlzLnJvb3RDb250ZXh0LmtleX1gKTtcclxuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5TQVZFX0ZJTEVfSU5fRk9STSwgcnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0+c2F2ZSBldmVudCAnICsgdGhpcy5jb250cm9sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2F2ZUZpbGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpYmUpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygndW5zdWJzY3JpYmUgJyArIHRoaXMuY29udHJvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk9wZW5TZWxlY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZS5iYXNpY0ZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdEZpbGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlsZS5jbGVhcigpO1xyXG4gICAgICAgIGlmIChldnQuZXJyb3JGaWxlcyAmJiBldnQuZXJyb3JGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IGAke2V2dC5lcnJvck1lc3NhZ2VzWzBdLnN1bW1hcnl9JHtldnQuZXJyb3JNZXNzYWdlc1swXS5kZXRhaWx9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZXZ0LnN1Y2Nlc3NGaWxlc1swXTtcclxuICAgICAgICAgICAgdGhpcy5zZXRGaWxlTmFtZSh0aGlzLnNlbGVjdGVkRmlsZSA/IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWUgOiBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYXV0b1NhdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNhdmVGaWxlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKCdoYXMtdmFsdWUnKTtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2F2ZUZpbGUoKSB7XHJcbiAgICAgICAgLy8gxJDDoyBsxrB1IGZpbGUuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIMSR4bunIGtleXMuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0tleXMoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoXCJDaMawYSBj4bqldSBow6xuaCBrZXlzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaMawYSBjaOG7jW4gZmlsZS5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2VydmljZUNvZGUnLCB0aGlzLnNlcnZpY2VDb2RlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VudGl0eScsIHRoaXMuZW50aXR5KTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VudGl0eUtleScsIHRoaXMuZW50aXR5S2V5KTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzTXVsdGlwbGUnLCAnZmFsc2UnKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCB0aGlzLnNlbGVjdGVkRmlsZSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXROb3RpKCfEkGFuZyB04bqjaSBmaWxlIGzDqm4uLi4nKTtcclxuICAgICAgICB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jcmVhdGVTZXJ2aWNlRmlsZShmb3JtRGF0YSlcclxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IHRoaXMuc2VsZWN0ZWRGaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgY2jGsGEgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXROb3RpKG1zZykge1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbXNnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWxlTmFtZShmaWxlTmFtZSkge1xyXG4gICAgICAgIGlmIChmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lU2hvcnQgPSBmaWxlTmFtZS5zdWJzdHIoMCwgZmlsZU5hbWUubGVuZ3RoIC0gdGhpcy5leHRlbnNpb24ubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lU2hvcnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29udGV4dE1lbnUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudS50b2dnbGUoZXZ0KTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVGaWxlKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZU9iaiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldEZpbGVOYW1lKG51bGwpO1xyXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZShudWxsKTtcclxuICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5GaWxlKGV2dCkge1xyXG4gICAgICAgIC8vIHNlbmQgdG4gY29tbWFuZFxyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XHJcbiAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLlNjYW47XHJcbiAgICAgICAgLy8gY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcbiAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYW5GaWxlQ29tbWFuZCA9IHtcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgdXBsb2FkRmlsZUFwaTogdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0U2NhbkZpbGVVcGxvYWRFbmRwb2ludChjb3JyZWxhdGlvbklkKSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lOiB0aGlzLmRlZmF1bHRTY2FuRmlsZU5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbW1hbmQuZGF0YSA9IHNjYW5GaWxlQ29tbWFuZDtcclxuXHJcbiAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWApO1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWAsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmogPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmoubmFtZSA9IG9iai5tZXNzYWdlLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmoubmFtZSA9IG9iai5tZXNzYWdlLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlld09ubGluZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKHRoaXMuZmlsZU9iai5uYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmZpbGVJZCA9IHRoaXMuZmlsZUlkO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuZmlsZU5hbWUgPSB0aGlzLmZpbGVPYmoubmFtZTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLnNlcnZpY2UgPSB0aGlzLnNlcnZpY2VDb2RlO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuZW50aXR5ID0gdGhpcy5lbnRpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5lbnRpdHlLZXkgPSB0aGlzLmVudGl0eUtleTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5pc0ZpbGVWZXJzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyh7XHJcbiAgICAgICAgICAgIGZpbGVJZDogdGhpcy5maWxlSWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZChtb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkRmlsZUZyb21Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLmRhdGFNb2RlbC5kcml2ZUZpbGVEaWFsb2cgPSB7XHJcbiAgICAgICAgLy8gICAgIHNob3c6IHRydWVcclxuICAgICAgICAvLyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlVG9Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldEZvbGRlcklkKHRoaXMudXNlcklkKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgdmFyIGNvcHlGaWxlRHRvID0gbmV3IENvcHlGaWxlRHRvKCk7XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLmlkID0gdGhpcy5maWxlSWQ7XHJcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmZpbGVOYW1lID09IFwiXCIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLmZpbGVPYmogIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVPYmoubmFtZTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVOYW1lO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLm93bmVyVHlwZSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIC8vICAgICBjb3B5RmlsZUR0by5mb2xkZXJJZCA9IHJlc3BvbnNlLmRhdGE7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvcHlGaWxlKGNvcHlGaWxlRHRvKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnU2FvIGNow6lwIHTDoGkgbGnhu4d1IHbhu4EgdGjGsCBt4bulYyBjw6EgbmjDom4gdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgLy8gICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93QnVzaW5lc3NFcnJvcihlcnJvci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -20,14 +20,14 @@ export class EntityWorkflowHistoryService extends BaseService {
20
20
  if (service == undefined) {
21
21
  (this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow history');
22
22
  }
23
- this.serviceUri = `${service.endPoint}/EntityWorkflowHistory`;
23
+ this.serviceUri = `${service.endPoint}/${this._moduleConfig.environment.apiVersion}/EntityWorkflowHistory`;
24
24
  }
25
25
  getLastHistory(tableName, filters = []) {
26
26
  const service = this.serviceManagers[tableName];
27
27
  if (service == undefined) {
28
28
  (this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow history');
29
29
  }
30
- const url = `${service.endPoint}/EntityWorkflowHistory/GetLastByFilter`;
30
+ const url = `${service.endPoint}/${this._moduleConfig.environment.apiVersion}/EntityWorkflowHistory/GetLastByFilter`;
31
31
  const gridInfo = {
32
32
  pageInfo: {
33
33
  page: 1,
@@ -49,4 +49,4 @@ EntityWorkflowHistoryService.ctorParameters = () => [
49
49
  { type: Injector },
50
50
  { type: ModuleConfigService }
51
51
  ];
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFVLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3pELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxXQUFXO0lBTXpELFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsb0JBQXlDO1FBRXpDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsd0JBQXdCLENBQUMsQ0FBQztRQVZ4TCxlQUFVLEdBQUcsdUJBQXVCLENBQUM7UUFFN0Isb0JBQWUsR0FFbkIsRUFBRSxDQUFDO1FBT0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUV2RixJQUFJLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBa0IsRUFBRSxPQUFvQjtRQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBaUI7UUFDbEMsTUFBTSxPQUFPLEdBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFO1lBQ3RCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUNsSDtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSx3QkFBd0IsQ0FBQztJQUNsRSxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWlCLEVBQUUsVUFBb0IsRUFBRTtRQUNwRCxNQUFNLE9BQU8sR0FBZ0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RCxJQUFJLE9BQU8sSUFBSSxTQUFTLEVBQUU7WUFDdEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQ2xIO1FBQ0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSx3Q0FBd0MsQ0FBQztRQUN4RSxNQUFNLFFBQVEsR0FBRztZQUNiLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsQ0FBQztnQkFDUCxRQUFRLEVBQUUsQ0FBQzthQUNkO1lBQ0QsT0FBTztZQUNQLEtBQUssRUFBRTtnQkFDSCxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ3pDO1NBQ0osQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7O1lBL0NKLFVBQVU7OztZQVJGLFVBQVU7WUFDRSxRQUFRO1lBRXBCLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcbiAgICBlbnRpdHlOYW1lID0gJ0VudGl0eVdvcmtmbG93SGlzdG9yeSc7XHJcbiAgICByZWFkb25seSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XHJcbiAgICBwcml2YXRlIHNlcnZpY2VNYW5hZ2Vyczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IEJhc2VTZXJ2aWNlXHJcbiAgICB9ID0ge307XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vRW50aXR5V29ya2Zsb3dIaXN0b3J5YCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyU2VydmljZShlbnRpdHlOYW1lOiBzdHJpbmcsIHNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlTWFuYWdlcnNbZW50aXR5TmFtZV0gPSBzZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEN1cnJlbnRTZXJ2aWNlVXJpKHRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZTogQmFzZVNlcnZpY2UgPSB0aGlzLnNlcnZpY2VNYW5hZ2Vyc1t0YWJsZU5hbWVdO1xyXG4gICAgICAgIGlmIChzZXJ2aWNlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAodGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkpLnNob3dXYXJuaW5nKCdC4bqhbiBjaMawYSDEkcSDbmcga8O9IGJhc2Ugc2VydmljZSBjaG8gZW50aXR5IHdvcmtmbG93IGhpc3RvcnknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpID0gYCR7c2VydmljZS5lbmRQb2ludH0vRW50aXR5V29ya2Zsb3dIaXN0b3J5YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXN0SGlzdG9yeSh0YWJsZU5hbWU6IHN0cmluZywgZmlsdGVyczogRmlsdGVyW10gPSBbXSkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2U6IEJhc2VTZXJ2aWNlID0gdGhpcy5zZXJ2aWNlTWFuYWdlcnNbdGFibGVOYW1lXTtcclxuICAgICAgICBpZiAoc2VydmljZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgKHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpKS5zaG93V2FybmluZygnQuG6oW4gY2jGsGEgxJHEg25nIGvDvSBiYXNlIHNlcnZpY2UgY2hvIGVudGl0eSB3b3JrZmxvdyBoaXN0b3J5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3NlcnZpY2UuZW5kUG9pbnR9L0VudGl0eVdvcmtmbG93SGlzdG9yeS9HZXRMYXN0QnlGaWx0ZXJgO1xyXG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgIHNvcnRzOiBbXHJcbiAgICAgICAgICAgICAgICBuZXcgU29ydCh7IGZpZWxkOiAnY3JlYXRlZCcsIGRpcjogMSB9KVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcclxuICAgIH1cclxufVxyXG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFVLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3pELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxXQUFXO0lBTXpELFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsb0JBQXlDO1FBRXpDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsd0JBQXdCLENBQUMsQ0FBQztRQVZ4TCxlQUFVLEdBQUcsdUJBQXVCLENBQUM7UUFFN0Isb0JBQWUsR0FFbkIsRUFBRSxDQUFDO1FBT0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUV2RixJQUFJLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBa0IsRUFBRSxPQUFvQjtRQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBaUI7UUFDbEMsTUFBTSxPQUFPLEdBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFO1lBQ3RCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUNsSDtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsd0JBQXdCLENBQUM7SUFDL0csQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFpQixFQUFFLFVBQW9CLEVBQUU7UUFDcEQsTUFBTSxPQUFPLEdBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFO1lBQ3RCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUNsSDtRQUNELE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLHdDQUF3QyxDQUFDO1FBQ3JILE1BQU0sUUFBUSxHQUFHO1lBQ2IsUUFBUSxFQUFFO2dCQUNOLElBQUksRUFBRSxDQUFDO2dCQUNQLFFBQVEsRUFBRSxDQUFDO2FBQ2Q7WUFDRCxPQUFPO1lBQ1AsS0FBSyxFQUFFO2dCQUNILElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDekM7U0FDSixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7WUEvQ0osVUFBVTs7O1lBUkYsVUFBVTtZQUNFLFFBQVE7WUFFcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlciwgU29ydCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuICAgIGVudGl0eU5hbWUgPSAnRW50aXR5V29ya2Zsb3dIaXN0b3J5JztcclxuICAgIHJlYWRvbmx5IF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcclxuICAgIHByaXZhdGUgc2VydmljZU1hbmFnZXJzOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogQmFzZVNlcnZpY2VcclxuICAgIH0gPSB7fTtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnVzZXJPcmdFbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9FbnRpdHlXb3JrZmxvd0hpc3RvcnlgKTtcclxuICAgICAgICB0aGlzLmVuZFBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnVzZXJPcmdFbmRwb2ludDtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJTZXJ2aWNlKGVudGl0eU5hbWU6IHN0cmluZywgc2VydmljZTogQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2VNYW5hZ2Vyc1tlbnRpdHlOYW1lXSA9IHNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q3VycmVudFNlcnZpY2VVcmkodGFibGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlOiBCYXNlU2VydmljZSA9IHRoaXMuc2VydmljZU1hbmFnZXJzW3RhYmxlTmFtZV07XHJcbiAgICAgICAgaWYgKHNlcnZpY2UgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICh0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKSkuc2hvd1dhcm5pbmcoJ0LhuqFuIGNoxrBhIMSRxINuZyBrw70gYmFzZSBzZXJ2aWNlIGNobyBlbnRpdHkgd29ya2Zsb3cgaGlzdG9yeScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBgJHtzZXJ2aWNlLmVuZFBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9FbnRpdHlXb3JrZmxvd0hpc3RvcnlgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RIaXN0b3J5KHRhYmxlTmFtZTogc3RyaW5nLCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZTogQmFzZVNlcnZpY2UgPSB0aGlzLnNlcnZpY2VNYW5hZ2Vyc1t0YWJsZU5hbWVdO1xyXG4gICAgICAgIGlmIChzZXJ2aWNlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAodGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkpLnNob3dXYXJuaW5nKCdC4bqhbiBjaMawYSDEkcSDbmcga8O9IGJhc2Ugc2VydmljZSBjaG8gZW50aXR5IHdvcmtmbG93IGhpc3RvcnknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7c2VydmljZS5lbmRQb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vRW50aXR5V29ya2Zsb3dIaXN0b3J5L0dldExhc3RCeUZpbHRlcmA7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgc29ydHM6IFtcclxuICAgICAgICAgICAgICAgIG5ldyBTb3J0KHsgZmllbGQ6ICdjcmVhdGVkJywgZGlyOiAxIH0pXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==