@mediusinc/mng-commons 6.0.0-rc.2 → 6.0.0-rc.3

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 (69) hide show
  1. package/core/helpers/notification.d.ts +17 -1
  2. package/core/i18n/i18n-error.d.ts +2 -3
  3. package/core/router/route-builder.d.ts +1 -1
  4. package/esm2022/core/helpers/notification.mjs +19 -4
  5. package/esm2022/core/i18n/i18n-error.mjs +10 -8
  6. package/esm2022/core/router/route-builder.mjs +2 -2
  7. package/esm2022/form/api/descriptors/action-button.descriptor.mjs +5 -17
  8. package/esm2022/form/api/descriptors/button-style.builder.mjs +80 -101
  9. package/esm2022/form/api/index.mjs +2 -1
  10. package/esm2022/form/api/models/button.model.mjs +2 -0
  11. package/esm2022/model/helpers/i18n.mjs +14 -9
  12. package/esm2022/table/components/column-value/column-value.component.mjs +4 -3
  13. package/esm2022/table/components/table/table.component.mjs +12 -11
  14. package/esm2022/table/helpers/notification.mjs +19 -13
  15. package/esm2022/tableview/action/components/action/action.component.mjs +41 -37
  16. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +13 -8
  17. package/esm2022/tableview/action/helpers/i18n.mjs +50 -30
  18. package/esm2022/tableview/action/helpers/notification.mjs +73 -12
  19. package/esm2022/tableview/action/helpers/styles.mjs +2 -2
  20. package/esm2022/tableview/action/services/action-executor.service.mjs +83 -66
  21. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +34 -21
  22. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +4 -4
  23. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +49 -67
  24. package/esm2022/tableview/api/action/models/action-confirmation.model.mjs +2 -0
  25. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
  26. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +14 -8
  27. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +1 -1
  28. package/esm2022/tableview/api/index.mjs +2 -2
  29. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +67 -37
  30. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +5 -8
  31. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +7 -5
  32. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +29 -18
  33. package/esm2022/tableview/provide.mjs +44 -1
  34. package/fesm2022/mediusinc-mng-commons-core.mjs +29 -12
  35. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  36. package/fesm2022/mediusinc-mng-commons-form-api.mjs +137 -169
  37. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  38. package/fesm2022/mediusinc-mng-commons-model.mjs +13 -8
  39. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  40. package/fesm2022/mediusinc-mng-commons-table.mjs +32 -24
  41. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  42. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +165 -215
  43. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  44. package/fesm2022/mediusinc-mng-commons-tableview.mjs +358 -197
  45. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  46. package/form/api/descriptors/action-button.descriptor.d.ts +11 -13
  47. package/form/api/descriptors/button-style.builder.d.ts +30 -44
  48. package/form/api/index.d.ts +1 -0
  49. package/form/api/models/button.model.d.ts +19 -0
  50. package/i18n/sl.json +56 -6
  51. package/model/helpers/i18n.d.ts +8 -3
  52. package/package.json +13 -13
  53. package/table/components/column-value/column-value.component.d.ts +1 -0
  54. package/table/components/table/table.component.d.ts +0 -1
  55. package/table/helpers/notification.d.ts +10 -1
  56. package/tableview/action/components/action/action.component.d.ts +8 -11
  57. package/tableview/action/helpers/i18n.d.ts +36 -11
  58. package/tableview/action/helpers/notification.d.ts +37 -3
  59. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +18 -8
  60. package/tableview/api/action/descriptors/action.descriptor.d.ts +22 -31
  61. package/tableview/api/action/models/action-confirmation.model.d.ts +14 -0
  62. package/tableview/api/action/models/action-descriptor.types.d.ts +4 -0
  63. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +5 -5
  64. package/tableview/api/index.d.ts +1 -1
  65. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +1 -1
  66. package/tableview/provide.d.ts +7 -0
  67. package/version-info.json +6 -6
  68. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +0 -88
  69. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +0 -37
@@ -52,14 +52,19 @@ export class ActionEditorInjectorContextComponent {
52
52
  const actions = [];
53
53
  for (const action of this.editorAction().editorActions) {
54
54
  if (action instanceof ActionEditorSubmitDescriptorInst) {
55
- if (typeof action.button.icon === 'undefined') {
56
- action.button.withIcon(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times');
57
- }
58
- if (typeof action.button.label === 'undefined') {
59
- action.button.withLabel(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'general.save' : this.data().isDialog ? 'general.close' : 'general.cancel');
60
- }
55
+ action.withButtonOpts({
56
+ ...action.button,
57
+ icon: action.button?.icon === undefined ? (action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times') : action.button.icon,
58
+ label: action.button?.label === undefined
59
+ ? action.submitType === ActionEditorSubmitTypeEnum.Submit
60
+ ? 'general.save'
61
+ : this.data().isDialog
62
+ ? 'general.close'
63
+ : 'general.cancel'
64
+ : action.button.label
65
+ });
61
66
  // assign run operations
62
- action.withRunNotificationSuccess(undefined, undefined, false);
67
+ action.withNotifications(false);
63
68
  if (action.submitType === ActionEditorSubmitTypeEnum.Submit) {
64
69
  action.withRunFunction(() => {
65
70
  this.triggerSubmit();
@@ -420,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
420
425
  type: HostListener,
421
426
  args: ['window:keydown.Escape']
422
427
  }] } });
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFjLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFD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LENBQUMsYUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7K0dBMWNRLG9DQUFvQzttR0FBcEMsb0NBQW9DLDBZQUZsQyxDQUFDLHFCQUFxQixFQUFFLENBQUMseUVBcUJILG1CQUFtQixnRUM5RXhELGt3SUE0RkEsd0tEckNjLGVBQWUsbU9BQUUscUJBQXFCLHlNQUFFLG1CQUFtQixrUEFBRSxhQUFhLHlQQUFFLDZCQUE2Qjs7NEZBSTFHLG9DQUFvQztrQkFUaEQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sb0NBQW9DLFdBR3JDLENBQUMsZUFBZSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSw2QkFBNkIsQ0FBQyxtQkFDbkcsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7OEJBMlk1QixrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCO2dCQVMzQixlQUFlO3NCQUR0QixZQUFZO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcbmltcG9ydCB7VG9vbGJhck1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7WkluZGV4VXRpbHN9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHtORVZFUiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0V2l0aCwgbWVyZ2VNYXAsIG9mLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uRGF0YSxcbiAgICBBY3Rpb25QYXJhbWV0ZXJzLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIENvbW1vbnNTZXJ2aWNlLFxuICAgIElEYXRhUHJvdmlkZXIsXG4gICAgSWRUeXBlLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgZWZmZWN0V2l0aERlcHMsXG4gICAgb2JqZWN0RGVlcENvcHlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7XG4gICAgQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLFxuICAgIEFjdGlvbkRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLFxuICAgIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLFxuICAgIEFjdGlvblBvc2l0aW9uRW51bSxcbiAgICBBY3Rpb25UeXBlRW51bSxcbiAgICBFZGl0b3JSZXNldEV2ZW50LFxuICAgIEZvcm1FZGl0b3JTdWJtaXRFdmVudCxcbiAgICBJQWN0aW9uRWRpdG9yQ29tcG9uZW50LFxuICAgIElBY3Rpb25JbnN0YW5jZSxcbiAgICBJRWRpdG9yRGF0YVByb3ZpZGVyLFxuICAgIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7RWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvci9hdXRvLXNhdmUtc3RhdHVzL2F1dG8tc2F2ZS1zdGF0dXMuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vZWRpdG9yL2NvbXBvbmVudHMvZWRpdG9yL2Zvcm0tZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzfSBmcm9tICcuLi8uLi8uLi8uLi9lZGl0b3IvbW9kZWxzL2VkaXRvci1hdXRvLXNhdmUtcHJldmlldy5tb2RlbCc7XG5pbXBvcnQge2dldEkxOG5BY3Rpb25FZGl0b3JUaXRsZUFzeW5jfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZX0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25FeGVjdXRvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlJztcbmltcG9ydCB7cHJvdmlkZUFjdGlvbkV4ZWN1dG9yfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcm92aWRlcnMvcHJvdmlkZS1hY3Rpb24tZXhlY3V0b3InO1xuaW1wb3J0IHtWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy92aWV3LWNvbnRhaW5lci5zZXJ2aWNlJztcbmltcG9ydCB7QWN0aW9uQ29tcG9uZW50fSBmcm9tICcuLi8uLi9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW0FjdGlvbkNvbXBvbmVudCwgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBGb3JtRWRpdG9yQ29tcG9uZW50LCBUb29sYmFyTW9kdWxlLCBFZGl0b3JBdXRvU2F2ZVN0YXR1c0NvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbcHJvdmlkZUFjdGlvbkV4ZWN1dG9yKCldXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dENvbXBvbmVudDxJdGVtID0gYW55LCBTZXJ2aWNlID0gYW55PiBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSUFjdGlvbkVkaXRvckNvbXBvbmVudCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA9IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNTZXJ2aWNlID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbkV4ZWN1dG9yID0gaW5qZWN0KEFjdGlvbkV4ZWN1dG9yU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXIsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgZGF0YSA9IGlucHV0LnJlcXVpcmVkPEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dElucHV0RGF0YTxJdGVtLCBTZXJ2aWNlPj4oKTtcblxuICAgIHB1YmxpYyBhY3Rpb25SdW4gPSBvdXRwdXQ8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHVibGljIGFjdGlvbkNhbmNlbCA9IG91dHB1dDxJdGVtIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIHB1YmxpYyBmb3JtRWRpdG9yQ21wID0gdmlld0NoaWxkKEZvcm1FZGl0b3JDb21wb25lbnQpO1xuXG4gICAgcHJpdmF0ZSBoYXNUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdG9yQWN0aW9uKCkuZWRpdG9yVGl0bGUgIT09IG51bGwpO1xuICAgIHB1YmxpYyB0aXRsZSA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGlzRm9ybURpc2FibGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8vIGRhdGFcbiAgICBwdWJsaWMgaXRlbSA9IHNpZ25hbDxJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpdGVtSWQgPSBzaWduYWw8SWRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBhY3Rpb25EYXRhID0gc2lnbmFsPEFjdGlvbkRhdGEgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGVkaXRvckFjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YSgpLmRlc2NyaXB0b3IpO1xuXG4gICAgLy8gYWN0aW9uc1xuICAgIHByaXZhdGUgYWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmJ1dHRvbi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uLndpdGhJY29uKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAncGkgcGktY2hlY2snIDogJ3BpIHBpLXRpbWVzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmJ1dHRvbi5sYWJlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoTGFiZWwoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdnZW5lcmFsLnNhdmUnIDogdGhpcy5kYXRhKCkuaXNEaWFsb2cgPyAnZ2VuZXJhbC5jbG9zZScgOiAnZ2VuZXJhbC5jYW5jZWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLnZpZXdDb250YWluZXI/LmFjdGlvbnMoKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUucG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzPy5pbmNsdWRlcyh0aGlzLmVkaXRvckFjdGlvbigpLnRhYmxldmlld0NhdGVnb3J5ISkpID8/IFtdKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH0pO1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFjdGlvbnMoKS5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQpKTtcbiAgICBwdWJsaWMgdG9vbGJhclJpZ2h0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuYWN0aW9ucygpXG4gICAgICAgICAgICAuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodClcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICApO1xuICAgIHB1YmxpYyBmb290ZXJMZWZ0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9ucygpLmZpbHRlcihhID0+IGEucG9zaXRpb24gPT09IEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0KSk7XG4gICAgcHVibGljIGZvb3RlclJpZ2h0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuYWN0aW9ucygpXG4gICAgICAgICAgICAuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlclJpZ2h0KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICk7XG5cbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT47XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSBmZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgZm9ybVZhbHVlID0gc2lnbmFsPEl0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVN0YXR1cyA9IHNpZ25hbDxFZGl0b3JBdXRvU2F2ZVN0YXR1cyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwcml2YXRlIHN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGxhc3RTdWJtaXRJdGVtPzogSXRlbTtcblxuICAgIC8vIHN1YnNjcmlwdGlvbnMgYW5kIGVmZmVjdHNcbiAgICAjdGl0bGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICNkYXRhRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoXG4gICAgICAgIFt0aGlzLmRhdGFdLFxuICAgICAgICAoW2RhdGFdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW0uc2V0KGRhdGEuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1JZC5zZXQoZGF0YS5pdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25EYXRhLnNldChkYXRhLmFjdGlvbkRhdGEpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5hY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKGRhdGEuYWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub3RpZnkgZXhlY3V0b3IgdG8gZm9yIGFjdGl2YXRpb24gdG8gZW5kXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZSh0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9ySW5pdCh0aGlzLmVkaXRvckFjdGlvbigpLCB0aGlzLmluc3RhbmNlLCB0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtmaXJzdE9ubHk6IHRydWV9XG4gICAgKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI2hhc1RpdGxlRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuaGFzVGl0bGVdLCAoW2hhc1RpdGxlXSkgPT4ge1xuICAgICAgICBpZiAoIWhhc1RpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jdGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLiN0aXRsZVN1YnNjcmlwdGlvbiA9IGdldEkxOG5BY3Rpb25FZGl0b3JUaXRsZUFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmVkaXRvckFjdGlvbigpLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHQgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICN0aXRsZVVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmhhc1RpdGxlKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbiksIHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW0pKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKChbaGFzVGl0bGUsIGVkaXRvckFjdGlvbiwgaXRlbV0pID0+IChoYXNUaXRsZSA/IGdldEkxOG5BY3Rpb25FZGl0b3JUaXRsZUFzeW5jKHRoaXMudHJhbnNsYXRlLCBlZGl0b3JBY3Rpb24sIGl0ZW0pIDogb2YodW5kZWZpbmVkKSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHRpdGxlID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHRpdGxlID8/IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFEaWFsb2dDb25maWcgPSB0aGlzLmRhdGEoKS5kaWFsb2dDb25maWc7XG4gICAgICAgICAgICBpZiAoZGF0YURpYWxvZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIGRhdGFEaWFsb2dDb25maWcuaGVhZGVyID0gdGl0bGUgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zU2VydmljZS5zZXRQYWdlVGl0bGUodGl0bGUgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICN2aWV3Q29udGFpbmVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGEgPT4gKHRoaXMuaXNBY3Rpb25NYWluVHdFZGl0b3IoYSkgPyAodGhpcy52aWV3Q29udGFpbmVyPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpIDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiBlID0+IHRoaXMub25FZGl0b3JSZXNldChlKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAjdmlld0NvbnRhaW5lckVkaXRvckNsb3NlU3Vic2NyaXB0aW9uID0gdGhpcy52aWV3Q29udGFpbmVyXG4gICAgICAgID8gdG9PYnNlcnZhYmxlKHRoaXMuZWRpdG9yQWN0aW9uKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChhID0+ICh0aGlzLmlzQWN0aW9uTWFpblR3RWRpdG9yKGEpID8gKHRoaXMudmlld0NvbnRhaW5lcj8uZWRpdG9yQ2xvc2UkID8/IE5FVkVSKSA6IE5FVkVSKSksXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAjZGF0YVByb3ZpZGVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGFjdGlvbiA9PiAoYWN0aW9uLmRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyIHwgdW5kZWZpbmVkKT8uZWRpdG9yUmVzZXQkID8/IE5FVkVSKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBlID0+IHRoaXMub25FZGl0b3JSZXNldChlKVxuICAgICAgICB9KTtcbiAgICAjdmlld0NvbnRhaW5lckRhdGFQcm92aWRlckVkaXRvclJlc2V0U3Vic2NyaXB0aW9uID0gdGhpcy52aWV3Q29udGFpbmVyXG4gICAgICAgID8gdG9PYnNlcnZhYmxlKHRoaXMudmlld0NvbnRhaW5lci5kYXRhUHJvdmlkZXIpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodG9PYnNlcnZhYmxlKHRoaXMuZWRpdG9yQWN0aW9uKSksXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtkYXRhUHJvdmlkZXIsIGFjdGlvbl0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FjdGlvbk1haW5Ud0VkaXRvcihhY3Rpb24pICYmIGFjdGlvbi5kYXRhUHJvdmlkZXIgPT0gbnVsbCA/ICgoZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpIDogTkVWRVJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgbmV4dDogZSA9PiB0aGlzLm9uRWRpdG9yUmVzZXQoZSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuI3RpdGxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5vbkFjdGlvbkVkaXRvckRlc3Ryb3koaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogRm9ybUVkaXRvclN1Ym1pdEV2ZW50PEl0ZW0+KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBBY3Rpb24gaXMgbm90IGluc3RhbnRpYXRlZCBpbiBhY3Rpb24gZWRpdG9yIGZvciBhY3Rpb24gJHt0aGlzLmVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICAgICAgaXRlbUlkOiB0aGlzLml0ZW1JZCgpLFxuICAgICAgICAgICAgICAgIGl0ZW06IGV2ZW50LmZvcm1JdGVtLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMubG9jYWxlID0gdGhpcy5jb21tb25zU2VydmljZS5nZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yU3VibWl0KFxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQWN0aW9uKCksXG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEoKS5kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEoKS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uID0gY29udGV4dC5leGVjdXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdWJtaXRJdGVtID0gZXZlbnQuZm9ybUl0ZW07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsSWRQcm9wID0gdGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLm1vZGVsPy5pZFByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICF0aGlzLml0ZW1JZCgpICYmIG1vZGVsSWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBjb3ZlciBjcmVhdGlvbiFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbUlkKHJlc1ttb2RlbElkUHJvcCBhcyBrZXlvZiBvYmplY3RdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblJ1bi5lbWl0KHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBBY3Rpb24gZWRpdG9yIGNhbm5vdCBiZSBjYW5jZWxlZCBmb3IgJHt0aGlzLmVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWV9LCBiZWNhdXNlIG5vIGFjdGlvbiBpbnN0YW5jZSBpcyBwcmVzZW50YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25DYW5jZWwuZW1pdCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmZpbmlzaEFjdGlvbih0aGlzLmluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlSXRlbUlkKGl0ZW1JZDogSWRUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaXRlbUlkLnNldChpdGVtSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtKGl0ZW06IEl0ZW0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtLnNldChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlclN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblZhbHVlQ2hhbmdlKHZhbHVlOiBJdGVtKSB7XG4gICAgICAgIHRoaXMuZm9ybVZhbHVlLnNldCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXV0b1NhdmUodmFsdWU6IEVkaXRvckF1dG9TYXZlU3RhdHVzKSB7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVTdGF0dXMuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZldGNoSXRlbSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+ID0ge1xuICAgICAgICAgICAgaXRlbUlkOiB0aGlzLml0ZW1JZCgpLFxuICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtKCksXG4gICAgICAgICAgICBhY3Rpb25EYXRhOiB0aGlzLmFjdGlvbkRhdGEoKVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmFwcERhdGFMb2NhbGUoKSE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMubG9jYWxlID0gdGhpcy5jb21tb25zU2VydmljZS5nZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2UgaW5zdGFuY2VvZiBBY3Rpb25JbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UuY29udGV4dD8ucGFyYW1ldGVycy5pdGVtKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLmZvcm1JdGVtID0gdGhpcy5pbnN0YW5jZS5wcmV2aW91c0luc3RhbmNlLmNvbnRleHQucGFyYW1ldGVycy5pdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZT8ucmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5zdWJtaXRSZXN1bHQgPSB0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5wcmVwYXJlQ29udGV4dEZvckVkaXRvckZldGNoKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKSxcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMsXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgdGhpcy5kYXRhKCkucHJldmlvdXNBY3Rpb25JbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uID0gY29udGV4dC5leGVjdXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW0ocmVzID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuKGNvbnRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RWRpdG9yRW5hYmxlZChpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuaXNGb3JtRGlzYWJsZWQuc2V0KCFpc0VuYWJsZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0FjdGlvbkluc3RhbmNlKGluc3RhbmNlOiBJQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4pIHtcbiAgICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBBY3Rpb25JbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignVW5rbm93biB0eXBlIG9mIGFjdGlvbiBpbnN0YW5jZSByZWNlaXZlZCcsIHtkZXRhaWxzOiBpbnN0YW5jZX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSB8fCB0aGlzLmluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUgIT09IGluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMudW5zZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLmluc3RhbmNlLnN0YXRlJC5zdWJzY3JpYmUocyA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaFN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/Lm5leHRBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/Lm5leHRBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5lcnJvckFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5zZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc1JlYWN0aXZhdGVGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIGNvcHkgb2YgaXRlbSBhbmQgdXBkYXRlIHRpdGxlIHRvIGJlIG9uIHRoZSBsYXRlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbShvYmplY3REZWVwQ29weSh0aGlzLmxhc3RTdWJtaXRJdGVtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYWxzbyB1bnNldEluc3RhbmNlLCBidXQgbGV0IHRoaXMgZm9yIHJlYWN0aXZhdGlvbkluc3RhbmNlJCBsaXN0ZW5lciB0byBub3QgaW50ZXJmZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2UucmVhY3RpdmF0aW9uSW5zdGFuY2UkLnN1YnNjcmliZShuZXdJbnN0YW5jZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UobmV3SW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uTWFpblR3RWRpdG9yKGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8YW55Pikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ICE9IG51bGwgJiZcbiAgICAgICAgICAgIFtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTLCBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElULCBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5BRERdLmluY2x1ZGVzKGFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJylcbiAgICBwcml2YXRlIGJlZm9yZVdpbmRvd1VubG9hZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSgpLmlzRGlhbG9nICYmIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5mb3JtLnByaXN0aW5lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLm1lc3NhZ2UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uRXNjYXBlJylcbiAgICBwcml2YXRlIG9uRXNjYXBlUHJlc3NlZCgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kYXRhKCkuaXNEaWFsb2cgJiZcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlICYmXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uRGlhbG9nUmVmICYmXG4gICAgICAgICAgICBwYXJzZUludCh0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldCh0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uRGlhbG9nUmVmKT8uaW5zdGFuY2UuY29udGFpbmVyPy5zdHlsZS56SW5kZXggPz8gJycpID09PSBaSW5kZXhVdGlscy5nZXRDdXJyZW50KClcbiAgICAgICAgKVxuICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbihjYWxsRnJvbUd1YXJkID0gZmFsc2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUVkaXRvckNtcCgpPy5mb3JtLnByaXN0aW5lID09PSBmYWxzZSAmJiB0aGlzLmVkaXRvckFjdGlvbigpLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxGcm9tR3VhcmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1Vuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uRGlhbG9nKGNhbGxGcm9tR3VhcmQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLmhlYWRlcicpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLm1lc3NhZ2UnKSxcbiAgICAgICAgICAgIGFjY2VwdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdnZW5lcmFsLnllcycpLFxuICAgICAgICAgICAgcmVqZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwubm8nKSxcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbGxGcm9tR3VhcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FZGl0b3JSZXNldChldmVudD86IEVkaXRvclJlc2V0RXZlbnQ8SXRlbT4pIHtcbiAgICAgICAgaWYgKGV2ZW50Py5mZXRjaCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudD8uaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnJlc2V0Rm9ybU1vZGVsKGV2ZW50Lml0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Py5maWVsZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50LmZpZWxkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5yZXNldEZpZWxkVmFsdWUoa2V5LCBldmVudC5maWVsZHNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8ucmVzZXRGb3JtTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRJbnB1dERhdGE8SXRlbSwgU2VydmljZT4ge1xuICAgIGRlc2NyaXB0b3I6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+O1xuICAgIGlzRGlhbG9nOiBib29sZWFuO1xuICAgIGRpYWxvZ0NvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWc7XG4gICAgaXRlbUlkPzogSWRUeXBlO1xuICAgIGl0ZW0/OiBJdGVtO1xuICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT47XG4gICAgYWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogSUFjdGlvbkluc3RhbmNlPGFueSwgYW55Pjtcbn1cbiIsIkBpZiAoIWRhdGEoKS5pc0RpYWxvZyAmJiB0aXRsZSgpKSB7XG4gICAgPGg1Pnt7IHRpdGxlKCkgfX08L2g1PlxufVxuQGlmIChkYXRhKCkuaXNEaWFsb2cgJiYgZWRpdG9yQWN0aW9uKCkuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXIgZGlhbG9nLWNsb3NlLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyLWljb24gcC1kaWFsb2ctaGVhZGVyLW1heGltaXplIHAtbGlua1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyLWNsb3NlLWljb24gcGkgcGktdGltZXNcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cbn1cbjxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbHVtblwiPlxuICAgIEBpZiAodG9vbGJhckxlZnRBY3Rpb25zKCkubGVuZ3RoID4gMCB8fCB0b29sYmFyUmlnaHRBY3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgdG9vbGJhckxlZnRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgdG9vbGJhclJpZ2h0QWN0aW9ucygpOyB0cmFjayBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZygpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cImZvcm1WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZCgpXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC10b29sYmFyPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBbc3R5bGVdPVwie3dpZHRoOiAnM3JlbScsIGhlaWdodDogJzNyZW0nfVwiIHN0cm9rZVdpZHRoPVwiM1wiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG1uZy1mb3JtLWVkaXRvclxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3JcIlxuICAgICAgICAgICAgICAgIFtlZGl0b3JJZF09XCJlZGl0b3JBY3Rpb24oKS5hY3Rpb25OYW1lTG9uZ1wiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZCgpXCJcbiAgICAgICAgICAgICAgICBbaXNGb3JtRGlzYWJsZWRdPVwiaXNGb3JtRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgc2hvd0F1dG9TYXZlU3RhdHVzPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb3JtU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhdXRvU2F2ZVN0YXR1cyk9XCJvbkF1dG9TYXZlKCRldmVudClcIiAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbW5nLWFjdGlvbi1lZGl0b3ItZm9vdGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGZvb3RlckxlZnRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZygpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZCgpXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChlZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmF1dG9TYXZlKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1lZGl0b3ItYXV0by1zYXZlLXN0YXR1cyBbc3RhdHVzXT1cImF1dG9TYXZlU3RhdHVzKClcIj48L21uZy1lZGl0b3ItYXV0by1zYXZlLXN0YXR1cz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyUmlnaHRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZygpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZCgpXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFjLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFD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LENBQUM7WUFDbEUsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDOytHQWhkUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQywwWUFGbEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLHlFQXFCSCxtQkFBbUIsZ0VDOUV4RCxrd0lBNEZBLHdLRHJDYyxlQUFlLG1PQUFFLHFCQUFxQix5TUFBRSxtQkFBbUIsa1BBQUUsYUFBYSx5UEFBRSw2QkFBNkI7OzRGQUkxRyxvQ0FBb0M7a0JBVGhELFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9DQUFvQyxXQUdyQyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLENBQUMsbUJBQ25HLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOzhCQWlaNUIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFTM0IsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XG5pbXBvcnQge1Rvb2xiYXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XG5pbXBvcnQge1pJbmRleFV0aWxzfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7TkVWRVIsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdFdpdGgsIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbkRhdGEsXG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBDb21tb25zU2VydmljZSxcbiAgICBJRGF0YVByb3ZpZGVyLFxuICAgIElkVHlwZSxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIGVmZmVjdFdpdGhEZXBzLFxuICAgIG9iamVjdERlZXBDb3B5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25EZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSxcbiAgICBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSxcbiAgICBBY3Rpb25Qb3NpdGlvbkVudW0sXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgRWRpdG9yUmVzZXRFdmVudCxcbiAgICBGb3JtRWRpdG9yU3VibWl0RXZlbnQsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2UsXG4gICAgSUVkaXRvckRhdGFQcm92aWRlcixcbiAgICBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvYXV0by1zYXZlLXN0YXR1cy9hdXRvLXNhdmUtc3RhdHVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvci9mb3JtLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vLi4vLi4vZWRpdG9yL21vZGVscy9lZGl0b3ItYXV0by1zYXZlLXByZXZpZXcubW9kZWwnO1xuaW1wb3J0IHtnZXRJMThuQWN0aW9uRWRpdG9yVGl0bGVBc3luY30gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9pMThuJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uLy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWluc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQge3Byb3ZpZGVBY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtYWN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5pbXBvcnQge0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtBY3Rpb25Db21wb25lbnQsIFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgRm9ybUVkaXRvckNvbXBvbmVudCwgVG9vbGJhck1vZHVsZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVBY3Rpb25FeGVjdXRvcigpXVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQ8SXRlbSA9IGFueSwgU2VydmljZSA9IGFueT4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIElBY3Rpb25FZGl0b3JDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQ7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQWN0aW9uRWRpdG9ySW5qZWN0b3JDb250ZXh0Q29tcG9uZW50Jyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zU2VydmljZSA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25FeGVjdXRvciA9IGluamVjdChBY3Rpb25FeGVjdXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIG1ldGFkYXRhIGFuZCBlZGl0b3IgbW9kZSBpbnB1dFxuICAgIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRJbnB1dERhdGE8SXRlbSwgU2VydmljZT4+KCk7XG5cbiAgICBwdWJsaWMgYWN0aW9uUnVuID0gb3V0cHV0PEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIHB1YmxpYyBhY3Rpb25DYW5jZWwgPSBvdXRwdXQ8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBwdWJsaWMgZm9ybUVkaXRvckNtcCA9IHZpZXdDaGlsZChGb3JtRWRpdG9yQ29tcG9uZW50KTtcblxuICAgIHByaXZhdGUgaGFzVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvclRpdGxlICE9PSBudWxsKTtcbiAgICBwdWJsaWMgdGl0bGUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBkYXRhXG4gICAgcHVibGljIGl0ZW0gPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gc2lnbmFsPElkVHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgYWN0aW9uRGF0YSA9IHNpZ25hbDxBY3Rpb25EYXRhIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBlZGl0b3JBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKS5kZXNjcmlwdG9yKTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwcml2YXRlIGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aEJ1dHRvbk9wdHMoe1xuICAgICAgICAgICAgICAgICAgICAuLi5hY3Rpb24uYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBhY3Rpb24uYnV0dG9uPy5pY29uID09PSB1bmRlZmluZWQgPyAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdwaSBwaS1jaGVjaycgOiAncGkgcGktdGltZXMnKSA6IGFjdGlvbi5idXR0b24uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuc2F2ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEoKS5pc0RpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuY2xvc2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZ2VuZXJhbC5jYW5jZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3Rpb24uYnV0dG9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aE5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uYWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuZWRpdG9yQWN0aW9uKCkudGFibGV2aWV3Q2F0ZWdvcnkhKSkgPz8gW10pIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfSk7XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9ucygpLmZpbHRlcihhID0+IGEucG9zaXRpb24gPT09IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCkpO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICk7XG4gICAgcHVibGljIGZvb3RlckxlZnRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3Rpb25zKCkuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQpKTtcbiAgICBwdWJsaWMgZm9vdGVyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgKTtcblxuICAgIHByaXZhdGUgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwcml2YXRlIGluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIGZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBmb3JtVmFsdWUgPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGF1dG9TYXZlU3RhdHVzID0gc2lnbmFsPEVkaXRvckF1dG9TYXZlU3RhdHVzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbGFzdFN1Ym1pdEl0ZW0/OiBJdGVtO1xuXG4gICAgLy8gc3Vic2NyaXB0aW9ucyBhbmQgZWZmZWN0c1xuICAgICN0aXRsZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI2RhdGFFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhcbiAgICAgICAgW3RoaXMuZGF0YV0sXG4gICAgICAgIChbZGF0YV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbS5zZXQoZGF0YS5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbUlkLnNldChkYXRhLml0ZW1JZCk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkRhdGEuc2V0KGRhdGEuYWN0aW9uRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UoZGF0YS5hY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vdGlmeSBleGVjdXRvciB0byBmb3IgYWN0aXZhdGlvbiB0byBlbmRcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25FZGl0b3JJbml0KHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaW5zdGFuY2UsIHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAge2ZpcnN0T25seTogdHJ1ZX1cbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAjaGFzVGl0bGVFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5oYXNUaXRsZV0sIChbaGFzVGl0bGVdKSA9PiB7XG4gICAgICAgIGlmICghaGFzVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN0aXRsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuI3RpdGxlU3Vic2NyaXB0aW9uID0gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaXRlbSgpKS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3RpdGxlVXBkYXRlU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuaGFzVGl0bGUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodG9PYnNlcnZhYmxlKHRoaXMuZWRpdG9yQWN0aW9uKSwgdG9PYnNlcnZhYmxlKHRoaXMuaXRlbSkpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoKFtoYXNUaXRsZSwgZWRpdG9yQWN0aW9uLCBpdGVtXSkgPT4gKGhhc1RpdGxlID8gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIGVkaXRvckFjdGlvbiwgaXRlbSkgOiBvZih1bmRlZmluZWQpKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodGl0bGUgPz8gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YURpYWxvZ0NvbmZpZyA9IHRoaXMuZGF0YSgpLmRpYWxvZ0NvbmZpZztcbiAgICAgICAgICAgIGlmIChkYXRhRGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZGF0YURpYWxvZ0NvbmZpZy5oZWFkZXIgPSB0aXRsZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0aXRsZSA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3ZpZXdDb250YWluZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclxuICAgICAgICA/IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYSA9PiAodGhpcy5pc0FjdGlvbk1haW5Ud0VkaXRvcihhKSA/ICh0aGlzLnZpZXdDb250YWluZXI/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUikpLFxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICN2aWV3Q29udGFpbmVyRWRpdG9yQ2xvc2VTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGEgPT4gKHRoaXMuaXNBY3Rpb25NYWluVHdFZGl0b3IoYSkgPyAodGhpcy52aWV3Q29udGFpbmVyPy5lZGl0b3JDbG9zZSQgPz8gTkVWRVIpIDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICNkYXRhUHJvdmlkZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IChhY3Rpb24uZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgIH0pO1xuICAgICN2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy52aWV3Q29udGFpbmVyLmRhdGFQcm92aWRlcilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pKSxcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2RhdGFQcm92aWRlciwgYWN0aW9uXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aW9uTWFpblR3RWRpdG9yKGFjdGlvbikgJiYgYWN0aW9uLmRhdGFQcm92aWRlciA9PSBudWxsID8gKChkYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlciB8IHVuZGVmaW5lZCk/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiBlID0+IHRoaXMub25FZGl0b3JSZXNldChlKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy4jdGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMudW5zZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9yRGVzdHJveShpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBGb3JtRWRpdG9yU3VibWl0RXZlbnQ8SXRlbT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcGFyYW1ldGVyc1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiA9IHtcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICAgICAgaXRlbTogZXZlbnQuZm9ybUl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogdGhpcy5hY3Rpb25EYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JTdWJtaXQoXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Ym1pdEl0ZW0gPSBldmVudC5mb3JtSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxJZFByb3AgPSB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IubW9kZWw/LmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXRlbUlkKCkgJiYgbW9kZWxJZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNvdmVyIGNyZWF0aW9uIVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtSWQocmVzW21vZGVsSWRQcm9wIGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuLmVtaXQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEFjdGlvbiBlZGl0b3IgY2Fubm90IGJlIGNhbmNlbGVkIGZvciAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0sIGJlY2F1c2Ugbm8gYWN0aW9uIGluc3RhbmNlIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbkNhbmNlbC5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZmluaXNoQWN0aW9uKHRoaXMuaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtSWQoaXRlbUlkOiBJZFR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtSWQuc2V0KGl0ZW1JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUl0ZW0oaXRlbTogSXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLml0ZW0uc2V0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCkge1xuICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8uc3VibWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3JtVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BdXRvU2F2ZSh2YWx1ZTogRWRpdG9yQXV0b1NhdmVTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1cy5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uIGlzIG5vdCBpbnN0YW50aWF0ZWQgaW4gYWN0aW9uIGVkaXRvciBmb3IgYWN0aW9uICR7dGhpcy5lZGl0b3JBY3Rpb24oKS5hY3Rpb25OYW1lfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLmxvY2FsZSA9IHRoaXMuY29tbW9uc1NlcnZpY2UuYXBwRGF0YUxvY2FsZSgpITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UucHJldmlvdXNJbnN0YW5jZS5jb250ZXh0Py5wYXJhbWV0ZXJzLml0ZW0pIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMuZm9ybUl0ZW0gPSB0aGlzLmluc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UuY29udGV4dC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCA9IHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yRmV0Y2goXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFjdGlvbigpLFxuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbShyZXMgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFZGl0b3JFbmFibGVkKGlzRW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZC5zZXQoIWlzRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzQWN0aW9uSW5zdGFuY2UoaW5zdGFuY2U6IElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdVbmtub3duIHR5cGUgb2YgYWN0aW9uIGluc3RhbmNlIHJlY2VpdmVkJywge2RldGFpbHM6IGluc3RhbmNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgY29weSBvZiBpdGVtIGFuZCB1cGRhdGUgdGl0bGUgdG8gYmUgb24gdGhlIGxhdGVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKG9iamVjdERlZXBDb3B5KHRoaXMubGFzdFN1Ym1pdEl0ZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBhbHNvIHVuc2V0SW5zdGFuY2UsIGJ1dCBsZXQgdGhpcyBmb3IgcmVhY3RpdmF0aW9uSW5zdGFuY2UkIGxpc3RlbmVyIHRvIG5vdCBpbnRlcmZlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5yZWFjdGl2YXRpb25JbnN0YW5jZSQuc3Vic2NyaWJlKG5ld0luc3RhbmNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZShuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZXRJbnN0YW5jZSgpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25NYWluVHdFZGl0b3IoYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxhbnk+KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgIT0gbnVsbCAmJlxuICAgICAgICAgICAgW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFVEFJTFMsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVQsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0uaW5jbHVkZXMoYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIHByaXZhdGUgYmVmb3JlV2luZG93VW5sb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKCkuaXNEaWFsb2cgJiYgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlybSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5Fc2NhcGUnKVxuICAgIHByaXZhdGUgb25Fc2NhcGVQcmVzc2VkKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5pc0RpYWxvZyAmJlxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUgJiZcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYgJiZcbiAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYpPy5pbnN0YW5jZS5jb250YWluZXI/LnN0eWxlLnpJbmRleCA/PyAnJykgPT09IFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICApXG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKGNhbGxGcm9tR3VhcmQgPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlICYmIHRoaXMuZWRpdG9yQWN0aW9uKCkudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbkRpYWxvZyhjYWxsRnJvbUd1YXJkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24uaGVhZGVyJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpLFxuICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwueWVzJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC5ubycpLFxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVkaXRvclJlc2V0KGV2ZW50PzogRWRpdG9yUmVzZXRFdmVudDxJdGVtPikge1xuICAgICAgICBpZiAoZXZlbnQ/LmZldGNoKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Py5pdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8ucmVzZXRGb3JtTW9kZWwoZXZlbnQuaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQ/LmZpZWxkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnJlc2V0RmllbGRWYWx1ZShrZXksIGV2ZW50LmZpZWxkc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5yZXNldEZvcm1Nb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dElucHV0RGF0YTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgZGVzY3JpcHRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT47XG4gICAgaXNEaWFsb2c6IGJvb2xlYW47XG4gICAgZGlhbG9nQ29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZztcbiAgICBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgaXRlbT86IEl0ZW07XG4gICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPjtcbiAgICBhY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+O1xuICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBJQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+O1xufVxuIiwiQGlmICghZGF0YSgpLmlzRGlhbG9nICYmIHRpdGxlKCkpIHtcbiAgICA8aDU+e3sgdGl0bGUoKSB9fTwvaDU+XG59XG5AaWYgKGRhdGEoKS5pc0RpYWxvZyAmJiBlZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICA8c3BhbiBjbGFzcz1cInAtZGlhbG9nLWhlYWRlciBkaWFsb2ctY2xvc2UtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItaWNvbiBwLWRpYWxvZy1oZWFkZXItbWF4aW1pemUgcC1saW5rXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItY2xvc2UtaWNvbiBwaSBwaS10aW1lc1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxufVxuPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgQGlmICh0b29sYmFyTGVmdEFjdGlvbnMoKS5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvciAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8bW5nLWZvcm0tZWRpdG9yXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvclwiXG4gICAgICAgICAgICAgICAgW2VkaXRvcklkXT1cImVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWVMb25nXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIlxuICAgICAgICAgICAgICAgIFtpc0Zvcm1EaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBzaG93QXV0b1NhdmVTdGF0dXM9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGF1dG9TYXZlU3RhdHVzKT1cIm9uQXV0b1NhdmUoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtbmctYWN0aW9uLWVkaXRvci1mb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICA8bW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzIFtzdGF0dXNdPVwiYXV0b1NhdmVTdGF0dXMoKVwiPjwvbW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBmb290ZXJSaWdodEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,27 +1,44 @@
1
1
  import { map, mergeMap } from 'rxjs/operators';
2
2
  import { getI18n, getI18nAsync } from '@mediusinc/mng-commons/core';
3
3
  import { getI18nModelParams, getI18nModelParamsAsync } from '@mediusinc/mng-commons/model';
4
- export function getI18nForAction(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
5
- const keys = getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
6
- const i18nParams = getI18nActionParams(translate, action, item, params);
4
+ /**
5
+ * Asynchronously retrieves internationalized text for a specified action.
6
+ *
7
+ * If no translation is found for actionPathKeys, the fallback is used (if provided).
8
+ * If custom key is provided, no other key will be used.
9
+ * Item can be interpolated under itemTitle, itemId (if specified in action model) or under item.* (JSON-like path to property).
10
+ * Params are interpolated in translation.
11
+ *
12
+ * @param {TranslateService} translate - The translation service used for retrieving localized strings.
13
+ * @param {ActionDescriptorInst<any>} action - The action descriptor that provides context for localization keys and parameters.
14
+ * @param {string | Array<string>} pathKeys - A string or array of strings representing the priority order of localization keys to look up for the action.
15
+ * @param {ActionI18nOptsType} [opts] - Optional settings to customize the localization behavior, including custom keys, fallback keys, parameters, and missing translation strategies.
16
+ * @return {Observable<string | null>} An observable that emits the localized string for the action or null if no appropriate translation is found.
17
+ */
18
+ export function getI18nForAction(translate, action, pathKeys, opts) {
19
+ const keys = getKeysByPriority(action, pathKeys, opts?.customKey, opts?.fallbackKey);
20
+ const i18nParams = getI18nActionParams(translate, action, opts?.item, opts?.params);
7
21
  const i18nValue = getI18n(translate, i18nParams, ...keys);
8
- return getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey });
22
+ return getTranslationDependingOnStrategy(opts?.missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey: opts?.fallbackKey });
9
23
  }
10
24
  /**
11
- * Returns async translation for given keys with given params.
12
- * @param translate TranslateService
13
- * @param action action descriptor
14
- * @param actionPathKeys action path keys
15
- * @param customKey custom key
16
- * @param item item
17
- * @param fallbackKey fallback key, used as fallback key
18
- * @param params additional params for translation
19
- * @param missingTranslationStrategy strategy when no translation is found
25
+ * Asynchronously retrieves internationalized text for a specified action.
26
+ *
27
+ * If no translation is found for actionPathKeys, the fallback is used (if provided).
28
+ * If custom key is provided, no other key will be used.
29
+ * Item can be interpolated under itemTitle, itemId (if specified in action model) or under item.* (JSON-like path to property).
30
+ * Params are interpolated in translation.
31
+ *
32
+ * @param {TranslateService} translate - The translation service used for retrieving localized strings.
33
+ * @param {ActionDescriptorInst<any>} action - The action descriptor that provides context for localization keys and parameters.
34
+ * @param {string | Array<string>} pathKeys - A string or array of strings representing the priority order of localization keys to look up for the action.
35
+ * @param {ActionI18nOptsType} [opts] - Optional settings to customize the localization behavior, including custom keys, fallback keys, parameters, and missing translation strategies.
36
+ * @return {Observable<string | null>} An observable that emits the localized string for the action or null if no appropriate translation is found.
20
37
  */
21
- export function getI18nForActionAsync(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
22
- return getI18nActionParamsAsync(translate, action, item, params).pipe(mergeMap(i18nParams => {
23
- const keys = getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
24
- return getI18nAsync(translate, i18nParams, ...keys).pipe(map(i18nValue => getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey })));
38
+ export function getI18nForActionAsync(translate, action, pathKeys, opts) {
39
+ return getI18nActionParamsAsync(translate, action, opts?.item, opts?.params).pipe(mergeMap(i18nParams => {
40
+ const keys = getKeysByPriority(action, pathKeys, opts?.customKey, opts?.fallbackKey);
41
+ return getI18nAsync(translate, i18nParams, ...keys).pipe(map(i18nValue => getTranslationDependingOnStrategy(opts?.missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey: opts?.fallbackKey })));
25
42
  }));
26
43
  }
27
44
  /**
@@ -40,15 +57,16 @@ function getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nVal
40
57
  case 'returnFallbackKey':
41
58
  return fallbackKey ?? null;
42
59
  case 'returnFirstKey':
60
+ default:
43
61
  return firstKey ?? null;
44
62
  }
45
63
  }
46
64
  }
47
65
  export function getI18nActionTitleAsync(translate, action, item) {
48
- return getI18nForActionAsync(translate, action, 'title', undefined, item);
66
+ return getI18nForActionAsync(translate, action, 'title', { item });
49
67
  }
50
68
  export function getI18nActionEditorTitleAsync(translate, action, item) {
51
- return getI18nForActionAsync(translate, action, ['editor.title', 'title'], action.editorTitle ?? undefined, item, undefined, action.editorTitleParams ?? undefined);
69
+ return getI18nForActionAsync(translate, action, ['editor.title', 'title'], { customKey: action.editorTitle ?? undefined, item, params: action.editorTitleParams });
52
70
  }
53
71
  export function getI18nActionParams(translate, action, item, params = {}) {
54
72
  const i18nParams = getI18nModelParams(translate, action.model ?? undefined, item, params);
@@ -66,17 +84,19 @@ function getKeysByPriority(action, actionPathKeys, customKey, fallbackKey) {
66
84
  if (customKey) {
67
85
  keys.push(customKey);
68
86
  }
69
- if (!Array.isArray(actionPathKeys)) {
70
- actionPathKeys = [actionPathKeys];
71
- }
72
- actionPathKeys.forEach(k => {
73
- if (action.i18nModelActionBaseKey)
74
- keys.push(`${action.i18nModelActionBaseKey}.${k}`);
75
- keys.push(`${action.actionName}.${k}`);
76
- });
77
- if (fallbackKey) {
78
- keys.push(fallbackKey);
87
+ else {
88
+ if (!Array.isArray(actionPathKeys)) {
89
+ actionPathKeys = [actionPathKeys];
90
+ }
91
+ actionPathKeys.forEach(k => {
92
+ if (action.i18nModelActionBaseKey)
93
+ keys.push(`${action.i18nModelActionBaseKey}.${k}`);
94
+ keys.push(`${action.actionName}.${k}`);
95
+ });
96
+ if (fallbackKey) {
97
+ keys.push(fallbackKey);
98
+ }
79
99
  }
80
100
  return keys;
81
101
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2hlbHBlcnMvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBaUMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBR3pGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsU0FBMkIsRUFDM0IsTUFBaUMsRUFDakMsY0FBc0MsRUFDdEMsU0FBa0IsRUFDbEIsSUFBVSxFQUNWLFdBQW9CLEVBQ3BCLE1BQVksRUFDWiw2QkFBNkQsZ0JBQWdCO0lBRTdFLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUQsT0FBTyxpQ0FBaUMsQ0FBQywwQkFBMEIsRUFBRSxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7QUFDdEgsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFNBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLGNBQXNDLEVBQ3RDLFNBQWtCLEVBQ2xCLElBQVUsRUFDVixXQUFvQixFQUNwQixNQUFZLEVBQ1osNkJBQTZELGdC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QUksR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDakMsY0FBYyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxNQUFNLENBQUMsc0JBQXNCO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7STE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCBnZXRJMThuLCBnZXRJMThuQXN5bmN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge2dldEkxOG5Nb2RlbFBhcmFtcywgZ2V0STE4bk1vZGVsUGFyYW1zQXN5bmN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdCwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuRm9yQWN0aW9uKFxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sXG4gICAgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sXG4gICAgY3VzdG9tS2V5Pzogc3RyaW5nLFxuICAgIGl0ZW0/OiBhbnksXG4gICAgZmFsbGJhY2tLZXk/OiBzdHJpbmcsXG4gICAgcGFyYW1zPzogYW55LFxuICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgPSAncmV0dXJuRmlyc3RLZXknXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBrZXlzID0gZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBhY3Rpb25QYXRoS2V5cywgY3VzdG9tS2V5LCBmYWxsYmFja0tleSk7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5BY3Rpb25QYXJhbXModHJhbnNsYXRlLCBhY3Rpb24sIGl0ZW0sIHBhcmFtcyk7XG4gICAgY29uc3QgaTE4blZhbHVlID0gZ2V0STE4bih0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIC4uLmtleXMpO1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3kobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIHtpMThuVmFsdWUsIGZpcnN0S2V5OiBrZXlzWzBdLCBmYWxsYmFja0tleX0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYXN5bmMgdHJhbnNsYXRpb24gZm9yIGdpdmVuIGtleXMgd2l0aCBnaXZlbiBwYXJhbXMuXG4gKiBAcGFyYW0gdHJhbnNsYXRlIFRyYW5zbGF0ZVNlcnZpY2VcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uIGRlc2NyaXB0b3JcbiAqIEBwYXJhbSBhY3Rpb25QYXRoS2V5cyBhY3Rpb24gcGF0aCBrZXlzXG4gKiBAcGFyYW0gY3VzdG9tS2V5IGN1c3RvbSBrZXlcbiAqIEBwYXJhbSBpdGVtIGl0ZW1cbiAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXksIHVzZWQgYXMgZmFsbGJhY2sga2V5XG4gKiBAcGFyYW0gcGFyYW1zIGFkZGl0aW9uYWwgcGFyYW1zIGZvciB0cmFuc2xhdGlvblxuICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5Gb3JBY3Rpb25Bc3luYyhcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LFxuICAgIGFjdGlvblBhdGhLZXlzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICBpdGVtPzogYW55LFxuICAgIGZhbGxiYWNrS2V5Pzogc3RyaW5nLFxuICAgIHBhcmFtcz86IGFueSxcbiAgICBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneTogSTE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5ID0gJ3JldHVybkZpcnN0S2V5J1xuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGdldEkxOG5BY3Rpb25QYXJhbXNBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKS5waXBlKFxuICAgICAgICBtZXJnZU1hcChpMThuUGFyYW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRJMThuQXN5bmModHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChpMThuVmFsdWUgPT4gZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCB7aTE4blZhbHVlLCBmaXJzdEtleToga2V5c1swXSwgZmFsbGJhY2tLZXl9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyYW5zbGF0aW9uIGRlcGVuZGluZyBvbiBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneVxuICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAqIEBwYXJhbSB2YWx1ZXMgb2JqZWN0IHdpdGggdmFsdWVzLCBpMThuVmFsdWUgaXMgdHJhbnNsYXRpb24sIGZpcnN0S2V5IGlzIGZpcnN0IGtleSBpbiBhcnJheSBvZiBrZXlzLCBmYWxsYmFja0tleSBpcyBmYWxsYmFjayBrZXlcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KFxuICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksXG4gICAge2kxOG5WYWx1ZSwgZmlyc3RLZXksIGZhbGxiYWNrS2V5fToge2kxOG5WYWx1ZTogc3RyaW5nIHwgbnVsbDsgZmlyc3RLZXk/OiBzdHJpbmc7IGZhbGxiYWNrS2V5Pzogc3RyaW5nfVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGkxOG5WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaTE4blZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JldHVybk51bGwnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY2FzZSAncmV0dXJuRmFsbGJhY2tLZXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFja0tleSA/PyBudWxsO1xuICAgICAgICAgICAgY2FzZSAncmV0dXJuRmlyc3RLZXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEtleSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCAndGl0bGUnLCB1bmRlZmluZWQsIGl0ZW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCBbJ2VkaXRvci50aXRsZScsICd0aXRsZSddLCBhY3Rpb24uZWRpdG9yVGl0bGUgPz8gdW5kZWZpbmVkLCBpdGVtLCB1bmRlZmluZWQsIGFjdGlvbi5lZGl0b3JUaXRsZVBhcmFtcyA/PyB1bmRlZmluZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5Nb2RlbFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbi5tb2RlbCA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcyk7XG4gICAgcmV0dXJuIHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5BY3Rpb25QYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGdldEkxOG5Nb2RlbFBhcmFtc0FzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKS5waXBlKG1hcChpMThuUGFyYW1zID0+IHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuQWN0aW9uUGFyYW1zKHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGlvblBhdGhLZXlzKSkge1xuICAgICAgICBhY3Rpb25QYXRoS2V5cyA9IFthY3Rpb25QYXRoS2V5c107XG4gICAgfVxuICAgIGFjdGlvblBhdGhLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleSkga2V5cy5wdXNoKGAke2FjdGlvbi5pMThuTW9kZWxBY3Rpb25CYXNlS2V5fS4ke2t9YCk7XG4gICAgICAgIGtleXMucHVzaChgJHthY3Rpb24uYWN0aW9uTmFtZX0uJHtrfWApO1xuICAgIH0pO1xuICAgIGlmIChmYWxsYmFja0tleSkge1xuICAgICAgICBrZXlzLnB1c2goZmFsbGJhY2tLZXkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2hlbHBlcnMvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBaUMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBV3pGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsU0FBMkIsRUFBRSxNQUFpQyxFQUFFLFFBQWdDLEVBQUUsSUFBeUI7SUFDeEosTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRixNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUQsT0FBTyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7QUFDL0ksQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFNBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLFFBQWdDLEVBQ2hDLElBQXlCO0lBRXpCLE9BQU8sd0JBQXdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzdFLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ3BELEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRSxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUN4SixDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQ0FBaUMsQ0FDdEMsMEJBQXNFLEVBQ3RFLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQXNFO0lBRXZHLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3JCLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7U0FBTSxDQUFDO1FBQ0osUUFBUSwwQkFBMEIsRUFBRSxDQUFDO1lBQ2pDLEtBQUssWUFBWTtnQkFDYixPQUFPLElBQUksQ0FBQztZQUNoQixLQUFLLG1CQUFtQjtnQkFDcEIsT0FBTyxXQUFXLElBQUksSUFBSSxDQUFDO1lBQy9CLEtBQUssZ0JBQWdCLENBQUM7WUFDdEI7Z0JBQ0ksT0FBTyxRQUFRLElBQUksSUFBSSxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxTQUEyQixFQUFFLE1BQWlDLEVBQUUsSUFBVTtJQUM5RyxPQUFPLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFNBQTJCLEVBQUUsTUFBdUMsRUFBRSxJQUFVO0lBQzFILE9BQU8scUJBQXFCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUM7QUFDckssQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUEyQixFQUFFLE1BQWlDLEVBQUUsSUFBVSxFQUFFLFNBQWMsRUFBRTtJQUM1SCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFGLE9BQU8sd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxTQUEyQixFQUFFLE1BQWlDLEVBQUUsSUFBVSxFQUFFLFNBQWMsRUFBRTtJQUNqSSxPQUFPLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFNBQWMsRUFBRTtJQUNyRCxNQUFNLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO0lBQ3JCLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE1BQWlDLEVBQUUsY0FBc0MsRUFBRSxTQUFrQixFQUFFLFdBQW9CO0lBQzFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QixDQUFDO1NBQU0sQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakMsY0FBYyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxNQUFNLENBQUMsc0JBQXNCO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIGdldEkxOG4sIGdldEkxOG5Bc3luY30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7Z2V0STE4bk1vZGVsUGFyYW1zLCBnZXRJMThuTW9kZWxQYXJhbXNBc3luY30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0LCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxudHlwZSBBY3Rpb25JMThuT3B0c1R5cGUgPSB7XG4gICAgY3VzdG9tS2V5Pzogc3RyaW5nO1xuICAgIGZhbGxiYWNrS2V5Pzogc3RyaW5nO1xuICAgIGl0ZW0/OiBhbnk7XG4gICAgcGFyYW1zPzogYW55O1xuICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5PzogSTE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5O1xufTtcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgaW50ZXJuYXRpb25hbGl6ZWQgdGV4dCBmb3IgYSBzcGVjaWZpZWQgYWN0aW9uLlxuICpcbiAqIElmIG5vIHRyYW5zbGF0aW9uIGlzIGZvdW5kIGZvciBhY3Rpb25QYXRoS2V5cywgdGhlIGZhbGxiYWNrIGlzIHVzZWQgKGlmIHByb3ZpZGVkKS5cbiAqIElmIGN1c3RvbSBrZXkgaXMgcHJvdmlkZWQsIG5vIG90aGVyIGtleSB3aWxsIGJlIHVzZWQuXG4gKiBJdGVtIGNhbiBiZSBpbnRlcnBvbGF0ZWQgdW5kZXIgaXRlbVRpdGxlLCBpdGVtSWQgKGlmIHNwZWNpZmllZCBpbiBhY3Rpb24gbW9kZWwpIG9yIHVuZGVyIGl0ZW0uKiAoSlNPTi1saWtlIHBhdGggdG8gcHJvcGVydHkpLlxuICogUGFyYW1zIGFyZSBpbnRlcnBvbGF0ZWQgaW4gdHJhbnNsYXRpb24uXG4gKlxuICogQHBhcmFtIHtUcmFuc2xhdGVTZXJ2aWNlfSB0cmFuc2xhdGUgLSBUaGUgdHJhbnNsYXRpb24gc2VydmljZSB1c2VkIGZvciByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzLlxuICogQHBhcmFtIHtBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+fSBhY3Rpb24gLSBUaGUgYWN0aW9uIGRlc2NyaXB0b3IgdGhhdCBwcm92aWRlcyBjb250ZXh0IGZvciBsb2NhbGl6YXRpb24ga2V5cyBhbmQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gcGF0aEtleXMgLSBBIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgcHJpb3JpdHkgb3JkZXIgb2YgbG9jYWxpemF0aW9uIGtleXMgdG8gbG9vayB1cCBmb3IgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSB7QWN0aW9uSTE4bk9wdHNUeXBlfSBbb3B0c10gLSBPcHRpb25hbCBzZXR0aW5ncyB0byBjdXN0b21pemUgdGhlIGxvY2FsaXphdGlvbiBiZWhhdmlvciwgaW5jbHVkaW5nIGN1c3RvbSBrZXlzLCBmYWxsYmFjayBrZXlzLCBwYXJhbWV0ZXJzLCBhbmQgbWlzc2luZyB0cmFuc2xhdGlvbiBzdHJhdGVnaWVzLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBsb2NhbGl6ZWQgc3RyaW5nIGZvciB0aGUgYWN0aW9uIG9yIG51bGwgaWYgbm8gYXBwcm9wcmlhdGUgdHJhbnNsYXRpb24gaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuRm9yQWN0aW9uKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LCBwYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiwgb3B0cz86IEFjdGlvbkkxOG5PcHRzVHlwZSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGtleXMgPSBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIHBhdGhLZXlzLCBvcHRzPy5jdXN0b21LZXksIG9wdHM/LmZhbGxiYWNrS2V5KTtcbiAgICBjb25zdCBpMThuUGFyYW1zID0gZ2V0STE4bkFjdGlvblBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbiwgb3B0cz8uaXRlbSwgb3B0cz8ucGFyYW1zKTtcbiAgICBjb25zdCBpMThuVmFsdWUgPSBnZXRJMThuKHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShvcHRzPy5taXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5OiBvcHRzPy5mYWxsYmFja0tleX0pO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHJldHJpZXZlcyBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IGZvciBhIHNwZWNpZmllZCBhY3Rpb24uXG4gKlxuICogSWYgbm8gdHJhbnNsYXRpb24gaXMgZm91bmQgZm9yIGFjdGlvblBhdGhLZXlzLCB0aGUgZmFsbGJhY2sgaXMgdXNlZCAoaWYgcHJvdmlkZWQpLlxuICogSWYgY3VzdG9tIGtleSBpcyBwcm92aWRlZCwgbm8gb3RoZXIga2V5IHdpbGwgYmUgdXNlZC5cbiAqIEl0ZW0gY2FuIGJlIGludGVycG9sYXRlZCB1bmRlciBpdGVtVGl0bGUsIGl0ZW1JZCAoaWYgc3BlY2lmaWVkIGluIGFjdGlvbiBtb2RlbCkgb3IgdW5kZXIgaXRlbS4qIChKU09OLWxpa2UgcGF0aCB0byBwcm9wZXJ0eSkuXG4gKiBQYXJhbXMgYXJlIGludGVycG9sYXRlZCBpbiB0cmFuc2xhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1RyYW5zbGF0ZVNlcnZpY2V9IHRyYW5zbGF0ZSAtIFRoZSB0cmFuc2xhdGlvbiBzZXJ2aWNlIHVzZWQgZm9yIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MuXG4gKiBAcGFyYW0ge0FjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT59IGFjdGlvbiAtIFRoZSBhY3Rpb24gZGVzY3JpcHRvciB0aGF0IHByb3ZpZGVzIGNvbnRleHQgZm9yIGxvY2FsaXphdGlvbiBrZXlzIGFuZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBwYXRoS2V5cyAtIEEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwcmlvcml0eSBvcmRlciBvZiBsb2NhbGl6YXRpb24ga2V5cyB0byBsb29rIHVwIGZvciB0aGUgYWN0aW9uLlxuICogQHBhcmFtIHtBY3Rpb25JMThuT3B0c1R5cGV9IFtvcHRzXSAtIE9wdGlvbmFsIHNldHRpbmdzIHRvIGN1c3RvbWl6ZSB0aGUgbG9jYWxpemF0aW9uIGJlaGF2aW9yLCBpbmNsdWRpbmcgY3VzdG9tIGtleXMsIGZhbGxiYWNrIGtleXMsIHBhcmFtZXRlcnMsIGFuZCBtaXNzaW5nIHRyYW5zbGF0aW9uIHN0cmF0ZWdpZXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxvY2FsaXplZCBzdHJpbmcgZm9yIHRoZSBhY3Rpb24gb3IgbnVsbCBpZiBubyBhcHByb3ByaWF0ZSB0cmFuc2xhdGlvbiBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5Gb3JBY3Rpb25Bc3luYyhcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LFxuICAgIHBhdGhLZXlzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgIG9wdHM/OiBBY3Rpb25JMThuT3B0c1R5cGVcbik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiBnZXRJMThuQWN0aW9uUGFyYW1zQXN5bmModHJhbnNsYXRlLCBhY3Rpb24sIG9wdHM/Lml0ZW0sIG9wdHM/LnBhcmFtcykucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoaTE4blBhcmFtcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBwYXRoS2V5cywgb3B0cz8uY3VzdG9tS2V5LCBvcHRzPy5mYWxsYmFja0tleSk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0STE4bkFzeW5jKHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blZhbHVlID0+IGdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShvcHRzPy5taXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5OiBvcHRzPy5mYWxsYmFja0tleX0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJhbnNsYXRpb24gZGVwZW5kaW5nIG9uIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5XG4gKiBAcGFyYW0gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgd2hlbiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZFxuICogQHBhcmFtIHZhbHVlcyBvYmplY3Qgd2l0aCB2YWx1ZXMsIGkxOG5WYWx1ZSBpcyB0cmFuc2xhdGlvbiwgZmlyc3RLZXkgaXMgZmlyc3Qga2V5IGluIGFycmF5IG9mIGtleXMsIGZhbGxiYWNrS2V5IGlzIGZhbGxiYWNrIGtleVxuICovXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3koXG4gICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5NaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSB8IHVuZGVmaW5lZCxcbiAgICB7aTE4blZhbHVlLCBmaXJzdEtleSwgZmFsbGJhY2tLZXl9OiB7aTE4blZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaXJzdEtleT86IHN0cmluZzsgZmFsbGJhY2tLZXk/OiBzdHJpbmd9XG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoaTE4blZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBpMThuVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAncmV0dXJuTnVsbCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjYXNlICdyZXR1cm5GYWxsYmFja0tleSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrS2V5ID8/IG51bGw7XG4gICAgICAgICAgICBjYXNlICdyZXR1cm5GaXJzdEtleSc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEtleSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCAndGl0bGUnLCB7aXRlbX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCBbJ2VkaXRvci50aXRsZScsICd0aXRsZSddLCB7Y3VzdG9tS2V5OiBhY3Rpb24uZWRpdG9yVGl0bGUgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXM6IGFjdGlvbi5lZGl0b3JUaXRsZVBhcmFtc30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5Nb2RlbFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbi5tb2RlbCA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcyk7XG4gICAgcmV0dXJuIHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5BY3Rpb25QYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGdldEkxOG5Nb2RlbFBhcmFtc0FzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKS5waXBlKG1hcChpMThuUGFyYW1zID0+IHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuQWN0aW9uUGFyYW1zKHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWN0aW9uUGF0aEtleXMpKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5cyA9IFthY3Rpb25QYXRoS2V5c107XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uUGF0aEtleXMuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleSkga2V5cy5wdXNoKGAke2FjdGlvbi5pMThuTW9kZWxBY3Rpb25CYXNlS2V5fS4ke2t9YCk7XG4gICAgICAgICAgICBrZXlzLnB1c2goYCR7YWN0aW9uLmFjdGlvbk5hbWV9LiR7a31gKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmYWxsYmFja0tleSkge1xuICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbiJdfQ==
@@ -1,17 +1,78 @@
1
- import { getI18nForError, toastMessage } from '@mediusinc/mng-commons/core';
1
+ import { getI18nErrorParams, getI18nForError, toastMessage } from '@mediusinc/mng-commons/core';
2
+ import { ActionEditorDescriptorInst } from '@mediusinc/mng-commons/tableview/api';
2
3
  import { getI18nForAction } from './i18n';
3
- export function actionNotificationSuccess(translate, action, functionName, messageService, customTitleKey, customMessageKey, item) {
4
- const actionSuccessTitle = getI18nForAction(translate, action, 'success.title', customTitleKey, item, 'general.success', functionName) ?? undefined;
5
- const actionSuccessMessage = getI18nForAction(translate, action, 'success.message', customMessageKey, item, 'general.successMessage', functionName) ?? undefined;
6
- return toastMessage(messageService, actionSuccessTitle, actionSuccessMessage);
4
+ /**
5
+ * Executes a notification success action for a given operation, translating
6
+ * and displaying a success message using the specified translation and message services.
7
+ *
8
+ * Provide title or message for custom titles (unrelated to model/action base paths for i18n).
9
+ * Item is interpolated as itemId, itemTitle or item.* for accessing desired properties.
10
+ * Set functionName in order to get specific translations for executing function (run, fetch, submit).
11
+ *
12
+ * @param {TranslateService} translate - The translation service used to retrieve localized messages.
13
+ * @param {MessageService} messageService - The message service responsible for displaying notifications.
14
+ * @param {ActionDescriptorInst<any>} action - The action descriptor instance that defines the operation.
15
+ * @param {ActionNotificationOptsType} [opts] - Optional configuration for customizing the success notification.
16
+ * @return {Message | undefined} The generated message object if a success message is found, otherwise undefined.
17
+ */
18
+ export function actionNotificationSuccess(translate, messageService, action, opts) {
19
+ const functionName = opts?.functionName ?? 'run';
20
+ const actionSuccessTitle = getI18nForAction(translate, action, getKeysByPriority(action, functionName, 'success', 'title'), {
21
+ customKey: opts?.title,
22
+ item: opts?.item,
23
+ fallbackKey: 'general.success'
24
+ }) ?? undefined;
25
+ const actionSuccessMessage = getI18nForAction(translate, action, getKeysByPriority(action, functionName, 'success', 'message'), {
26
+ customKey: opts?.message,
27
+ item: opts?.item,
28
+ fallbackKey: 'general.successMessage'
29
+ }) ?? undefined;
30
+ if (!actionSuccessMessage) {
31
+ return undefined;
32
+ }
33
+ return toastMessage(actionSuccessMessage, undefined, { messageService: messageService, title: actionSuccessTitle });
7
34
  }
8
- export function actionNotificationError(translate, action, error, functionName, messageService, item, severity = 'error') {
35
+ /**
36
+ * Displays a notification for an error that occurred during an action execution.
37
+ *
38
+ * Provide title or message for custom titles (unrelated to model/action base paths for i18n).
39
+ * Item is interpolated as itemId, itemTitle or item.* for accessing desired properties.
40
+ * Set functionName in order to get specific translations for executing function (run, fetch, submit).
41
+ *
42
+ * @param {TranslateService} translate - The service used for translations.
43
+ * @param {MessageService} messageService - The service used for displaying messages.
44
+ * @param {ActionDescriptorInst<any>} action - The action descriptor instance related to the error.
45
+ * @param {ICommonsError} error - The error object containing details about the error.
46
+ * @param {'warn' | 'error'} [severity='error'] - The severity level of the notification (either 'warn' or 'error').
47
+ * @param {ActionNotificationOptsType} [opts] - Optional parameters for customizing the notification, such as title, message, or function name.
48
+ * @return {Message} - The message object created and displayed as a notification.
49
+ */
50
+ export function actionNotificationError(translate, messageService, action, error, severity = 'error', opts) {
9
51
  const params = {
10
- errorMessage: getI18nForError(translate, error) ?? error.message
52
+ errorMessage: getI18nForError(translate, error) ?? error.message,
53
+ ...getI18nErrorParams(error)
11
54
  };
12
- const actionErrorTitle = getI18nForAction(translate, action, [`error.${functionName}.title`, 'error.title'], action.runNotificationErrorTitle, item, 'general.error', params) ?? undefined;
13
- const actionErrorMessage = getI18nForAction(translate, action, [`error.${functionName}.message`, 'error.message'], action.runNotificationErrorMessage, item, 'general.errorMessage', params) ??
14
- undefined;
15
- return toastMessage(messageService, actionErrorTitle, actionErrorMessage, severity, 'pi-exclamation-triangle');
55
+ const functionName = opts?.functionName ?? 'run';
56
+ const actionErrorTitle = getI18nForAction(translate, action, getKeysByPriority(action, functionName, 'error', 'title'), {
57
+ customKey: opts?.title,
58
+ item: opts?.item,
59
+ fallbackKey: 'general.error',
60
+ params
61
+ }) ?? undefined;
62
+ const actionErrorMessage = getI18nForAction(translate, action, getKeysByPriority(action, functionName, 'error', 'message'), {
63
+ customKey: opts?.message,
64
+ item: opts?.item,
65
+ fallbackKey: 'general.errorMessage',
66
+ params
67
+ });
68
+ return toastMessage(actionErrorMessage ?? error.message, severity, { messageService: messageService, icon: 'pi-exclamation-triangle', title: actionErrorTitle });
16
69
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vaGVscGVycy9ub3RpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFnQixlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFHekYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXhDLE1BQU0sVUFBVSx5QkFBeUIsQ0FDckMsU0FBMkIsRUFDM0IsTUFBaUMsRUFDakMsWUFBb0IsRUFDcEIsY0FBOEIsRUFDOUIsY0FBdUIsRUFDdkIsZ0JBQXlCLEVBQ3pCLElBQVU7SUFFVixNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3BKLE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsWUFBWSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2pLLE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLFNBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLEtBQW9CLEVBQ3BCLFlBQW9CLEVBQ3BCLGNBQThCLEVBQzlCLElBQVUsRUFDVixXQUE2QixPQUFPO0lBRXBDLE1BQU0sTUFBTSxHQUFHO1FBQ1gsWUFBWSxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU87S0FDbkUsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEdBQ2xCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLFlBQVksUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUN0SyxNQUFNLGtCQUFrQixHQUNwQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxZQUFZLFVBQVUsRUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sQ0FBQztRQUNqSyxTQUFTLENBQUM7SUFDZCxPQUFPLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDbkgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7SUNvbW1vbnNFcnJvciwgZ2V0STE4bkZvckVycm9yLCB0b2FzdE1lc3NhZ2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2dldEkxOG5Gb3JBY3Rpb259IGZyb20gJy4vaTE4bic7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sXG4gICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIGN1c3RvbVRpdGxlS2V5Pzogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2VLZXk/OiBzdHJpbmcsXG4gICAgaXRlbT86IGFueVxuKTogTWVzc2FnZSB7XG4gICAgY29uc3QgYWN0aW9uU3VjY2Vzc1RpdGxlID0gZ2V0STE4bkZvckFjdGlvbih0cmFuc2xhdGUsIGFjdGlvbiwgJ3N1Y2Nlc3MudGl0bGUnLCBjdXN0b21UaXRsZUtleSwgaXRlbSwgJ2dlbmVyYWwuc3VjY2VzcycsIGZ1bmN0aW9uTmFtZSkgPz8gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvblN1Y2Nlc3NNZXNzYWdlID0gZ2V0STE4bkZvckFjdGlvbih0cmFuc2xhdGUsIGFjdGlvbiwgJ3N1Y2Nlc3MubWVzc2FnZScsIGN1c3RvbU1lc3NhZ2VLZXksIGl0ZW0sICdnZW5lcmFsLnN1Y2Nlc3NNZXNzYWdlJywgZnVuY3Rpb25OYW1lKSA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRvYXN0TWVzc2FnZShtZXNzYWdlU2VydmljZSwgYWN0aW9uU3VjY2Vzc1RpdGxlLCBhY3Rpb25TdWNjZXNzTWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25Ob3RpZmljYXRpb25FcnJvcihcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LFxuICAgIGVycm9yOiBJQ29tbW9uc0Vycm9yLFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBpdGVtPzogYW55LFxuICAgIHNldmVyaXR5OiAnd2FybicgfCAnZXJyb3InID0gJ2Vycm9yJ1xuKTogTWVzc2FnZSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBlcnJvck1lc3NhZ2U6IGdldEkxOG5Gb3JFcnJvcih0cmFuc2xhdGUsIGVycm9yKSA/PyBlcnJvci5tZXNzYWdlXG4gICAgfTtcbiAgICBjb25zdCBhY3Rpb25FcnJvclRpdGxlID1cbiAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0cmFuc2xhdGUsIGFjdGlvbiwgW2BlcnJvci4ke2Z1bmN0aW9uTmFtZX0udGl0bGVgLCAnZXJyb3IudGl0bGUnXSwgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmVycm9yJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWN0aW9uRXJyb3JNZXNzYWdlID1cbiAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0cmFuc2xhdGUsIGFjdGlvbiwgW2BlcnJvci4ke2Z1bmN0aW9uTmFtZX0ubWVzc2FnZWAsICdlcnJvci5tZXNzYWdlJ10sIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UsIGl0ZW0sICdnZW5lcmFsLmVycm9yTWVzc2FnZScsIHBhcmFtcykgPz9cbiAgICAgICAgdW5kZWZpbmVkO1xuICAgIHJldHVybiB0b2FzdE1lc3NhZ2UobWVzc2FnZVNlcnZpY2UsIGFjdGlvbkVycm9yVGl0bGUsIGFjdGlvbkVycm9yTWVzc2FnZSwgc2V2ZXJpdHksICdwaS1leGNsYW1hdGlvbi10cmlhbmdsZScpO1xufVxuIl19
70
+ function getKeysByPriority(action, functionName, prefix, suffix) {
71
+ const keys = [functionName];
72
+ if (action instanceof ActionEditorDescriptorInst && (functionName === 'run' || functionName === 'submit')) {
73
+ keys.pop();
74
+ keys.push(`submit`, `run`);
75
+ }
76
+ return keys.map(key => `${prefix}.${key}.${suffix}`).concat(`${prefix}.${suffix}`);
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vaGVscGVycy9ub3RpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0csT0FBTyxFQUF1QiwwQkFBMEIsRUFBeUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5SCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFPeEM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDckMsU0FBMkIsRUFDM0IsY0FBOEIsRUFDOUIsTUFBaUMsRUFDakMsSUFBaUM7SUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUM7SUFDakQsTUFBTSxrQkFBa0IsR0FDcEIsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUM3RixTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUs7UUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1FBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7S0FDakMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNwQixNQUFNLG9CQUFvQixHQUN0QixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQy9GLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTztRQUN4QixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7UUFDaEIsV0FBVyxFQUFFLHdCQUF3QjtLQUN4QyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsRUFBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBQyxDQUFDLENBQUM7QUFDdEgsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxTQUEyQixFQUMzQixjQUE4QixFQUM5QixNQUFpQyxFQUNqQyxLQUFvQixFQUNwQixXQUE2QixPQUFPLEVBQ3BDLElBQWlDO0lBRWpDLE1BQU0sTUFBTSxHQUFHO1FBQ1gsWUFBWSxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU87UUFDaEUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7S0FDL0IsQ0FBQztJQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxZQUFZLElBQUksS0FBSyxDQUFDO0lBQ2pELE1BQU0sZ0JBQWdCLEdBQ2xCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDM0YsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLO1FBQ3RCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsZUFBZTtRQUM1QixNQUFNO0tBQ1QsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNwQixNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEgsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPO1FBQ3hCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLE1BQU07S0FDVCxDQUFDLENBQUM7SUFDSCxPQUFPLFlBQVksQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUM7QUFDbkssQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsTUFBaUMsRUFBRSxZQUFvQixFQUFFLE1BQWMsRUFBRSxNQUFjO0lBQzlHLE1BQU0sSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUIsSUFBSSxNQUFNLFlBQVksMEJBQTBCLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxJQUFJLFlBQVksS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3hHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN2RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZSwgTWVzc2FnZVNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtJQ29tbW9uc0Vycm9yLCBnZXRJMThuRXJyb3JQYXJhbXMsIGdldEkxOG5Gb3JFcnJvciwgdG9hc3RNZXNzYWdlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdCwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QsIEFjdGlvbk5vdGlmaWNhdGlvblR5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7Z2V0STE4bkZvckFjdGlvbn0gZnJvbSAnLi9pMThuJztcblxudHlwZSBBY3Rpb25Ob3RpZmljYXRpb25PcHRzVHlwZSA9IEFjdGlvbk5vdGlmaWNhdGlvblR5cGUgJiB7XG4gICAgaXRlbT86IGFueTtcbiAgICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgbm90aWZpY2F0aW9uIHN1Y2Nlc3MgYWN0aW9uIGZvciBhIGdpdmVuIG9wZXJhdGlvbiwgdHJhbnNsYXRpbmdcbiAqIGFuZCBkaXNwbGF5aW5nIGEgc3VjY2VzcyBtZXNzYWdlIHVzaW5nIHRoZSBzcGVjaWZpZWQgdHJhbnNsYXRpb24gYW5kIG1lc3NhZ2Ugc2VydmljZXMuXG4gKlxuICogUHJvdmlkZSB0aXRsZSBvciBtZXNzYWdlIGZvciBjdXN0b20gdGl0bGVzICh1bnJlbGF0ZWQgdG8gbW9kZWwvYWN0aW9uIGJhc2UgcGF0aHMgZm9yIGkxOG4pLlxuICogSXRlbSBpcyBpbnRlcnBvbGF0ZWQgYXMgaXRlbUlkLCBpdGVtVGl0bGUgb3IgaXRlbS4qIGZvciBhY2Nlc3NpbmcgZGVzaXJlZCBwcm9wZXJ0aWVzLlxuICogU2V0IGZ1bmN0aW9uTmFtZSBpbiBvcmRlciB0byBnZXQgc3BlY2lmaWMgdHJhbnNsYXRpb25zIGZvciBleGVjdXRpbmcgZnVuY3Rpb24gKHJ1biwgZmV0Y2gsIHN1Ym1pdCkuXG4gKlxuICogQHBhcmFtIHtUcmFuc2xhdGVTZXJ2aWNlfSB0cmFuc2xhdGUgLSBUaGUgdHJhbnNsYXRpb24gc2VydmljZSB1c2VkIHRvIHJldHJpZXZlIGxvY2FsaXplZCBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7TWVzc2FnZVNlcnZpY2V9IG1lc3NhZ2VTZXJ2aWNlIC0gVGhlIG1lc3NhZ2Ugc2VydmljZSByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyBub3RpZmljYXRpb25zLlxuICogQHBhcmFtIHtBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+fSBhY3Rpb24gLSBUaGUgYWN0aW9uIGRlc2NyaXB0b3IgaW5zdGFuY2UgdGhhdCBkZWZpbmVzIHRoZSBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge0FjdGlvbk5vdGlmaWNhdGlvbk9wdHNUeXBlfSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBjdXN0b21pemluZyB0aGUgc3VjY2VzcyBub3RpZmljYXRpb24uXG4gKiBAcmV0dXJuIHtNZXNzYWdlIHwgdW5kZWZpbmVkfSBUaGUgZ2VuZXJhdGVkIG1lc3NhZ2Ugb2JqZWN0IGlmIGEgc3VjY2VzcyBtZXNzYWdlIGlzIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PixcbiAgICBvcHRzPzogQWN0aW9uTm90aWZpY2F0aW9uT3B0c1R5cGVcbik6IE1lc3NhZ2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IG9wdHM/LmZ1bmN0aW9uTmFtZSA/PyAncnVuJztcbiAgICBjb25zdCBhY3Rpb25TdWNjZXNzVGl0bGUgPVxuICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRyYW5zbGF0ZSwgYWN0aW9uLCBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGZ1bmN0aW9uTmFtZSwgJ3N1Y2Nlc3MnLCAndGl0bGUnKSwge1xuICAgICAgICAgICAgY3VzdG9tS2V5OiBvcHRzPy50aXRsZSxcbiAgICAgICAgICAgIGl0ZW06IG9wdHM/Lml0ZW0sXG4gICAgICAgICAgICBmYWxsYmFja0tleTogJ2dlbmVyYWwuc3VjY2VzcydcbiAgICAgICAgfSkgPz8gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvblN1Y2Nlc3NNZXNzYWdlID1cbiAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0cmFuc2xhdGUsIGFjdGlvbiwgZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBmdW5jdGlvbk5hbWUsICdzdWNjZXNzJywgJ21lc3NhZ2UnKSwge1xuICAgICAgICAgICAgY3VzdG9tS2V5OiBvcHRzPy5tZXNzYWdlLFxuICAgICAgICAgICAgaXRlbTogb3B0cz8uaXRlbSxcbiAgICAgICAgICAgIGZhbGxiYWNrS2V5OiAnZ2VuZXJhbC5zdWNjZXNzTWVzc2FnZSdcbiAgICAgICAgfSkgPz8gdW5kZWZpbmVkO1xuICAgIGlmICghYWN0aW9uU3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRvYXN0TWVzc2FnZShhY3Rpb25TdWNjZXNzTWVzc2FnZSwgdW5kZWZpbmVkLCB7bWVzc2FnZVNlcnZpY2U6IG1lc3NhZ2VTZXJ2aWNlLCB0aXRsZTogYWN0aW9uU3VjY2Vzc1RpdGxlfSk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBub3RpZmljYXRpb24gZm9yIGFuIGVycm9yIHRoYXQgb2NjdXJyZWQgZHVyaW5nIGFuIGFjdGlvbiBleGVjdXRpb24uXG4gKlxuICogUHJvdmlkZSB0aXRsZSBvciBtZXNzYWdlIGZvciBjdXN0b20gdGl0bGVzICh1bnJlbGF0ZWQgdG8gbW9kZWwvYWN0aW9uIGJhc2UgcGF0aHMgZm9yIGkxOG4pLlxuICogSXRlbSBpcyBpbnRlcnBvbGF0ZWQgYXMgaXRlbUlkLCBpdGVtVGl0bGUgb3IgaXRlbS4qIGZvciBhY2Nlc3NpbmcgZGVzaXJlZCBwcm9wZXJ0aWVzLlxuICogU2V0IGZ1bmN0aW9uTmFtZSBpbiBvcmRlciB0byBnZXQgc3BlY2lmaWMgdHJhbnNsYXRpb25zIGZvciBleGVjdXRpbmcgZnVuY3Rpb24gKHJ1biwgZmV0Y2gsIHN1Ym1pdCkuXG4gKlxuICogQHBhcmFtIHtUcmFuc2xhdGVTZXJ2aWNlfSB0cmFuc2xhdGUgLSBUaGUgc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbnMuXG4gKiBAcGFyYW0ge01lc3NhZ2VTZXJ2aWNlfSBtZXNzYWdlU2VydmljZSAtIFRoZSBzZXJ2aWNlIHVzZWQgZm9yIGRpc3BsYXlpbmcgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge0FjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT59IGFjdGlvbiAtIFRoZSBhY3Rpb24gZGVzY3JpcHRvciBpbnN0YW5jZSByZWxhdGVkIHRvIHRoZSBlcnJvci5cbiAqIEBwYXJhbSB7SUNvbW1vbnNFcnJvcn0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgZXJyb3IuXG4gKiBAcGFyYW0geyd3YXJuJyB8ICdlcnJvcid9IFtzZXZlcml0eT0nZXJyb3InXSAtIFRoZSBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbm90aWZpY2F0aW9uIChlaXRoZXIgJ3dhcm4nIG9yICdlcnJvcicpLlxuICogQHBhcmFtIHtBY3Rpb25Ob3RpZmljYXRpb25PcHRzVHlwZX0gW29wdHNdIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgY3VzdG9taXppbmcgdGhlIG5vdGlmaWNhdGlvbiwgc3VjaCBhcyB0aXRsZSwgbWVzc2FnZSwgb3IgZnVuY3Rpb24gbmFtZS5cbiAqIEByZXR1cm4ge01lc3NhZ2V9IC0gVGhlIG1lc3NhZ2Ugb2JqZWN0IGNyZWF0ZWQgYW5kIGRpc3BsYXllZCBhcyBhIG5vdGlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKFxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LFxuICAgIGVycm9yOiBJQ29tbW9uc0Vycm9yLFxuICAgIHNldmVyaXR5OiAnd2FybicgfCAnZXJyb3InID0gJ2Vycm9yJyxcbiAgICBvcHRzPzogQWN0aW9uTm90aWZpY2F0aW9uT3B0c1R5cGVcbik6IE1lc3NhZ2Uge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBnZXRJMThuRm9yRXJyb3IodHJhbnNsYXRlLCBlcnJvcikgPz8gZXJyb3IubWVzc2FnZSxcbiAgICAgICAgLi4uZ2V0STE4bkVycm9yUGFyYW1zKGVycm9yKVxuICAgIH07XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gb3B0cz8uZnVuY3Rpb25OYW1lID8/ICdydW4nO1xuICAgIGNvbnN0IGFjdGlvbkVycm9yVGl0bGUgPVxuICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRyYW5zbGF0ZSwgYWN0aW9uLCBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGZ1bmN0aW9uTmFtZSwgJ2Vycm9yJywgJ3RpdGxlJyksIHtcbiAgICAgICAgICAgIGN1c3RvbUtleTogb3B0cz8udGl0bGUsXG4gICAgICAgICAgICBpdGVtOiBvcHRzPy5pdGVtLFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk6ICdnZW5lcmFsLmVycm9yJyxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9KSA/PyB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWN0aW9uRXJyb3JNZXNzYWdlID0gZ2V0STE4bkZvckFjdGlvbih0cmFuc2xhdGUsIGFjdGlvbiwgZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBmdW5jdGlvbk5hbWUsICdlcnJvcicsICdtZXNzYWdlJyksIHtcbiAgICAgICAgY3VzdG9tS2V5OiBvcHRzPy5tZXNzYWdlLFxuICAgICAgICBpdGVtOiBvcHRzPy5pdGVtLFxuICAgICAgICBmYWxsYmFja0tleTogJ2dlbmVyYWwuZXJyb3JNZXNzYWdlJyxcbiAgICAgICAgcGFyYW1zXG4gICAgfSk7XG4gICAgcmV0dXJuIHRvYXN0TWVzc2FnZShhY3Rpb25FcnJvck1lc3NhZ2UgPz8gZXJyb3IubWVzc2FnZSwgc2V2ZXJpdHksIHttZXNzYWdlU2VydmljZTogbWVzc2FnZVNlcnZpY2UsIGljb246ICdwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsIHRpdGxlOiBhY3Rpb25FcnJvclRpdGxlfSk7XG59XG5cbmZ1bmN0aW9uIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBrZXlzID0gW2Z1bmN0aW9uTmFtZV07XG4gICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0ICYmIChmdW5jdGlvbk5hbWUgPT09ICdydW4nIHx8IGZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcpKSB7XG4gICAgICAgIGtleXMucG9wKCk7XG4gICAgICAgIGtleXMucHVzaChgc3VibWl0YCwgYHJ1bmApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cy5tYXAoa2V5ID0+IGAke3ByZWZpeH0uJHtrZXl9LiR7c3VmZml4fWApLmNvbmNhdChgJHtwcmVmaXh9LiR7c3VmZml4fWApO1xufVxuIl19