@ai-table/grid 0.0.56 → 0.0.57

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 (97) hide show
  1. package/components/cell-editors/abstract-cell-editor.component.d.ts.map +1 -1
  2. package/components/cell-editors/cell-editor.scss +0 -1
  3. package/components/index.d.ts +0 -1
  4. package/components/index.d.ts.map +1 -1
  5. package/constants/editor.d.ts.map +1 -1
  6. package/constants/grid.d.ts +0 -1
  7. package/constants/grid.d.ts.map +1 -1
  8. package/constants/table.d.ts +3 -1
  9. package/constants/table.d.ts.map +1 -1
  10. package/core/types/core.d.ts +13 -13
  11. package/core/types/core.d.ts.map +1 -1
  12. package/dom-grid.component.d.ts.map +1 -1
  13. package/esm2022/components/cell-editors/abstract-cell-editor.component.mjs +2 -4
  14. package/esm2022/components/cell-editors/date/date-editor.component.mjs +5 -5
  15. package/esm2022/components/index.mjs +1 -2
  16. package/esm2022/constants/editor.mjs +3 -4
  17. package/esm2022/constants/grid.mjs +1 -2
  18. package/esm2022/constants/table.mjs +4 -2
  19. package/esm2022/core/constants/field.mjs +2 -2
  20. package/esm2022/core/types/core.mjs +1 -1
  21. package/esm2022/dom-grid.component.mjs +2 -4
  22. package/esm2022/grid-base.component.mjs +5 -28
  23. package/esm2022/grid.component.mjs +17 -52
  24. package/esm2022/renderer/components/cells/attachment.component.mjs +9 -19
  25. package/esm2022/renderer/components/cells/index.mjs +3 -2
  26. package/esm2022/renderer/components/cells/link.component.mjs +3 -5
  27. package/esm2022/renderer/components/cells/progress.component.mjs +268 -0
  28. package/esm2022/renderer/components/cells/rich-text.component.mjs +90 -0
  29. package/esm2022/renderer/drawers/cell-drawer.mjs +3 -3
  30. package/esm2022/utils/cell.mjs +3 -3
  31. package/esm2022/utils/clipboard/copy.mjs +11 -5
  32. package/esm2022/utils/clipboard/paste.mjs +1 -4
  33. package/esm2022/utils/field/model/attachment.mjs +8 -1
  34. package/esm2022/utils/field/model/date.mjs +13 -3
  35. package/esm2022/utils/field/model/field.mjs +1 -2
  36. package/esm2022/utils/field/model/link.mjs +16 -4
  37. package/esm2022/utils/field/model/member.mjs +1 -1
  38. package/esm2022/utils/field/model/number.mjs +11 -8
  39. package/esm2022/utils/field/model/progress.mjs +7 -7
  40. package/esm2022/utils/field/model/rate.mjs +3 -2
  41. package/esm2022/utils/field/model/rich-text.mjs +1 -1
  42. package/esm2022/utils/field/model/select.mjs +1 -1
  43. package/esm2022/utils/field/model/text.mjs +3 -2
  44. package/esm2022/utils/field/operate.mjs +4 -2
  45. package/esm2022/utils/i18n.mjs +3 -3
  46. package/esm2022/utils/index.mjs +2 -1
  47. package/esm2022/utils/match-keywords.mjs +9 -4
  48. package/fesm2022/ai-table-grid.mjs +836 -675
  49. package/fesm2022/ai-table-grid.mjs.map +1 -1
  50. package/grid-base.component.d.ts +2 -3
  51. package/grid-base.component.d.ts.map +1 -1
  52. package/grid.component.d.ts +1 -1
  53. package/grid.component.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/renderer/components/cells/attachment.component.d.ts +0 -3
  56. package/renderer/components/cells/attachment.component.d.ts.map +1 -1
  57. package/renderer/components/cells/index.d.ts +2 -1
  58. package/renderer/components/cells/index.d.ts.map +1 -1
  59. package/renderer/components/cells/link.component.d.ts.map +1 -1
  60. package/renderer/components/cells/progress.component.d.ts +82 -0
  61. package/renderer/components/cells/progress.component.d.ts.map +1 -0
  62. package/renderer/components/cells/{richtext.component.d.ts → rich-text.component.d.ts} +4 -4
  63. package/renderer/components/cells/rich-text.component.d.ts.map +1 -0
  64. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  65. package/utils/clipboard/paste.d.ts.map +1 -1
  66. package/utils/field/model/attachment.d.ts.map +1 -1
  67. package/utils/field/model/date.d.ts +1 -0
  68. package/utils/field/model/date.d.ts.map +1 -1
  69. package/utils/field/model/field.d.ts.map +1 -1
  70. package/utils/field/model/link.d.ts +3 -2
  71. package/utils/field/model/link.d.ts.map +1 -1
  72. package/utils/field/model/member.d.ts +1 -1
  73. package/utils/field/model/member.d.ts.map +1 -1
  74. package/utils/field/model/number.d.ts +5 -4
  75. package/utils/field/model/number.d.ts.map +1 -1
  76. package/utils/field/model/progress.d.ts +4 -4
  77. package/utils/field/model/progress.d.ts.map +1 -1
  78. package/utils/field/model/rate.d.ts +2 -2
  79. package/utils/field/model/rate.d.ts.map +1 -1
  80. package/utils/field/model/rich-text.d.ts +3 -3
  81. package/utils/field/model/rich-text.d.ts.map +1 -1
  82. package/utils/field/model/select.d.ts +1 -1
  83. package/utils/field/model/select.d.ts.map +1 -1
  84. package/utils/field/model/text.d.ts +3 -3
  85. package/utils/field/model/text.d.ts.map +1 -1
  86. package/utils/field/operate.d.ts +1 -1
  87. package/utils/field/operate.d.ts.map +1 -1
  88. package/utils/i18n.d.ts +1 -1
  89. package/utils/index.d.ts +1 -0
  90. package/utils/index.d.ts.map +1 -1
  91. package/utils/match-keywords.d.ts.map +1 -1
  92. package/components/cell-editors/progress/progress-editor.component.d.ts +0 -19
  93. package/components/cell-editors/progress/progress-editor.component.d.ts.map +0 -1
  94. package/components/cell-editors/progress/progress-editor.component.scss +0 -29
  95. package/esm2022/components/cell-editors/progress/progress-editor.component.mjs +0 -72
  96. package/esm2022/renderer/components/cells/richtext.component.mjs +0 -90
  97. package/renderer/components/cells/richtext.component.d.ts.map +0 -1
@@ -13,7 +13,7 @@ import { ThyProgress } from 'ngx-tethys/progress';
13
13
  import { ThyRate } from 'ngx-tethys/rate';
14
14
  import { ThyStopPropagationDirective } from 'ngx-tethys/shared';
15
15
  import { ThyTag } from 'ngx-tethys/tag';
16
- import { ProgressEditorComponent, SelectOptionComponent } from './components';
16
+ import { SelectOptionComponent } from './components';
17
17
  import { AITableFieldMenu } from './components/field-menu/field-menu.component';
18
18
  import { AITableFieldSetting } from './components/field-setting/field-setting.component';
19
19
  import { AITableGridBase } from './grid-base.component';
@@ -68,15 +68,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
68
68
  ThyDropdownDirective,
69
69
  ThyDropdownMenuComponent,
70
70
  ThyCheckboxModule,
71
- ProgressEditorComponent,
72
71
  ThyAvatarModule,
73
72
  NgTemplateOutlet,
74
73
  IsSelectRecordPipe,
75
- ProgressEditorComponent,
76
74
  SelectOptionComponent,
77
75
  UserPipe,
78
76
  SelectSettingPipe,
79
77
  MemberSettingPipe
80
78
  ], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <!-- [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\" -->\n <div\n #cell\n class=\"grid-cell\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: gridData().fieldsSizeMap[field._id] + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n" }]
81
79
  }] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvZG9tLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvZG9tLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JB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b25lbnRPdXRsZXQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUFjdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvYWN0aW9uJztcbmltcG9ydCB7IFRoeUF2YXRhck1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvYXZhdGFyJztcbmltcG9ydCB7IFRoeUNoZWNrYm94TW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9jaGVja2JveCc7XG5pbXBvcnQgeyBUaHlEYXRlUGlja2VyRm9ybWF0UGlwZSB9IGZyb20gJ25neC10ZXRoeXMvZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgVGh5RHJvcGRvd25EaXJlY3RpdmUsIFRoeURyb3Bkb3duTWVudUNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvZHJvcGRvd24nO1xuaW1wb3J0IHsgVGh5RmxleGlibGVUZXh0IH0gZnJvbSAnbmd4LXRldGh5cy9mbGV4aWJsZS10ZXh0JztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5UG9wb3Zlck1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBUaHlQcm9ncmVzcyB9IGZyb20gJ25neC10ZXRoeXMvcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgVGh5UmF0ZSB9IGZyb20gJ25neC10ZXRoeXMvcmF0ZSc7XG5pbXBvcnQgeyBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBUaHlUYWcgfSBmcm9tICduZ3gtdGV0aHlzL3RhZyc7XG5pbXBvcnQgeyBQcm9ncmVzc0VkaXRvckNvbXBvbmVudCwgU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEFJVGFibGVGaWVsZE1lbnUgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGQtbWVudS9maWVsZC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRTZXR0aW5nIH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkLXNldHRpbmcvZmllbGQtc2V0dGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkIH0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkQmFzZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJc1NlbGVjdFJlY29yZFBpcGUsIE1lbWJlclNldHRpbmdQaXBlLCBTZWxlY3RPcHRpb25QaXBlLCBTZWxlY3RPcHRpb25zUGlwZSwgU2VsZWN0U2V0dGluZ1BpcGUsIFVzZXJQaXBlIH0gZnJvbSAnLi9waXBlcy9ncmlkLnBpcGUnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRGaWVsZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZG9tLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb20tZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnYWktdGFibGUtZ3JpZCBhaS10YWJsZS1kb20tZ3JpZCdcbiAgICB9LFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFNlbGVjdE9wdGlvblBpcGUsXG4gICAgICAgIFNlbGVjdE9wdGlvbnNQaXBlLFxuICAgICAgICBUaHlUYWcsXG4gICAgICAgIFRoeVBvcG92ZXJNb2R1bGUsXG4gICAgICAgIFRoeUljb24sXG4gICAgICAgIFRoeVJhdGUsXG4gICAgICAgIFRoeVByb2dyZXNzLFxuICAgICAgICBBSVRhYmxlRmllbGRTZXR0aW5nLFxuICAgICAgICBUaHlEYXRlUGlja2VyRm9ybWF0UGlwZSxcbiAgICAgICAgVGh5RmxleGlibGVUZXh0LFxuICAgICAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsXG4gICAgICAgIEFJVGFibGVGaWVsZE1lbnUsXG4gICAgICAgIFRoeUFjdGlvbixcbiAgICAgICAgVGh5RHJvcGRvd25EaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgICAgICAgVGh5Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIFByb2dyZXNzRWRpdG9yQ29tcG9uZW50LFxuICAgICAgICBUaHlBdmF0YXJNb2R1bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElzU2VsZWN0UmVjb3JkUGlwZSxcbiAgICAgICAgUHJvZ3Jlc3NFZGl0b3JDb21wb25lbnQsXG4gICAgICAgIFNlbGVjdE9wdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVXNlclBpcGUsXG4gICAgICAgIFNlbGVjdFNldHRpbmdQaXBlLFxuICAgICAgICBNZW1iZXJTZXR0aW5nUGlwZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlLCBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVEb21HcmlkIGV4dGVuZHMgQUlUYWJsZUdyaWRCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcbiAgICB9XG5cbiAgICBvcGVuRmllbGRNZW51KGU6IEV2ZW50LCBmaWVsZDogQUlUYWJsZUZpZWxkLCBmaWVsZEFjdGlvbjogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgbW9yZUJ0biA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkhLmNsb3Nlc3QoJy5ncmlkLWZpZWxkLWFjdGlvbicpO1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLm9wZW5GaWVsZE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICBvcmlnaW46IG1vcmVCdG4sXG4gICAgICAgICAgICBlZGl0T3JpZ2luOiBmaWVsZEFjdGlvbixcbiAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgIGZpZWxkTWVudXM6IHRoaXMuZmllbGRNZW51cygpXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkLWhlYWRlciBkLWZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb2x1bW4tY2hlY2tib3ggZ3JpZC1jZWxsIGdyaWQtY2hlY2tib3hcIj5cbiAgICAgICAgPGxhYmVsIHRoeUNoZWNrYm94IHRoeUxhYmVsVGV4dD1cIlwiIFtuZ01vZGVsXT1cImlzU2VsZWN0ZWRBbGwoKVwiIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgkZXZlbnQpXCI+PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICBAZm9yIChmaWVsZCBvZiBncmlkRGF0YSgpLmZpZWxkczsgdHJhY2sgZmllbGQuX2lkKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jZWxsIGdyaWQtZmllbGRcIlxuICAgICAgICAgICAgI2ZpZWxkQWN0aW9uXG4gICAgICAgICAgICBbYXR0ci5maWVsZElkXT1cImZpZWxkLl9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGhpZ2hsaWdodDogYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5oYXMoZmllbGQuX2lkKSB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGdyaWREYXRhKCkuZmllbGRzU2l6ZU1hcFtmaWVsZC5faWRdICsgJ3B4JyB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJmaWVsZC5pY29uIVwiIGNsYXNzPVwibXItMiB0ZXh0LW11dGVkXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBmaWVsZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtZmllbGQtYWN0aW9uXCJcbiAgICAgICAgICAgICAgICB0aHlBY3Rpb25cbiAgICAgICAgICAgICAgICB0aHlJY29uPVwibW9yZS12ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWVsZE1lbnUoJGV2ZW50LCBmaWVsZCwgZmllbGRBY3Rpb24pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbHVtbi1ibGFuayBjdXJzb3ItcG9pbnRlclwiICNncmlkQ29sdW1uQmxhbmsgKGNsaWNrKT1cImFkZEZpZWxkKGdyaWRDb2x1bW5CbGFuaylcIj5cbiAgICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwicGx1c1wiPjwvdGh5LWljb24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJncmlkLWJvZHkgZC1mbGV4XCI+XG4gICAgQGZvciAocmVjb3JkIG9mIGdyaWREYXRhKCkucmVjb3JkczsgdHJhY2sgcmVjb3JkLl9pZDsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXJvdyBkLWZsZXhcIiBbbmdDbGFzc109XCJ7IGhpZ2hsaWdodDogKHJlY29yZC5faWQgfCBpc1NlbGVjdFJlY29yZDogYWlUYWJsZS5zZWxlY3Rpb24oKSkgfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtcm93LWluZGV4IGdyaWQtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKHJlY29yZC5faWQgfCBpc1NlbGVjdFJlY29yZDogYWlUYWJsZS5zZWxlY3Rpb24oKSkgPyAnY2hlY2tlZC1ib3gnIDogJ3VuY2hlY2tlZC1ib3gnXCJcbiAgICAgICAgICAgICAgICAgICAgdGh5Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgdGh5TGFiZWxUZXh0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicmVjb3JkLl9pZCB8IGlzU2VsZWN0UmVjb3JkOiBhaVRhYmxlLnNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0UmVjb3JkKHJlY29yZC5faWQpXCJcbiAgICAgICAgICAgICAgICA+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCIocmVjb3JkLl9pZCB8IGlzU2VsZWN0UmVjb3JkOiBhaVRhYmxlLnNlbGVjdGlvbigpKSA/ICdncmlkLXJvdy1uby1udW1iZXInIDogJ2dyaWQtcm93LW51bWJlcidcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaW5kZXggKyAxIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAZm9yIChmaWVsZCBvZiBncmlkRGF0YSgpLmZpZWxkczsgdHJhY2sgZmllbGQuX2lkKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5oYXMocmVjb3JkLl9pZCkgfHwgYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5oYXMoZmllbGQuX2lkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuZ2V0KHJlY29yZC5faWQpPy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5faWQpXG4gICAgICAgICAgICAgICAgICAgIH1cIiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudHlwZV09XCJbZmllbGQudHlwZV1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5maWVsZElkXT1cIltmaWVsZC5faWRdXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucmVjb3JkSWRdPVwiW3JlY29yZC5faWRdXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZ3JpZERhdGEoKS5maWVsZHNTaXplTWFwW2ZpZWxkLl9pZF0gKyAncHgnIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUuc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBmaWVsZFZhbHVlID0gcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgc2V0dGluZ3MgPSBmaWVsZC5zZXR0aW5ncyEgfCBzZWxlY3RTZXR0aW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgb3B0aW9ucyA9IHNldHRpbmdzWydvcHRpb25zJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBvcHRpb25TdHlsZSA9IHNldHRpbmdzWydvcHRpb25fc3R5bGUnXSB8fCBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgaXNUYWdTdHlsZSA9IG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghc2V0dGluZ3NbJ2lzX211bHRpcGxlJ10gJiYgZmllbGRWYWx1ZSB8IHNlbGVjdE9wdGlvbjogb3B0aW9uczsgYXMgc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1RhZ1N0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0LW9wdGlvbiBjbGFzcz1cIm1iLTEgbXItMVwiIFtmaWVsZF09XCJmaWVsZFwiIFtkaXNwbGF5T3B0aW9uXT1cInNlbGVjdGVkT3B0aW9uXCI+PC9zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGh5VGFnIGNsYXNzPVwibWItMSBtci0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdC1vcHRpb24gW2ZpZWxkXT1cImZpZWxkXCIgW2Rpc3BsYXlPcHRpb25dPVwic2VsZWN0ZWRPcHRpb25cIj48L3NlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IG1heFNob3dDb3VudCA9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWVsZFZhbHVlIHwgc2VsZWN0T3B0aW9uczogb3B0aW9uczsgYXMgc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHNlbGVjdGVkT3B0aW9uczsgdHJhY2sgb3B0aW9uIS5faWQ7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaSArIDEgPD0gbWF4U2hvd0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzVGFnU3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTEgbXItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5T3B0aW9uXT1cIm9wdGlvbiFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRoeVRhZyBjbGFzcz1cIm1iLTEgbXItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0LW9wdGlvbiBbZmllbGRdPVwiZmllbGRcIiBbZGlzcGxheU9wdGlvbl09XCJvcHRpb24hXCI+PC9zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBzZWxlY3RlZExlbmd0aCA9IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkT3B0aW9ucyAmJiBtYXhTaG93Q291bnQgPCBzZWxlY3RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHNoYXBlID0gaXNUYWdTdHlsZSA/ICdwaWxsJyA6ICdyZWN0YW5nbGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGlzSGlkZGVuID0gbWF4U2hvd0NvdW50ID49IHNlbGVjdGVkTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktdGFnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tdWx0aS1wcm9wZXJ0eS12YWx1ZS1oaWRkZW5dPVwiaXNIaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVNoYXBlXT1cInNoYXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+ICt7eyBzZWxlY3RlZExlbmd0aCAtIG1heFNob3dDb3VudCB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGh5LXRhZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0udGltZXN0YW1wIHwgdGh5RGF0ZVBpY2tlckZvcm1hdCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtYmxvY2sgdXNlci1zZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHRoeURhdGVQaWNrZXJGb3JtYXQ6ICd5eXl5LU1NLWRkIEhIOm1tJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB1c2VyLXNlbGVjdC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgdGh5RGF0ZVBpY2tlckZvcm1hdDogJ3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLnJhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LXJhdGUgW25nTW9kZWxdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdXCI+PC90aHktcmF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLmxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlGbGV4aWJsZVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVRvb2x0aXBDb250ZW50XT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LnRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlWYWx1ZV09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlTaXplXT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8uY29uZmlnPy5zaXplIHx8ICdtZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5TWF4XT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8uY29uZmlnPy5tYXggfHwgMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVR5cGVdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/LnByb2dyZXNzVHlwZSB8fCAnc3VjY2VzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8fCAwIH19e3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/LnN1ZmZpeCB8fCAnJScgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGh5LXByb2dyZXNzPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUubWVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBzZXR0aW5ncyA9IGZpZWxkLnNldHRpbmdzISB8IG1lbWJlclNldHRpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFzZXR0aW5ncyFbJ2lzX211bHRpcGxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCByZWNvcmRWYWx1ZXMgPSByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfCB1c2VyOiBhaVJlZmVyZW5jZXMoKSE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyZWNvcmRWYWx1ZXMgJiYgcmVjb3JkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5TmFtZV09XCJyZWNvcmRWYWx1ZXNbMF0uZGlzcGxheV9uYW1lIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVNyY109XCJyZWNvcmRWYWx1ZXNbMF0uYXZhdGFyIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaG93TmFtZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGh5LWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHJlY29yZFZhbHVlcyA9IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHVzZXI6IGFpUmVmZXJlbmNlcygpITtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LWF2YXRhci1saXN0IHRoeUF2YXRhclNpemU9XCJ4c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiByZWNvcmRWYWx1ZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktYXZhdGFyIFt0aHlOYW1lXT1cIml0ZW0uZGlzcGxheV9uYW1lIVwiIFt0aHlTcmNdPVwiaXRlbS5hdmF0YXIhXCI+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoeS1hdmF0YXItbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHJlY29yZFZhbHVlcyA9IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHVzZXI6IGFpUmVmZXJlbmNlcygpITtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocmVjb3JkVmFsdWVzICYmIHJlY29yZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlOYW1lXT1cInJlY29yZFZhbHVlc1swXS5kaXNwbGF5X25hbWUhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlTcmNdPVwicmVjb3JkVmFsdWVzWzBdLmF2YXRhciFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNob3dOYW1lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RoeS1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCByZWNvcmRWYWx1ZXMgPSByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfCB1c2VyOiBhaVJlZmVyZW5jZXMoKSE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJlY29yZFZhbHVlcyAmJiByZWNvcmRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5TmFtZV09XCJyZWNvcmRWYWx1ZXNbMF0uZGlzcGxheV9uYW1lIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U3JjXT1cInJlY29yZFZhbHVlc1swXS5hdmF0YXIhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaG93TmFtZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj4ge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvZmlsbC1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbHVtbi1ibGFua1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImdyaWQtcm93LWluc2VydCBncmlkLXJvdyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRSZWNvcmQoKVwiPlxuICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJwbHVzXCI+PC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICNhY3RpdmVCb3JkZXIgY2xhc3M9XCJhY3RpdmUtYm9yZGVyXCI+PC9kaXY+XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvZG9tLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvZG9tLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUksT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQXlDM0UsTUFBTSxPQUFPLGNBQWUsU0FBUSxlQUFlO0lBQ3RDLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBUSxFQUFFLEtBQW1CLEVBQUUsV0FBd0I7UUFDakUsTUFBTSxPQUFPLEdBQUksQ0FBQyxDQUFDLE1BQXVCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JELE1BQU0sRUFBRSxPQUFPO1lBQ2YsVUFBVSxFQUFFLFdBQVc7WUFDdkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQ2hDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBZFEsY0FBYzttR0FBZCxjQUFjLDZIQUZaLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMsaURDOUQ5Riw2aVlBMk5BLDRDRHpMUSxPQUFPLG1GQUVQLFlBQVksbUhBQ1osV0FBVywwVkFDWCxnQkFBZ0IsZ0RBQ2hCLGlCQUFpQixzREFDakIsTUFBTSwrSUFDTixnQkFBZ0IsK0JBQ2hCLE9BQU8sc01BQ1AsT0FBTyw4TEFDUCxXQUFXLHFMQUVYLHVCQUF1Qiw0REFDdkIsZUFBZSxtT0FDZiwyQkFBMkIsaUdBRTNCLFNBQVMsK0xBR1QsaUJBQWlCLGdLQUNqQixlQUFlLDRaQUVmLGtCQUFrQix1REFDbEIscUJBQXFCLHlGQUNyQixRQUFRLHdDQUNSLGlCQUFpQixpREFDakIsaUJBQWlCOzs0RkFJWixjQUFjO2tCQXZDMUIsU0FBUzsrQkFDSSxtQkFBbUIsY0FFakIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxpQ0FBaUM7cUJBQzNDLFdBQ1E7d0JBQ0wsT0FBTzt3QkFDUCxpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsTUFBTTt3QkFDTixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLDJCQUEyQjt3QkFDM0IsZ0JBQWdCO3dCQUNoQixTQUFTO3dCQUNULG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLGlCQUFpQjtxQkFDcEIsYUFDVSxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0NsYXNzLCBOZ0NvbXBvbmVudE91dGxldCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5QWN0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5QXZhdGFyTW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9hdmF0YXInO1xuaW1wb3J0IHsgVGh5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2NoZWNrYm94JztcbmltcG9ydCB7IFRoeURhdGVQaWNrZXJGb3JtYXRQaXBlIH0gZnJvbSAnbmd4LXRldGh5cy9kYXRlLXBpY2tlcic7XG5pbXBvcnQgeyBUaHlEcm9wZG93bkRpcmVjdGl2ZSwgVGh5RHJvcGRvd25NZW51Q29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9kcm9wZG93bic7XG5pbXBvcnQgeyBUaHlGbGV4aWJsZVRleHQgfSBmcm9tICduZ3gtdGV0aHlzL2ZsZXhpYmxlLXRleHQnO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBUaHlQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IFRoeVByb2dyZXNzIH0gZnJvbSAnbmd4LXRldGh5cy9wcm9ncmVzcyc7XG5pbXBvcnQgeyBUaHlSYXRlIH0gZnJvbSAnbmd4LXRldGh5cy9yYXRlJztcbmltcG9ydCB7IFRoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeVRhZyB9IGZyb20gJ25neC10ZXRoeXMvdGFnJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRNZW51IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkLW1lbnUvZmllbGQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkU2V0dGluZyB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZC1zZXR0aW5nL2ZpZWxkLXNldHRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IEFJVGFibGVGaWVsZCB9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEJhc2UgfSBmcm9tICcuL2dyaWQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSXNTZWxlY3RSZWNvcmRQaXBlLCBNZW1iZXJTZXR0aW5nUGlwZSwgU2VsZWN0T3B0aW9uUGlwZSwgU2VsZWN0T3B0aW9uc1BpcGUsIFNlbGVjdFNldHRpbmdQaXBlLCBVc2VyUGlwZSB9IGZyb20gJy4vcGlwZXMvZ3JpZC5waXBlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWRvbS1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZG9tLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2FpLXRhYmxlLWdyaWQgYWktdGFibGUtZG9tLWdyaWQnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBTZWxlY3RPcHRpb25QaXBlLFxuICAgICAgICBTZWxlY3RPcHRpb25zUGlwZSxcbiAgICAgICAgVGh5VGFnLFxuICAgICAgICBUaHlQb3BvdmVyTW9kdWxlLFxuICAgICAgICBUaHlJY29uLFxuICAgICAgICBUaHlSYXRlLFxuICAgICAgICBUaHlQcm9ncmVzcyxcbiAgICAgICAgQUlUYWJsZUZpZWxkU2V0dGluZyxcbiAgICAgICAgVGh5RGF0ZVBpY2tlckZvcm1hdFBpcGUsXG4gICAgICAgIFRoeUZsZXhpYmxlVGV4dCxcbiAgICAgICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlLFxuICAgICAgICBBSVRhYmxlRmllbGRNZW51LFxuICAgICAgICBUaHlBY3Rpb24sXG4gICAgICAgIFRoeURyb3Bkb3duRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVDb21wb25lbnQsXG4gICAgICAgIFRoeUNoZWNrYm94TW9kdWxlLFxuICAgICAgICBUaHlBdmF0YXJNb2R1bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElzU2VsZWN0UmVjb3JkUGlwZSxcbiAgICAgICAgU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBVc2VyUGlwZSxcbiAgICAgICAgU2VsZWN0U2V0dGluZ1BpcGUsXG4gICAgICAgIE1lbWJlclNldHRpbmdQaXBlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtBSVRhYmxlR3JpZEV2ZW50U2VydmljZSwgQUlUYWJsZUdyaWRGaWVsZFNlcnZpY2UsIEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZURvbUdyaWQgZXh0ZW5kcyBBSVRhYmxlR3JpZEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpO1xuICAgIH1cblxuICAgIG9wZW5GaWVsZE1lbnUoZTogRXZlbnQsIGZpZWxkOiBBSVRhYmxlRmllbGQsIGZpZWxkQWN0aW9uOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCBtb3JlQnRuID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSEuY2xvc2VzdCgnLmdyaWQtZmllbGQtYWN0aW9uJyk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2Uub3BlbkZpZWxkTWVudSh0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgIG9yaWdpbjogbW9yZUJ0bixcbiAgICAgICAgICAgIGVkaXRPcmlnaW46IGZpZWxkQWN0aW9uLFxuICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgZmllbGRNZW51czogdGhpcy5maWVsZE1lbnVzKClcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWQtaGVhZGVyIGQtZmxleFwiPlxuICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbHVtbi1jaGVja2JveCBncmlkLWNlbGwgZ3JpZC1jaGVja2JveFwiPlxuICAgICAgICA8bGFiZWwgdGh5Q2hlY2tib3ggdGh5TGFiZWxUZXh0PVwiXCIgW25nTW9kZWxdPVwiaXNTZWxlY3RlZEFsbCgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIj48L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIEBmb3IgKGZpZWxkIG9mIGdyaWREYXRhKCkuZmllbGRzOyB0cmFjayBmaWVsZC5faWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNlbGwgZ3JpZC1maWVsZFwiXG4gICAgICAgICAgICAjZmllbGRBY3Rpb25cbiAgICAgICAgICAgIFthdHRyLmZpZWxkSWRdPVwiZmllbGQuX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgaGlnaGxpZ2h0OiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkRmllbGRzLmhhcyhmaWVsZC5faWQpIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZ3JpZERhdGEoKS5maWVsZHNTaXplTWFwW2ZpZWxkLl9pZF0gKyAncHgnIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cImZpZWxkLmljb24hXCIgY2xhc3M9XCJtci0yIHRleHQtbXV0ZWRcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpZWxkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1maWVsZC1hY3Rpb25cIlxuICAgICAgICAgICAgICAgIHRoeUFjdGlvblxuICAgICAgICAgICAgICAgIHRoeUljb249XCJtb3JlLXZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkTWVudSgkZXZlbnQsIGZpZWxkLCBmaWVsZEFjdGlvbilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImdyaWQtY29sdW1uLWJsYW5rIGN1cnNvci1wb2ludGVyXCIgI2dyaWRDb2x1bW5CbGFuayAoY2xpY2spPVwiYWRkRmllbGQoZ3JpZENvbHVtbkJsYW5rKVwiPlxuICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJwbHVzXCI+PC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImdyaWQtYm9keSBkLWZsZXhcIj5cbiAgICBAZm9yIChyZWNvcmQgb2YgZ3JpZERhdGEoKS5yZWNvcmRzOyB0cmFjayByZWNvcmQuX2lkOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtcm93IGQtZmxleFwiIFtuZ0NsYXNzXT1cInsgaGlnaGxpZ2h0OiAocmVjb3JkLl9pZCB8IGlzU2VsZWN0UmVjb3JkOiBhaVRhYmxlLnNlbGVjdGlvbigpKSB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1yb3ctaW5kZXggZ3JpZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIocmVjb3JkLl9pZCB8IGlzU2VsZWN0UmVjb3JkOiBhaVRhYmxlLnNlbGVjdGlvbigpKSA/ICdjaGVja2VkLWJveCcgOiAndW5jaGVja2VkLWJveCdcIlxuICAgICAgICAgICAgICAgICAgICB0aHlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICB0aHlMYWJlbFRleHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyZWNvcmQuX2lkIHwgaXNTZWxlY3RSZWNvcmQ6IGFpVGFibGUuc2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RSZWNvcmQocmVjb3JkLl9pZClcIlxuICAgICAgICAgICAgICAgID48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIihyZWNvcmQuX2lkIHwgaXNTZWxlY3RSZWNvcmQ6IGFpVGFibGUuc2VsZWN0aW9uKCkpID8gJ2dyaWQtcm93LW5vLW51bWJlcicgOiAnZ3JpZC1yb3ctbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpbmRleCArIDEgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGdyaWREYXRhKCkuZmllbGRzOyB0cmFjayBmaWVsZC5faWQpIHtcbiAgICAgICAgICAgICAgICA8IS0tIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLmhhcyhyZWNvcmQuX2lkKSB8fCBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkRmllbGRzLmhhcyhmaWVsZC5faWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5nZXQocmVjb3JkLl9pZCk/Lmhhc093blByb3BlcnR5KGZpZWxkLl9pZClcbiAgICAgICAgICAgICAgICAgICAgfVwiIC0tPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgI2NlbGxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50eXBlXT1cIltmaWVsZC50eXBlXVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkSWRdPVwiW2ZpZWxkLl9pZF1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWNvcmRJZF09XCJbcmVjb3JkLl9pZF1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBncmlkRGF0YSgpLmZpZWxkc1NpemVNYXBbZmllbGQuX2lkXSArICdweCcgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGZpZWxkVmFsdWUgPSByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBzZXR0aW5ncyA9IGZpZWxkLnNldHRpbmdzISB8IHNlbGVjdFNldHRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBvcHRpb25zID0gc2V0dGluZ3NbJ29wdGlvbnMnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IG9wdGlvblN0eWxlID0gc2V0dGluZ3NbJ29wdGlvbl9zdHlsZSddIHx8IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBpc1RhZ1N0eWxlID0gb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFzZXR0aW5nc1snaXNfbXVsdGlwbGUnXSAmJiBmaWVsZFZhbHVlIHwgc2VsZWN0T3B0aW9uOiBvcHRpb25zOyBhcyBzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzVGFnU3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qtb3B0aW9uIGNsYXNzPVwibWItMSBtci0xXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Rpc3BsYXlPcHRpb25dPVwic2VsZWN0ZWRPcHRpb25cIj48L3NlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aHlUYWcgY2xhc3M9XCJtYi0xIG1yLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0LW9wdGlvbiBbZmllbGRdPVwiZmllbGRcIiBbZGlzcGxheU9wdGlvbl09XCJzZWxlY3RlZE9wdGlvblwiPjwvc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgbWF4U2hvd0NvdW50ID0gMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkVmFsdWUgfCBzZWxlY3RPcHRpb25zOiBvcHRpb25zOyBhcyBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyB0cmFjayBvcHRpb24hLl9pZDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpICsgMSA8PSBtYXhTaG93Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNUYWdTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBtci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlPcHRpb25dPVwib3B0aW9uIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGh5VGFnIGNsYXNzPVwibWItMSBtci0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qtb3B0aW9uIFtmaWVsZF09XCJmaWVsZFwiIFtkaXNwbGF5T3B0aW9uXT1cIm9wdGlvbiFcIj48L3NlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHNlbGVjdGVkTGVuZ3RoID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRPcHRpb25zICYmIG1heFNob3dDb3VudCA8IHNlbGVjdGVkTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgc2hhcGUgPSBpc1RhZ1N0eWxlID8gJ3BpbGwnIDogJ3JlY3RhbmdsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgaXNIaWRkZW4gPSBtYXhTaG93Q291bnQgPj0gc2VsZWN0ZWRMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS10YWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm11bHRpLXByb3BlcnR5LXZhbHVlLWhpZGRlbl09XCJpc0hpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U2hhcGVdPVwic2hhcGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj4gK3t7IHNlbGVjdGVkTGVuZ3RoIC0gbWF4U2hvd0NvdW50IH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aHktdGFnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXS50aW1lc3RhbXAgfCB0aHlEYXRlUGlja2VyRm9ybWF0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB1c2VyLXNlbGVjdC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgdGh5RGF0ZVBpY2tlckZvcm1hdDogJ3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRBdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWJsb2NrIHVzZXItc2VsZWN0LW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfCB0aHlEYXRlUGlja2VyRm9ybWF0OiAneXl5eS1NTS1kZCBISDptbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUucmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktcmF0ZSBbbmdNb2RlbF09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF1cIj48L3RoeS1yYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUubGluaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeUZsZXhpYmxlVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5VG9vbHRpcENvbnRlbnRdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy50ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8udGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1wcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVZhbHVlXT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVNpemVdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/LnNpemUgfHwgJ21kJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlNYXhdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/Lm1heCB8fCAxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5VHlwZV09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LmNvbmZpZz8ucHJvZ3Jlc3NUeXBlIHx8ICdzdWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHx8IDAgfX17eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LmNvbmZpZz8uc3VmZml4IHx8ICclJyB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aHktcHJvZ3Jlc3M+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MhIHwgbWVtYmVyU2V0dGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXNldHRpbmdzIVsnaXNfbXVsdGlwbGUnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHJlY29yZFZhbHVlcyA9IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHVzZXI6IGFpUmVmZXJlbmNlcygpITtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJlY29yZFZhbHVlcyAmJiByZWNvcmRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LWF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlOYW1lXT1cInJlY29yZFZhbHVlc1swXS5kaXNwbGF5X25hbWUhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U3JjXT1cInJlY29yZFZhbHVlc1swXS5hdmF0YXIhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNob3dOYW1lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgcmVjb3JkVmFsdWVzID0gcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgdXNlcjogYWlSZWZlcmVuY2VzKCkhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktYXZhdGFyLWxpc3QgdGh5QXZhdGFyU2l6ZT1cInhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJlY29yZFZhbHVlczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXIgW3RoeU5hbWVdPVwiaXRlbS5kaXNwbGF5X25hbWUhXCIgW3RoeVNyY109XCJpdGVtLmF2YXRhciFcIj48L3RoeS1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGh5LWF2YXRhci1saXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgcmVjb3JkVmFsdWVzID0gcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgdXNlcjogYWlSZWZlcmVuY2VzKCkhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyZWNvcmRWYWx1ZXMgJiYgcmVjb3JkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LWF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeU5hbWVdPVwicmVjb3JkVmFsdWVzWzBdLmRpc3BsYXlfbmFtZSFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVNyY109XCJyZWNvcmRWYWx1ZXNbMF0uYXZhdGFyIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2hvd05hbWU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGh5LWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IHJlY29yZFZhbHVlcyA9IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHVzZXI6IGFpUmVmZXJlbmNlcygpITtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocmVjb3JkVmFsdWVzICYmIHJlY29yZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlOYW1lXT1cInJlY29yZFZhbHVlc1swXS5kaXNwbGF5X25hbWUhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlTcmNdPVwicmVjb3JkVmFsdWVzWzBdLmF2YXRhciFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNob3dOYW1lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RoeS1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPiB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dG9maWxsLWNvbnRhaW5lclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29sdW1uLWJsYW5rXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1yb3ctaW5zZXJ0IGdyaWQtcm93IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZFJlY29yZCgpXCI+XG4gICAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cInBsdXNcIj48L3RoeS1pY29uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgI2FjdGl2ZUJvcmRlciBjbGFzcz1cImFjdGl2ZS1ib3JkZXJcIj48L2Rpdj5cbiJdfQ==
@@ -1,7 +1,7 @@
1
- import { ChangeDetectionStrategy, Component, computed, DestroyRef, ElementRef, inject, input, model, NgZone, output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, DestroyRef, ElementRef, inject, input, model, NgZone, output, signal } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { mergeWith } from 'rxjs';
4
- import { DBL_CLICK_EDIT_TYPE, MOUSEOVER_EDIT_TYPE } from './constants';
4
+ import { DBL_CLICK_EDIT_TYPE } from './constants';
5
5
  import { AITableFieldType, AITableSelectOptionStyle, createAITable, createDefaultField } from './core';
6
6
  import { AITableGridEventService } from './services/event.service';
7
7
  import { AI_TABLE_GRID_FIELD_SERVICE_MAP, AITableGridFieldService } from './services/field.service';
@@ -21,6 +21,7 @@ export class AITableGridBase {
21
21
  this.aiBuildRenderDataFn = input();
22
22
  this.aiGetI18nTextByKey = input();
23
23
  this.aiKeywords = input();
24
+ this.refreshRender = signal(0);
24
25
  this.AITableFieldType = AITableFieldType;
25
26
  this.AITableSelectOptionStyle = AITableSelectOptionStyle;
26
27
  this.isSelectedAll = computed(() => {
@@ -44,6 +45,7 @@ export class AITableGridBase {
44
45
  return [];
45
46
  });
46
47
  this.gridData = computed(() => {
48
+ this.refreshRender();
47
49
  if (this.aiBuildRenderDataFn && this.aiBuildRenderDataFn() && this.aiTable) {
48
50
  return this.aiBuildRenderDataFn()(this.aiTable);
49
51
  }
@@ -123,12 +125,6 @@ export class AITableGridBase {
123
125
  .subscribe((event) => {
124
126
  this.aiTableGridSelectionService.updateSelect(event);
125
127
  });
126
- this.aiTableGridEventService.mouseoverEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
127
- this.mouseoverHandle(event);
128
- });
129
- this.aiTableGridEventService.globalMouseoverEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
130
- this.closeHoverCellEditor(event);
131
- });
132
128
  });
133
129
  }
134
130
  dblClick(event) {
@@ -138,25 +134,6 @@ export class AITableGridBase {
138
134
  this.aiTableGridEventService.openEdit(cellDom);
139
135
  }
140
136
  }
141
- mouseoverHandle(event) {
142
- if (this.mouseoverRef) {
143
- this.mouseoverRef?.close();
144
- }
145
- const cellDom = event.target.closest('.grid-cell');
146
- const type = cellDom && cellDom.getAttribute('type');
147
- if (type && MOUSEOVER_EDIT_TYPE.includes(type)) {
148
- this.mouseoverRef = this.aiTableGridEventService.openEdit(cellDom);
149
- }
150
- }
151
- closeHoverCellEditor(e) {
152
- if (this.mouseoverRef) {
153
- const hasGrid = e.target && e.target.closest('.ai-table-grid');
154
- const hasCellEditor = e.target && e.target.closest('.grid-cell-editor');
155
- if (!hasGrid && !hasCellEditor) {
156
- this.mouseoverRef.close();
157
- }
158
- }
159
- }
160
137
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableGridBase, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
161
138
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: AITableGridBase, isStandalone: true, selector: "ai-table-grid-base", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, transformFunction: null }, aiFieldsSizeMap: { classPropertyName: "aiFieldsSizeMap", publicName: "aiFieldsSizeMap", isSignal: true, isRequired: true, transformFunction: null }, aiContextMenuItems: { classPropertyName: "aiContextMenuItems", publicName: "aiContextMenuItems", isSignal: true, isRequired: false, transformFunction: null }, aiFieldConfig: { classPropertyName: "aiFieldConfig", publicName: "aiFieldConfig", isSignal: true, isRequired: false, transformFunction: null }, aiReadonly: { classPropertyName: "aiReadonly", publicName: "aiReadonly", isSignal: true, isRequired: false, transformFunction: null }, aiRowDragDisabled: { classPropertyName: "aiRowDragDisabled", publicName: "aiRowDragDisabled", isSignal: true, isRequired: false, transformFunction: null }, aiPlugins: { classPropertyName: "aiPlugins", publicName: "aiPlugins", isSignal: true, isRequired: false, transformFunction: null }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: true, transformFunction: null }, aiBuildRenderDataFn: { classPropertyName: "aiBuildRenderDataFn", publicName: "aiBuildRenderDataFn", isSignal: true, isRequired: false, transformFunction: null }, aiGetI18nTextByKey: { classPropertyName: "aiGetI18nTextByKey", publicName: "aiGetI18nTextByKey", isSignal: true, isRequired: false, transformFunction: null }, aiKeywords: { classPropertyName: "aiKeywords", publicName: "aiKeywords", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", aiFieldsSizeMap: "aiFieldsSizeMapChange", aiTableInitialized: "aiTableInitialized", aiAddRecord: "aiAddRecord", aiAddField: "aiAddField", aiMoveField: "aiMoveField", aiUpdateFieldValue: "aiUpdateFieldValue", aiSetField: "aiSetField", aiSetFieldWidth: "aiSetFieldWidth", aiMoveRecords: "aiMoveRecords", aiClick: "aiClick", aiDbClick: "aiDbClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
162
139
  }
@@ -169,4 +146,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
169
146
  changeDetection: ChangeDetectionStrategy.OnPush
170
147
  }]
171
148
  }] });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RSxPQUFPLEVBT0gsZ0JBQWdCLEVBRWhCLHdCQUF3QixFQUV4QixhQUFhLEVBQ2Isa0JBQWtCLEVBS3JCLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVkzRSxNQUFNLE9BQU8sZUFBZTtJQU41QjtRQU9JLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFrQixDQUFDO1FBRTdDLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpQixDQUFDO1FBRTNDLG9CQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBd0IsQ0FBQztRQUV6RCx1QkFBa0IsR0FBRyxLQUFLLEVBQWtELENBQUM7UUFFN0Usa0JBQWEsR0FBRyxLQUFLLEVBQWlCLENBQUM7UUFFdkMsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFL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QUFNLElBQUssQ0FBQyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSyxDQUFDLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDOytHQTlMUSxlQUFlO21HQUFmLGVBQWUsNnJFQUpkLEVBQUU7OzRGQUlILGVBQWU7a0JBTjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgbW9kZWwsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgU2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBtZXJnZVdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERCTF9DTElDS19FRElUX1RZUEUsIE1PVVNFT1ZFUl9FRElUX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJUGx1Z2luLFxuICAgIEFJVGFibGUsXG4gICAgQUlUYWJsZUZpZWxkLFxuICAgIEFJVGFibGVGaWVsZHMsXG4gICAgQUlUYWJsZUZpZWxkVHlwZSxcbiAgICBBSVRhYmxlUmVjb3JkcyxcbiAgICBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsXG4gICAgQUlUYWJsZVZhbHVlLFxuICAgIGNyZWF0ZUFJVGFibGUsXG4gICAgY3JlYXRlRGVmYXVsdEZpZWxkLFxuICAgIE1vdmVGaWVsZE9wdGlvbnMsXG4gICAgTW92ZVJlY29yZE9wdGlvbnMsXG4gICAgU2V0RmllbGRXaWR0aE9wdGlvbnMsXG4gICAgVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnNcbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJX1RBQkxFX0dSSURfRklFTERfU0VSVklDRV9NQVAsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlGaWVsZENvbmZpZywgQUlUYWJsZUZpZWxkTWVudUl0ZW0sIEFJVGFibGVDb250ZXh0TWVudUl0ZW0sIEFJVGFibGVSZWZlcmVuY2VzLCBBSVRhYmxlRmllbGRzU2l6ZU1hcCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkU2V0dGluZyB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBLb0V2ZW50T2JqZWN0T3V0cHV0IH0gZnJvbSAnLi9hbmd1bGFyLWtvbnZhJztcbmltcG9ydCB7IEFJVGFibGVHcmlkSTE4bktleSB9IGZyb20gJy4vdXRpbHMvaTE4bic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZ3JpZC1iYXNlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGFpUmVjb3JkcyA9IG1vZGVsLnJlcXVpcmVkPEFJVGFibGVSZWNvcmRzPigpO1xuXG4gICAgYWlGaWVsZHMgPSBtb2RlbC5yZXF1aXJlZDxBSVRhYmxlRmllbGRzPigpO1xuXG4gICAgYWlGaWVsZHNTaXplTWFwID0gbW9kZWwucmVxdWlyZWQ8QUlUYWJsZUZpZWxkc1NpemVNYXA+KCk7XG5cbiAgICBhaUNvbnRleHRNZW51SXRlbXMgPSBpbnB1dDwoYWlUYWJsZTogQUlUYWJsZSkgPT4gQUlUYWJsZUNvbnRleHRNZW51SXRlbVtdPigpO1xuXG4gICAgYWlGaWVsZENvbmZpZyA9IGlucHV0PEFJRmllbGRDb25maWc+KCk7XG5cbiAgICBhaVJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgYWlSb3dEcmFnRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBhaVBsdWdpbnMgPSBpbnB1dDxBSVBsdWdpbltdPigpO1xuXG4gICAgYWlSZWZlcmVuY2VzID0gaW5wdXQucmVxdWlyZWQ8QUlUYWJsZVJlZmVyZW5jZXM+KCk7XG5cbiAgICBhaUJ1aWxkUmVuZGVyRGF0YUZuID0gaW5wdXQ8KGFpVGFibGU6IEFJVGFibGUpID0+IEFJVGFibGVWYWx1ZT4oKTtcblxuICAgIGFpR2V0STE4blRleHRCeUtleSA9IGlucHV0PChrZXk6IEFJVGFibGVHcmlkSTE4bktleSB8IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgYWlLZXl3b3JkcyA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIEFJVGFibGVGaWVsZFR5cGUgPSBBSVRhYmxlRmllbGRUeXBlO1xuXG4gICAgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlID0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlO1xuXG4gICAgYWlUYWJsZSE6IEFJVGFibGU7XG5cbiAgICBpc1NlbGVjdGVkQWxsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5zaXplID09PSB0aGlzLmFpUmVjb3JkcygpLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGFpVGFibGVJbml0aWFsaXplZCA9IG91dHB1dDxBSVRhYmxlPigpO1xuXG4gICAgYWlBZGRSZWNvcmQgPSBvdXRwdXQ8QWRkUmVjb3JkT3B0aW9ucz4oKTtcblxuICAgIGFpQWRkRmllbGQgPSBvdXRwdXQ8QWRkRmllbGRPcHRpb25zPigpO1xuXG4gICAgYWlNb3ZlRmllbGQgPSBvdXRwdXQ8TW92ZUZpZWxkT3B0aW9ucz4oKTtcblxuICAgIGFpVXBkYXRlRmllbGRWYWx1ZSA9IG91dHB1dDxVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucz4oKTtcblxuICAgIGFpU2V0RmllbGQgPSBvdXRwdXQ8QUlUYWJsZUZpZWxkPigpO1xuXG4gICAgYWlTZXRGaWVsZFdpZHRoID0gb3V0cHV0PFNldEZpZWxkV2lkdGhPcHRpb25zPigpO1xuXG4gICAgYWlNb3ZlUmVjb3JkcyA9IG91dHB1dDxNb3ZlUmVjb3JkT3B0aW9ucz4oKTtcblxuICAgIGFpQ2xpY2sgPSBvdXRwdXQ8S29FdmVudE9iamVjdE91dHB1dDxNb3VzZUV2ZW50Pj4oKTtcblxuICAgIGFpRGJDbGljayA9IG91dHB1dDxLb0V2ZW50T2JqZWN0T3V0cHV0PE1vdXNlRXZlbnQ+PigpO1xuXG4gICAgZmllbGRNZW51czogU2lnbmFsPEFJVGFibGVGaWVsZE1lbnVJdGVtW10+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE1lbnVzRm4gPSB0aGlzLmFpRmllbGRDb25maWcoKT8uZmllbGRNZW51cztcbiAgICAgICAgaWYgKGZpZWxkTWVudXNGbiAmJiB0aGlzLmFpVGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZE1lbnVzRm4odGhpcy5haVRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfSk7XG5cbiAgICBtb3VzZW92ZXJSZWYhOiBUaHlQb3BvdmVyUmVmPGFueT47XG5cbiAgICBncmlkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWlCdWlsZFJlbmRlckRhdGFGbiAmJiB0aGlzLmFpQnVpbGRSZW5kZXJEYXRhRm4oKSAmJiB0aGlzLmFpVGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFpQnVpbGRSZW5kZXJEYXRhRm4oKSEodGhpcy5haVRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVjb3JkczogdGhpcy5haVJlY29yZHMoKSxcbiAgICAgICAgICAgIGZpZWxkczogdGhpcy5haUZpZWxkcygpLFxuICAgICAgICAgICAgZmllbGRzU2l6ZU1hcDogdGhpcy5haUZpZWxkc1NpemVNYXAoKVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByb3RlY3RlZCBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByb3RlY3RlZCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByb3RlY3RlZCBhaVRhYmxlR3JpZEZpZWxkU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZEZpZWxkU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkRXZlbnRTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0QUlUYWJsZSgpO1xuICAgICAgICB0aGlzLmluaXRTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgaW5pdEFJVGFibGUoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZSA9IGNyZWF0ZUFJVGFibGUodGhpcy5haVJlY29yZHMsIHRoaXMuYWlGaWVsZHMsIHRoaXMuZ3JpZERhdGEpO1xuICAgICAgICBpZiAodGhpcy5haUdldEkxOG5UZXh0QnlLZXkoKSkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLmdldEkxOG5UZXh0QnlLZXkgPSB0aGlzLmFpR2V0STE4blRleHRCeUtleSgpIGFzIChrZXk6IEFJVGFibGVHcmlkSTE4bktleSB8IHN0cmluZykgPT4gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWlQbHVnaW5zKCk/LmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlID0gcGx1Z2luKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFpVGFibGVJbml0aWFsaXplZC5lbWl0KHRoaXMuYWlUYWJsZSk7XG4gICAgfVxuXG4gICAgaW5pdFNlcnZpY2UoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLmFpVGFibGUsIHRoaXMuYWlGaWVsZENvbmZpZygpPy5maWVsZFJlbmRlcmVycyk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmluaXRpYWxpemUodGhpcy5haVRhYmxlKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5yZWdpc3RlckV2ZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2UuaW5pdEFJRmllbGRDb25maWcodGhpcy5haUZpZWxkQ29uZmlnKCkpO1xuICAgICAgICBBSV9UQUJMRV9HUklEX0ZJRUxEX1NFUlZJQ0VfTUFQLnNldCh0aGlzLmFpVGFibGUsIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2UpO1xuICAgIH1cblxuICAgIGFkZFJlY29yZCgpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5ncmlkRGF0YSgpLnJlY29yZHM7XG4gICAgICAgIGNvbnN0IHJlY29yZENvdW50ID0gcmVjb3Jkcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuYWlBZGRSZWNvcmQuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5JZDogcmVjb3JkQ291bnQgPiAwID8gcmVjb3Jkc1tyZWNvcmRzLmxlbmd0aCAtIDFdLl9pZCA6ICcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlbGVjdFJlY29yZChyZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJlY29yZChyZWNvcmRJZCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UudG9nZ2xlU2VsZWN0QWxsKGNoZWNrZWQpO1xuICAgIH1cblxuICAgIGFkZEZpZWxkKGdyaWRDb2x1bW5CbGFuaz86IEhUTUxFbGVtZW50LCBwb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNyZWF0ZURlZmF1bHRGaWVsZCh0aGlzLmFpVGFibGUsIEFJVGFibGVGaWVsZFR5cGUudGV4dCk7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJSZWYgPSB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLmVkaXRGaWVsZFByb3BlcnR5KHRoaXMuYWlUYWJsZSwge1xuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBpc1VwZGF0ZTogZmFsc2UsXG4gICAgICAgICAgICBvcmlnaW46IGdyaWRDb2x1bW5CbGFuayEsXG4gICAgICAgICAgICBwb3NpdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBvcG92ZXJSZWYgJiYgIXRoaXMuYWlGaWVsZENvbmZpZygpPy5maWVsZFNldHRpbmdDb21wb25lbnQpIHtcbiAgICAgICAgICAgIChwb3BvdmVyUmVmLmNvbXBvbmVudEluc3RhbmNlIGFzIEFJVGFibGVGaWVsZFNldHRpbmcpLmFkZEZpZWxkLnN1YnNjcmliZSgoZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5ncmlkRGF0YSgpLmZpZWxkcztcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZENvdW50ID0gZmllbGRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmFpQWRkRmllbGQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbklkOiBmaWVsZENvdW50ID4gMCA/IGZpZWxkc1tmaWVsZHMubGVuZ3RoIC0gMV0uX2lkIDogJycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3Vic2NyaWJlRXZlbnRzKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmRibENsaWNrRXZlbnQkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRibENsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5tb3VzZWRvd25FdmVudCRcbiAgICAgICAgICAgICAgICAucGlwZShtZXJnZVdpdGgodGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5nbG9iYWxNb3VzZWRvd25FdmVudCQpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS51cGRhdGVTZWxlY3QoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm1vdXNlb3ZlckV2ZW50JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZW92ZXJIYW5kbGUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmdsb2JhbE1vdXNlb3ZlckV2ZW50JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUhvdmVyQ2VsbEVkaXRvcihldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkYmxDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBjZWxsRG9tID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnLmdyaWQtY2VsbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB0eXBlID0gY2VsbERvbSAmJiAoY2VsbERvbS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSEgYXMgQUlUYWJsZUZpZWxkVHlwZSk7XG4gICAgICAgIGlmICh0eXBlICYmIERCTF9DTElDS19FRElUX1RZUEUuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkVkaXQoY2VsbERvbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNlb3ZlckhhbmRsZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb3VzZW92ZXJSZWYpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxEb20gPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZ3JpZC1jZWxsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjZWxsRG9tICYmIChjZWxsRG9tLmdldEF0dHJpYnV0ZSgndHlwZScpISBhcyBBSVRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgTU9VU0VPVkVSX0VESVRfVFlQRS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZW92ZXJSZWYgPSB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5FZGl0KGNlbGxEb20pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZUhvdmVyQ2VsbEVkaXRvcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlb3ZlclJlZikge1xuICAgICAgICAgICAgY29uc3QgaGFzR3JpZCA9IGUudGFyZ2V0ICYmIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnLmFpLXRhYmxlLWdyaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0NlbGxFZGl0b3IgPSBlLnRhcmdldCAmJiAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5ncmlkLWNlbGwtZWRpdG9yJyk7XG4gICAgICAgICAgICBpZiAoIWhhc0dyaWQgJiYgIWhhc0NlbGxFZGl0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixNQUFNLEVBR1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQU9ILGdCQUFnQixFQUVoQix3QkFBd0IsRUFFeEIsYUFBYSxFQUNiLGtCQUFrQixFQUtyQixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFZM0UsTUFBTSxPQUFPLGVBQWU7SUFONUI7UUFPSSxjQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBa0IsQ0FBQztRQUU3QyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztRQUUzQyxvQkFBZSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXdCLENBQUM7UUFFekQsdUJBQWtCLEdBQUcsS0FBSyxFQUFrRCxDQUFDO1FBRTdFLGtCQUFhLEdBQUcsS0FBSyxFQUFpQixDQUFDO1FBRXZDLGVBQVUsR0FBRyxLQUFLLENBQVUsS0FBSyxD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QUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7K0dBcktRLGVBQWU7bUdBQWYsZUFBZSw2ckVBSmQsRUFBRTs7NEZBSUgsZUFBZTtrQkFOM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBOZ1pvbmUsXG4gICAgT25Jbml0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgU2lnbmFsLFxuICAgIFdyaXRhYmxlU2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBtZXJnZVdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERCTF9DTElDS19FRElUX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJUGx1Z2luLFxuICAgIEFJVGFibGUsXG4gICAgQUlUYWJsZUZpZWxkLFxuICAgIEFJVGFibGVGaWVsZHMsXG4gICAgQUlUYWJsZUZpZWxkVHlwZSxcbiAgICBBSVRhYmxlUmVjb3JkcyxcbiAgICBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsXG4gICAgQUlUYWJsZVZhbHVlLFxuICAgIGNyZWF0ZUFJVGFibGUsXG4gICAgY3JlYXRlRGVmYXVsdEZpZWxkLFxuICAgIE1vdmVGaWVsZE9wdGlvbnMsXG4gICAgTW92ZVJlY29yZE9wdGlvbnMsXG4gICAgU2V0RmllbGRXaWR0aE9wdGlvbnMsXG4gICAgVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnNcbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJX1RBQkxFX0dSSURfRklFTERfU0VSVklDRV9NQVAsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlGaWVsZENvbmZpZywgQUlUYWJsZUZpZWxkTWVudUl0ZW0sIEFJVGFibGVDb250ZXh0TWVudUl0ZW0sIEFJVGFibGVSZWZlcmVuY2VzLCBBSVRhYmxlRmllbGRzU2l6ZU1hcCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkU2V0dGluZyB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBLb0V2ZW50T2JqZWN0T3V0cHV0IH0gZnJvbSAnLi9hbmd1bGFyLWtvbnZhJztcbmltcG9ydCB7IEFJVGFibGVHcmlkSTE4bktleSB9IGZyb20gJy4vdXRpbHMvaTE4bic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZ3JpZC1iYXNlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGFpUmVjb3JkcyA9IG1vZGVsLnJlcXVpcmVkPEFJVGFibGVSZWNvcmRzPigpO1xuXG4gICAgYWlGaWVsZHMgPSBtb2RlbC5yZXF1aXJlZDxBSVRhYmxlRmllbGRzPigpO1xuXG4gICAgYWlGaWVsZHNTaXplTWFwID0gbW9kZWwucmVxdWlyZWQ8QUlUYWJsZUZpZWxkc1NpemVNYXA+KCk7XG5cbiAgICBhaUNvbnRleHRNZW51SXRlbXMgPSBpbnB1dDwoYWlUYWJsZTogQUlUYWJsZSkgPT4gQUlUYWJsZUNvbnRleHRNZW51SXRlbVtdPigpO1xuXG4gICAgYWlGaWVsZENvbmZpZyA9IGlucHV0PEFJRmllbGRDb25maWc+KCk7XG5cbiAgICBhaVJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgYWlSb3dEcmFnRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBhaVBsdWdpbnMgPSBpbnB1dDxBSVBsdWdpbltdPigpO1xuXG4gICAgYWlSZWZlcmVuY2VzID0gaW5wdXQucmVxdWlyZWQ8QUlUYWJsZVJlZmVyZW5jZXM+KCk7XG5cbiAgICBhaUJ1aWxkUmVuZGVyRGF0YUZuID0gaW5wdXQ8KGFpVGFibGU6IEFJVGFibGUpID0+IEFJVGFibGVWYWx1ZT4oKTtcblxuICAgIGFpR2V0STE4blRleHRCeUtleSA9IGlucHV0PChrZXk6IEFJVGFibGVHcmlkSTE4bktleSB8IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgYWlLZXl3b3JkcyA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIHJlZnJlc2hSZW5kZXI6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWwoMCk7XG5cbiAgICBBSVRhYmxlRmllbGRUeXBlID0gQUlUYWJsZUZpZWxkVHlwZTtcblxuICAgIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSA9IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZTtcblxuICAgIGFpVGFibGUhOiBBSVRhYmxlO1xuXG4gICAgaXNTZWxlY3RlZEFsbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuc2l6ZSA9PT0gdGhpcy5haVJlY29yZHMoKS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBhaVRhYmxlSW5pdGlhbGl6ZWQgPSBvdXRwdXQ8QUlUYWJsZT4oKTtcblxuICAgIGFpQWRkUmVjb3JkID0gb3V0cHV0PEFkZFJlY29yZE9wdGlvbnM+KCk7XG5cbiAgICBhaUFkZEZpZWxkID0gb3V0cHV0PEFkZEZpZWxkT3B0aW9ucz4oKTtcblxuICAgIGFpTW92ZUZpZWxkID0gb3V0cHV0PE1vdmVGaWVsZE9wdGlvbnM+KCk7XG5cbiAgICBhaVVwZGF0ZUZpZWxkVmFsdWUgPSBvdXRwdXQ8VXBkYXRlRmllbGRWYWx1ZU9wdGlvbnM+KCk7XG5cbiAgICBhaVNldEZpZWxkID0gb3V0cHV0PEFJVGFibGVGaWVsZD4oKTtcblxuICAgIGFpU2V0RmllbGRXaWR0aCA9IG91dHB1dDxTZXRGaWVsZFdpZHRoT3B0aW9ucz4oKTtcblxuICAgIGFpTW92ZVJlY29yZHMgPSBvdXRwdXQ8TW92ZVJlY29yZE9wdGlvbnM+KCk7XG5cbiAgICBhaUNsaWNrID0gb3V0cHV0PEtvRXZlbnRPYmplY3RPdXRwdXQ8TW91c2VFdmVudD4+KCk7XG5cbiAgICBhaURiQ2xpY2sgPSBvdXRwdXQ8S29FdmVudE9iamVjdE91dHB1dDxNb3VzZUV2ZW50Pj4oKTtcblxuICAgIGZpZWxkTWVudXM6IFNpZ25hbDxBSVRhYmxlRmllbGRNZW51SXRlbVtdPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRNZW51c0ZuID0gdGhpcy5haUZpZWxkQ29uZmlnKCk/LmZpZWxkTWVudXM7XG4gICAgICAgIGlmIChmaWVsZE1lbnVzRm4gJiYgdGhpcy5haVRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRNZW51c0ZuKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xuXG4gICAgbW91c2VvdmVyUmVmITogVGh5UG9wb3ZlclJlZjxhbnk+O1xuXG4gICAgZ3JpZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaFJlbmRlcigpO1xuICAgICAgICBpZiAodGhpcy5haUJ1aWxkUmVuZGVyRGF0YUZuICYmIHRoaXMuYWlCdWlsZFJlbmRlckRhdGFGbigpICYmIHRoaXMuYWlUYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWlCdWlsZFJlbmRlckRhdGFGbigpISh0aGlzLmFpVGFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWNvcmRzOiB0aGlzLmFpUmVjb3JkcygpLFxuICAgICAgICAgICAgZmllbGRzOiB0aGlzLmFpRmllbGRzKCksXG4gICAgICAgICAgICBmaWVsZHNTaXplTWFwOiB0aGlzLmFpRmllbGRzU2l6ZU1hcCgpXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJvdGVjdGVkIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJvdGVjdGVkIGFpVGFibGVHcmlkRmllbGRTZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UgPSBpbmplY3QoQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBhaVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlKTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRBSVRhYmxlKCk7XG4gICAgICAgIHRoaXMuaW5pdFNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICBpbml0QUlUYWJsZSgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlID0gY3JlYXRlQUlUYWJsZSh0aGlzLmFpUmVjb3JkcywgdGhpcy5haUZpZWxkcywgdGhpcy5ncmlkRGF0YSk7XG4gICAgICAgIGlmICh0aGlzLmFpR2V0STE4blRleHRCeUtleSgpKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUuZ2V0STE4blRleHRCeUtleSA9IHRoaXMuYWlHZXRJMThuVGV4dEJ5S2V5KCkgYXMgKGtleTogQUlUYWJsZUdyaWRJMThuS2V5IHwgc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5haVBsdWdpbnMoKT8uZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUgPSBwbHVnaW4odGhpcy5haVRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUluaXRpYWxpemVkLmVtaXQodGhpcy5haVRhYmxlKTtcbiAgICB9XG5cbiAgICBpbml0U2VydmljZSgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5pbml0aWFsaXplKHRoaXMuYWlUYWJsZSwgdGhpcy5haUZpZWxkQ29uZmlnKCk/LmZpZWxkUmVuZGVyZXJzKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLmFpVGFibGUpO1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLnJlZ2lzdGVyRXZlbnRzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEZpZWxkU2VydmljZS5pbml0QUlGaWVsZENvbmZpZyh0aGlzLmFpRmllbGRDb25maWcoKSk7XG4gICAgICAgIEFJX1RBQkxFX0dSSURfRklFTERfU0VSVklDRV9NQVAuc2V0KHRoaXMuYWlUYWJsZSwgdGhpcy5haVRhYmxlR3JpZEZpZWxkU2VydmljZSk7XG4gICAgfVxuXG4gICAgYWRkUmVjb3JkKCkge1xuICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy5haVRhYmxlLmdyaWREYXRhKCkucmVjb3JkcztcbiAgICAgICAgY29uc3QgcmVjb3JkQ291bnQgPSByZWNvcmRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5haUFkZFJlY29yZC5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbklkOiByZWNvcmRDb3VudCA+IDAgPyByZWNvcmRzW3JlY29yZHMubGVuZ3RoIC0gMV0uX2lkIDogJydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VsZWN0UmVjb3JkKHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0UmVjb3JkKHJlY29yZElkKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS50b2dnbGVTZWxlY3RBbGwoY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgYWRkRmllbGQoZ3JpZENvbHVtbkJsYW5rPzogSFRNTEVsZW1lbnQsIHBvc2l0aW9uPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY3JlYXRlRGVmYXVsdEZpZWxkKHRoaXMuYWlUYWJsZSwgQUlUYWJsZUZpZWxkVHlwZS50ZXh0KTtcbiAgICAgICAgY29uc3QgcG9wb3ZlclJlZiA9IHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2UuZWRpdEZpZWxkUHJvcGVydHkodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIGlzVXBkYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIG9yaWdpbjogZ3JpZENvbHVtbkJsYW5rISxcbiAgICAgICAgICAgIHBvc2l0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocG9wb3ZlclJlZiAmJiAhdGhpcy5haUZpZWxkQ29uZmlnKCk/LmZpZWxkU2V0dGluZ0NvbXBvbmVudCkge1xuICAgICAgICAgICAgKHBvcG92ZXJSZWYuY29tcG9uZW50SW5zdGFuY2UgYXMgQUlUYWJsZUZpZWxkU2V0dGluZykuYWRkRmllbGQuc3Vic2NyaWJlKChkZWZhdWx0VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyaWREYXRhKCkuZmllbGRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkQ291bnQgPSBmaWVsZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlBZGRGaWVsZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luSWQ6IGZpZWxkQ291bnQgPiAwID8gZmllbGRzW2ZpZWxkcy5sZW5ndGggLSAxXS5faWQgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdWJzY3JpYmVFdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZGJsQ2xpY2tFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGJsQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm1vdXNlZG93bkV2ZW50JFxuICAgICAgICAgICAgICAgIC5waXBlKG1lcmdlV2l0aCh0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmdsb2JhbE1vdXNlZG93bkV2ZW50JCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnVwZGF0ZVNlbGVjdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGJsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2VsbERvbSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5ncmlkLWNlbGwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNlbGxEb20gJiYgKGNlbGxEb20uZ2V0QXR0cmlidXRlKCd0eXBlJykhIGFzIEFJVGFibGVGaWVsZFR5cGUpO1xuICAgICAgICBpZiAodHlwZSAmJiBEQkxfQ0xJQ0tfRURJVF9UWVBFLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5FZGl0KGNlbGxEb20pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19