@mediusinc/mng-commons 0.2.20 → 0.2.21

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 (41) hide show
  1. package/assets/i18n/en.json +13 -12
  2. package/assets/i18n/sl.json +13 -12
  3. package/esm2020/lib/api/utils/object-serializer.util.mjs +7 -2
  4. package/esm2020/lib/components/action/editor/action-editor.component.mjs +2 -2
  5. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +5 -3
  6. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
  7. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +1 -1
  8. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +57 -21
  9. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +1 -1
  10. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +2 -2
  11. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +1 -1
  12. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +3 -3
  13. package/esm2020/lib/components/tableview/table/table.component.mjs +7 -3
  14. package/esm2020/lib/components/tableview/tableview.component.mjs +3 -3
  15. package/esm2020/lib/descriptors/action.descriptor.mjs +6 -1
  16. package/esm2020/lib/descriptors/editor.descriptor.mjs +66 -14
  17. package/esm2020/lib/descriptors/table.descriptor.mjs +21 -4
  18. package/esm2020/lib/descriptors/tableview.descriptor.mjs +7 -6
  19. package/esm2020/lib/models/enum.model.mjs +1 -1
  20. package/esm2020/lib/pipes/boolean.pipe.mjs +8 -3
  21. package/esm2020/lib/services/action-executor.service.mjs +4 -3
  22. package/esm2020/lib/utils/model.util.mjs +9 -7
  23. package/fesm2015/mediusinc-mng-commons.mjs +190 -61
  24. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  25. package/fesm2020/mediusinc-mng-commons.mjs +190 -61
  26. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  27. package/lib/components/form/dropdown/dropdown.component.d.ts +2 -1
  28. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +8 -2
  29. package/lib/components/tableview/table/table.component.d.ts +2 -1
  30. package/lib/descriptors/action.descriptor.d.ts +2 -1
  31. package/lib/descriptors/editor.descriptor.d.ts +29 -8
  32. package/lib/descriptors/table.descriptor.d.ts +8 -2
  33. package/lib/descriptors/tableview.descriptor.d.ts +1 -1
  34. package/lib/models/enum.model.d.ts +1 -0
  35. package/lib/pipes/boolean.pipe.d.ts +1 -1
  36. package/lib/services/action-executor.service.d.ts +3 -2
  37. package/lib/utils/model.util.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/scss/mng-overrides/_layout_dialog.scss +0 -7
  40. package/scss/mng-overrides/_theme_dialog.scss +3 -1
  41. package/scss/mng-overrides/_theme_tableview.scss +10 -10
@@ -140,14 +140,15 @@ export class MngActionExecutorService {
140
140
  * Runs editor action fetch function.
141
141
  *
142
142
  * @param action Action descriptor.
143
+ * @param item Item instance (if exists).
143
144
  * @param itemId Item id.
144
145
  * @param dataProvider Data provider
145
146
  * @param sourceComponent Source component from where the fetch function was called.
146
147
  * @param viewContainer View container/service. Tableview component.
147
148
  * @param actionData Additional action data.
148
149
  */
149
- runEditorFetch(action, itemId, dataProvider, sourceComponent, viewContainer, actionData) {
150
- const context = this.prepareExecContextForEditor(action, undefined, itemId, dataProvider, sourceComponent, viewContainer, actionData);
150
+ runEditorFetch(action, item, itemId, dataProvider, sourceComponent, viewContainer, actionData) {
151
+ const context = this.prepareExecContextForEditor(action, item, itemId, dataProvider, sourceComponent, viewContainer, actionData);
151
152
  return action.fetchFunction(context).pipe(map(res => new ActionRunResult(context, res)));
152
153
  // TODO: error handling
153
154
  }
@@ -340,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
340
341
  type: Inject,
341
342
  args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
342
343
  }] }]; } });
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHNCQUFzQixFQUFjLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHakwsT0FBTyxFQUFDLDJCQUEyQixFQUFvQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdySCxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUc3QyxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLGlCQUF1QyxFQUN2QyxXQUFrQyxFQUNjLDRCQUF1QztRQVB2RixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2MsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUFXO0lBQ2hHLENBQUM7SUFFRyx3QkFBd0IsQ0FDM0IsTUFBMkIsRUFDM0IsTUFBZSxFQUNmLElBQVEsRUFDUixZQUFrQyxFQUNsQyxhQUFvQyxFQUNwQyxlQUFxQixFQUNyQixVQUF1QjtRQUV2QixPQUFPLElBQUksaUJBQWlCLENBQ3hCLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLGFBQWEsRUFBRSxlQUFlLEVBQUUsRUFDdkUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsRUFDdEQ7WUFDSSxJQUFJO1lBQ0osTUFBTTtZQUNOLFVBQVU7U0FDYixFQUNELGVBQWUsRUFDZixhQUFhLENBQ2hCLENBQUM7SUFDTixDQUFDO0lBRU0sU0FBUyxDQUNaLE1BQTJCLEVBQzNCLE1BQWUsRUFDZixJQUFRLEVBQ1IsWUFBa0MsRUFDbEMsZUFBcUIsRUFDckIsYUFBb0MsRUFDcEMsVUFBdUI7UUFFdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlILElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLElBQUksT0FBTyxlQUFlLEVBQUUsc0JBQXNCLEtBQUssVUFBVSxJQUFJLE9BQU8sZUFBZSxFQUFFLGlDQUFpQyxLQUFLLFVBQVUsRUFBRTtnQkFDM0ksTUFBTSxLQUFLLENBQUMsb0JBQW9CLGVBQWUsMEdBQTBHLENBQUMsQ0FBQzthQUM5SjtZQUVELE1BQU0sbUJBQW1CLEdBQUcsZUFBNkMsQ0FBQztZQUMxRSxNQUFNLGFBQWEsR0FBaUI7Z0JBQ2hDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xFLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixhQUFhLEVBQUUsS0FBSzthQUN2QixDQUFDO1lBRUYsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO2dCQUN0QyxhQUFhLENBQUMsTUFBTTtvQkFDaEIsUUFBUSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLElBQUksU0FBUyxDQUFDO2FBQzFKO1lBQ0QsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEtBQUssSUFBSSxFQUFFO2dCQUN4QyxhQUFhLENBQUMsT0FBTztvQkFDakIsUUFBUSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxTQUFTLENBQUM7YUFDOUo7WUFDRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7Z0JBQ3JDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQzthQUM3SDtZQUNELElBQUksTUFBTSxDQUFDLDBCQUEwQixLQUFLLElBQUksRUFBRTtnQkFDNUMsYUFBYSxDQUFDLFdBQVc7b0JBQ3JCLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLFNBQVMsQ0FBQztnQkFDckosYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7YUFDdEM7WUFDRCxJQUFJLE1BQU0sQ0FBQywwQkFBMEIsS0FBSyxJQUFJLEVBQUU7Z0JBQzVDLGFBQWEsQ0FBQyxXQUFXO29CQUNyQixRQUFRLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLDBCQUEwQixFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxTQUFTLENBQUM7Z0JBQ3BKLGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3RDO1lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQTZDLFFBQVEsQ0FBQyxFQUFFO2dCQUNyRixhQUFhLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDeEIsTUFBTTt5QkFDRCxXQUFXLENBQUMsT0FBTyxDQUFDO3lCQUNwQixJQUFJLENBQ0QsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQzdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDUixJQUFJLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTs0QkFDbEMsU0FBUyxDQUFDLHlCQUF5QixDQUMvQixJQUFJLENBQUMsU0FBUyxFQUNkLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyxNQUFNLENBQUMsNkJBQTZCLEVBQ3BDLGFBQWEsRUFDYixJQUFJLENBQ1AsQ0FBQzt5QkFDTDt3QkFDRCxPQUFPLEtBQUssQ0FBQztvQkFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDL0MsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUU7NEJBQ2hDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQzt5QkFDdEc7d0JBQ0QsTUFBTSxXQUFXLENBQUM7b0JBQ3RCLENBQUMsQ0FBQyxDQUNMO3lCQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDYixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQztnQkFFRixhQUFhLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDeEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pGLENBQUMsQ0FBQztnQkFFRixtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4RSxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sVUFBVSxDQUFDO1NBQ3JCO2FBQU07WUFDSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNuQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNSLElBQUksTUFBTSxDQUFDLHlCQUF5QixFQUFFO29CQUNsQyxTQUFTLENBQUMseUJBQXlCLENBQy9CLElBQUksQ0FBQyxTQUFTLEVBQ2QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLENBQUMsMkJBQTJCLEVBQ2xDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDcEMsYUFBYSxFQUNiLElBQUksQ0FDUCxDQUFDO2lCQUNMO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDYixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLElBQUksTUFBTSxDQUFDLHVCQUF1QixFQUFFO29CQUNoQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3RHO2dCQUNELE1BQU0sV0FBVyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksYUFBYSxDQUNoQixNQUFpQyxFQUNqQyxNQUFlLEVBQ2YsUUFBWSxFQUNaLFlBQXdDLEVBQ3hDLGVBQXFCLEVBQ3JCLGFBQW9DLEVBQ3BDLFVBQXVCO1FBRXZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNySSxJQUFJLE9BQU8sTUFBTSxDQUFDLGNBQWMsS0FBSyxVQUFVLEVBQUU7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsTUFBTSxDQUFDLFVBQVUscUJBQXFCLENBQUMsQ0FBQztTQUN6RjtRQUNELE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUM3QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDUixJQUFJLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbEMsU0FBUyxDQUFDLHlCQUF5QixDQUMvQixJQUFJLENBQUMsU0FBUyxFQUNkLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyxNQUFNLENBQUMsNkJBQTZCLEVBQ3BDLGFBQWEsRUFDYixRQUFRLENBQ1gsQ0FBQzthQUNMO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLElBQUksTUFBTSxDQUFDLHVCQUF1QixFQUFFO2dCQUNoQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDN0c7WUFDRCxNQUFNLFdBQVcsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLGNBQWMsQ0FDakIsTUFBaUMsRUFDakMsTUFBZSxFQUNmLFlBQXdDLEVBQ3hDLGVBQXFCLEVBQ3JCLGFBQW9DLEVBQ3BDLFVBQXVCO1FBRXZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0SSxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsdUJBQXVCO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSywyQkFBMkIsQ0FDL0IsTUFBaUMsRUFDakMsSUFBUSxFQUNSLE1BQWUsRUFDZixZQUF3QyxFQUN4QyxlQUFxQixFQUNyQixhQUFvQyxFQUNwQyxVQUF1QjtRQUV2QixJQUFJLGVBQWUsR0FBRyxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3pDLGVBQWUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQixNQUFNLHlCQUF5QixHQUFHLGFBQWEsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUNuRSxJQUFJLHlCQUF5QixFQUFFO2dCQUMzQixlQUFlLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQzthQUN6QztTQUNKO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FDakMsZUFBZSxFQUNmLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxTQUFTLEVBQ3pEO1lBQ0ksSUFBSTtZQUNKLE1BQU07WUFDTixVQUFVO1NBQ2IsRUFDRCxlQUFlLEVBQ2YsYUFBYSxDQUNoQixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0IsQ0FBTyxZQUFrQztRQUNuRSxJQUFJLFlBQVksRUFBRSxXQUFXLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBSSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksY0FBYyxDQUNqQixNQUEyQixFQUMzQixNQUFlLEVBQ2YsSUFBUSxFQUNSLFVBQXVCLEVBQ3ZCLGFBQW9DLEVBQ3BDLGVBQXFCO1FBRXJCLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztZQUN4RCxJQUFJLE1BQU0sWUFBWSxzQkFBc0IsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO2dCQUNwRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQzthQUM1QztZQUNELE1BQU0sWUFBWSxHQUF3QjtnQkFDdEMsSUFBSSxFQUFFO29CQUNGLE1BQU07aUJBQ1Q7Z0JBQ0QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTO2FBQy9CLENBQUM7WUFDRixJQUFJLE1BQU0sRUFBRTtnQkFDUixZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7YUFDckM7WUFDRCxJQUFJLElBQUksRUFBRTtnQkFDTixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7YUFDakM7WUFDRCxJQUFJLFVBQVUsRUFBRTtnQkFDWixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7YUFDN0M7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7YUFDbkQ7WUFDRCxJQUFJLGVBQWUsRUFBRTtnQkFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO2FBQ3ZEO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQTRCLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQzFGO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxLQUFLLEVBQUU7WUFDN0Msa0JBQWtCO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQTRCLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDL0U7YUFBTTtZQUNILDBCQUEwQjtZQUMxQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQU8sTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUN6RyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLHNCQUFzQixDQUE0QixHQUFHLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCLENBQUksTUFBMkIsRUFBRSxLQUFnQyxFQUFFLEtBQXFCO1FBQ2hILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixNQUFNLENBQUMsVUFBVSx1RUFBdUUsQ0FBQyxDQUFDO1NBQ2pJO1FBQ0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQWMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQ2hCLE1BQTJCLEVBQzNCLE1BQWUsRUFDZixJQUFRLEVBQ1IsVUFBdUIsRUFDdkIsS0FBc0IsRUFDdEIsYUFBb0MsRUFDcEMsZUFBcUI7UUFFckIsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxFQUFFO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLFNBQVMsR0FBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ3RDLDJGQUEyRjtZQUMzRixJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFRLENBQUM7WUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUNqQixPQUFPLE1BQU0sQ0FBQztpQkFDakI7cUJBQU0sSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUNuRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDdkU7cUJBQU0sSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMxQixPQUFPLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzdDO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxDQUFDO2lCQUNaO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsQ0FDTCxJQUFJLG1CQUFtQixDQUNuQixTQUFTLEVBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQ3ZILENBQ0osQ0FBQztTQUNMO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBNEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFLO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFJLE1BQTJCO1FBQ2xELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDOUMscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqQzthQUFNO1lBQ0gsbUdBQW1HO1lBQ25HLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNILElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDckIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO2dCQUNELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDM0IsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RDO2dCQUNELE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxFQUFFLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzthQUNwRTtTQUNKO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQVc7UUFDaEMsTUFBTSxXQUFXLEdBQWE7WUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksY0FBYztZQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxlQUFlO1lBQzFDLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO1lBQ3BDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7cUhBamJRLHdCQUF3Qix5T0FTckIsc0NBQXNDO3lIQVR6Qyx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBVUYsTUFBTTsyQkFBQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblJlc3VsdCwgQWN0aW9uRGF0YSwgQWN0aW9uRXJyb3IsIEFjdGlvbkV4ZWNDb250ZXh0LCBBY3Rpb25SdW5SZXN1bHQsIEFjdGlvblRyaWdnZXJSZXN1bHQsIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNlbGxDbGlja0V2ZW50fSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxldmlldy9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIE1uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWwsIFRvYXN0VXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdFcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElOR30gZnJvbSAnLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTW5nTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXJyb3JNYXBwZXI6IE1uZ0Vycm9yTWFwcGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORykgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT5cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFjdGlvbkV4ZWNDb250ZXh0PFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgIGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpLFxuICAgICAgICAgICAgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGRhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQoYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGRhdGFQcm92aWRlciwgdmlld0NvbnRhaW5lciwgc291cmNlQ29tcG9uZW50LCBhY3Rpb25EYXRhKTtcbiAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Db25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBTb3VyY2UgY29tcG9uZW50ICR7c291cmNlQ29tcG9uZW50fSBzaG91bGQgYmUgaW1wbGVtZW50aW5nIElDb25maXJtYXRpb25TZXJ2aWNlIGludGVyZmFjZSB0byBiZSBhYmxlIHRvIHByb3ZpZGUgY29uZmlybWF0aW9uIGZ1bmN0aW9uYWxpdHkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNyY0NvbmZpcm1Db21wb25lbnQgPSBzb3VyY2VDb21wb25lbnQgYXMgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2U7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAga2V5OiBzcmNDb25maXJtQ29tcG9uZW50LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IGZhbHNlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5oZWFkZXIgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaWNvbiA9IGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uID09PSB1bmRlZmluZWQgPyAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnIDogYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUsIGl0ZW0sICdnZW5lcmFsLnllcycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbC5pbnN0YW50QWN0aW9uVHJhbnNsYXRpb24odGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0ucmVqZWN0JywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5ubycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PihvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bkZ1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCB1bmRlZmluZWQsIG5ldyBBY3Rpb25FcnJvcihudWxsLCB0cnVlKSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBzcmNDb25maXJtQ29tcG9uZW50LmdldENvbmZpcm1hdGlvblNlcnZpY2UoKS5jb25maXJtKGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucnVuRnVuY3Rpb24oY29udGV4dCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCBhY3Rpb25FcnJvciwgJ3J1bicsIHZpZXdDb250YWluZXIsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uIHNhdmUgZnVuY3Rpb24gdXN1YWxseSB0cmlnZ2VyZWQgb24gZm9ybSBzdWJtaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZm9ybUl0ZW0gSXRlbSBpbnN0YW5jZSAoZnJvbSBmb3JtKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXJcbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBjb21wb25lbnQgZnJvbSB3aGVyZSB0aGUgZmV0Y2ggZnVuY3Rpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHVibGljIHJ1bkVkaXRvclNhdmU8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBmb3JtSXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVFeGVjQ29udGV4dEZvckVkaXRvcihhY3Rpb24sIGZvcm1JdGVtLCBpdGVtSWQsIGRhdGFQcm92aWRlciwgc291cmNlQ29tcG9uZW50LCB2aWV3Q29udGFpbmVyLCBhY3Rpb25EYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uc3VibWl0RnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3VibWl0IGZ1bmN0aW9uIGZvciBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gY2Fubm90IGJlIGludm9rZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGlvbi5zdWJtaXRGdW5jdGlvbihjb250ZXh0KS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSXRlbVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAnc3VibWl0Jywgdmlld0NvbnRhaW5lciwgZm9ybUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGZldGNoIGZ1bmN0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS4gVGFibGV2aWV3IGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVFeGVjQ29udGV4dEZvckVkaXRvcihhY3Rpb24sIHVuZGVmaW5lZCwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZmV0Y2hGdW5jdGlvbihjb250ZXh0KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSk7XG4gICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBjb250ZXh0IHByZXBhcmF0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgYWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gYWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzZXJ2aWNlIGluc3RhbmNlIG9mIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhUHJvdmlkZXJTZXJ2aWNlPFQsIFM+KGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBTIHwgbnVsbCB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQ8Uz4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgT3B0aW9uYWwgYWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lciBjb21wb25lbnQvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBhY3RpdmF0aW9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ29tcG9uZW50ID0gdGhpcy5kZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IgJiYgYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGFjdGlvbi5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbUlkID0gaXRlbUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQsIGRpYWxvZ1JlZikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FdmVudCkge1xuICAgICAgICAgICAgLy8ganVzdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCB1bmRlZmluZWQsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LCByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgICAgaWYgKCFhY3Rpb24ubW9kZWwuaWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IGNsaWNrIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW4gbm90IGJlIHRyaWdnZXJlZCwgYmVjYXVzZSBtb2RlbCBpZCBwcm9wZXJ0eSBuYW1lIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0l0ZW0gPSBldmVudD8ucm93SXRlbSBhcyBhbnk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJBY3Rpb24oYWN0aW9uLCByb3dJdGVtW2FjdGlvbi5tb2RlbC5pZFByb3BlcnR5TmFtZV0sIGV2ZW50LnJvd0l0ZW0sIHVuZGVmaW5lZCwgcm91dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGFjdGlvbiB3aXRoIG9wdGlvbmFsIGRhdGEgKGl0ZW0sIGl0ZW1JZCwgLi4uKSBhbmQgY3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIE9wdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqIEBwYXJhbSByb3V0ZSBPcHRpb25hbCBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHJvdXRlPzogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmw6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbi5yb3V0ZVVybCA/PyAnJztcbiAgICAgICAgICAgIC8vIFRPRE86IGRvbnQgc3RyaXAgJy8nLCBidXQgdXNlIGl0IGFjY29yZGluZ2x5IHdpdGggQW5ndWxhcidzIHJvdXRlciBwYXR0ZXJucyAoLywgLi8sIC4uLylcbiAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BbnkgPSAoaXRlbSA/PyB7fSkgYXMgYW55O1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKS5tYXAocyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHMgPT09ICc6aXRlbUlkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKGA6JHthY3Rpb24ubW9kZWwudHlwZU5hbWV9LmApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtQW55W3Muc3Vic3RyaW5nKGFjdGlvbi5tb2RlbC50eXBlTmFtZS5sZW5ndGggKyAyKV0gPz8gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uRGF0YT8uW3Muc3Vic3RyaW5nKDEpXSA/PyAnJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvZihcbiAgICAgICAgICAgICAgICBuZXcgQWN0aW9uVHJpZ2dlclJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBmcm9tKHRoaXMucm91dGVyLm5hdmlnYXRlKFtiYXNlVXJsLCAuLi5hY3Rpb25VcmxTZWdtZW50c10sIHtyZWxhdGl2ZVRvOiByb3V0ZSwgcXVlcnlQYXJhbXM6IHBhcnNlZFVybC5xdWVyeVBhcmFtc30pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUFjdGlvbihhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgYWN0aW9uRGF0YSwgdmlld0NvbnRhaW5lciwgc291cmNlQ29tcG9uZW50KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ocmVzKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlYWN0aXZhdGVBY3Rpb248VD4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzTG9jYXRpb24oKSkge1xuICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGludGVybmFsIGhpc3RvcnkgcmVjb3Jkcywgc28gYmFjayBjYW4gYmUgbm9ybWFsbHkgY2FsbGVkXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIGludGVybmFsIGhpc3RvcnkgcmVjb3JkcywgZmlndXJlIG91dCB0aGUgYmFzZSB1cmwgYnkgZWxpbWluYXRpbmcgYWN0aW9uIHNwZWNpZmljIHVybFxuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYmFjaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1cmxQYXRoU2VnbWVudHMgPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbj8ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgLyR7cmVkaXJlY3RVcmx9YCwge3JlcGxhY2VVcmw6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9NbmdBY3Rpb25FcnJvcihlcnJvcj86IGFueSk6IE1uZ0Vycm9yIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3I6IE1uZ0Vycm9yID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uID0gZXJyb3Iuc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnVybCA9IGVycm9yLnVybCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNYXBwZXIudG9NbmdFcnJvcihlcnJvciwgYWN0aW9uRXJyb3IpO1xuICAgIH1cbn1cbiJdfQ==
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHNCQUFzQixFQUFjLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHakwsT0FBTyxFQUFDLDJCQUEyQixFQUFvQixzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdySCxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUc3QyxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFDakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLGlCQUF1QyxFQUN2QyxXQUFrQyxFQUNjLDRCQUF1QztRQVB2RixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FB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LENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLEVBQUUsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQ3BFO1NBQ0o7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBVztRQUNoQyxNQUFNLFdBQVcsR0FBYTtZQUMxQixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxjQUFjO1lBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWU7WUFDMUMsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBQ0YsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7WUFDcEMsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2pELFdBQVcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDOztxSEFuYlEsd0JBQXdCLHlPQVNyQixzQ0FBc0M7eUhBVHpDLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOzswQkFVRixNQUFNOzJCQUFDLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFVybFRyZWV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBmcm9tLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpcnN0LCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uUmVzdWx0LCBBY3Rpb25EYXRhLCBBY3Rpb25FcnJvciwgQWN0aW9uRXhlY0NvbnRleHQsIEFjdGlvblJ1blJlc3VsdCwgQWN0aW9uVHJpZ2dlclJlc3VsdCwgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGV2aWV3L21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lciwgTW5nRXJyb3J9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbCwgVG9hc3RVdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01uZ0Vycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0FDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnJvck1hcHBlcjogTW5nRXJyb3JNYXBwZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEFDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HKSBwcml2YXRlIGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ6IFR5cGU8YW55PlxuICAgICkge31cblxuICAgIHB1YmxpYyBwcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQ8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCksXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoZGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVBY3Rpb25FeGVjQ29udGV4dChhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgZGF0YVByb3ZpZGVyLCB2aWV3Q29udGFpbmVyLCBzb3VyY2VDb21wb25lbnQsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2UgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHNvdXJjZUNvbXBvbmVudD8uZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFNvdXJjZSBjb21wb25lbnQgJHtzb3VyY2VDb21wb25lbnR9IHNob3VsZCBiZSBpbXBsZW1lbnRpbmcgSUNvbmZpcm1hdGlvblNlcnZpY2UgaW50ZXJmYWNlIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBjb25maXJtYXRpb24gZnVuY3Rpb25hbGl0eS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3JjQ29uZmlybUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudCBhcyBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgYWNjZXB0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmhlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS50aXRsZScsIGFjdGlvbi5ydW5Db25maXJtYXRpb25UaXRsZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25NZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5pY29uID0gYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScgOiBhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdExhYmVsID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWwuaW5zdGFudEFjdGlvblRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLmFjY2VwdCcsIGFjdGlvbi5ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlsLmluc3RhbnRBY3Rpb25UcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5yZWplY3QnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUsIGl0ZW0sICdnZW5lcmFsLm5vJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+KG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAucnVuRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdydW4nLCB2aWV3Q29udGFpbmVyLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHVuZGVmaW5lZCwgbmV3IEFjdGlvbkVycm9yKG51bGwsIHRydWUpKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5ydW5GdW5jdGlvbihjb250ZXh0KS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0VXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RVdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gc2F2ZSBmdW5jdGlvbiB1c3VhbGx5IHRyaWdnZXJlZCBvbiBmb3JtIHN1Ym1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBmb3JtSXRlbSBJdGVtIGluc3RhbmNlIChmcm9tIGZvcm0pLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGZvcm1JdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgZm9ybUl0ZW0sIGl0ZW1JZCwgZGF0YVByb3ZpZGVyLCBzb3VyY2VDb21wb25lbnQsIHZpZXdDb250YWluZXIsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdWJtaXQgZnVuY3Rpb24gZm9yIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW5ub3QgYmUgaW52b2tlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uKGNvbnRleHQpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JdGVtXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBUb2FzdFV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdzdWJtaXQnLCB2aWV3Q29udGFpbmVyLCBmb3JtSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gZmV0Y2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gaW5zdGFuY2UgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuIFRhYmxldmlldyBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yRmV0Y2g8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgaXRlbSwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZmV0Y2hGdW5jdGlvbihjb250ZXh0KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSk7XG4gICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBjb250ZXh0IHByZXBhcmF0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgYWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gYWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBzZXJ2aWNlIGluc3RhbmNlIG9mIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhUHJvdmlkZXJTZXJ2aWNlPFQsIFM+KGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBTIHwgbnVsbCB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQ8Uz4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgT3B0aW9uYWwgYWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lciBjb21wb25lbnQvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gc291cmNlQ29tcG9uZW50IFNvdXJjZSBhY3RpdmF0aW9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ29tcG9uZW50ID0gdGhpcy5kZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IgJiYgYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGFjdGlvbi5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbUlkID0gaXRlbUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQsIGRpYWxvZ1JlZikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FdmVudCkge1xuICAgICAgICAgICAgLy8ganVzdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCB1bmRlZmluZWQsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgICAgIGlmICghYWN0aW9uLm1vZGVsLmlkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjbGljayBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gY2FuIG5vdCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2UgbW9kZWwgaWQgcHJvcGVydHkgbmFtZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgcm93SXRlbVthY3Rpb24ubW9kZWwuaWRQcm9wZXJ0eU5hbWVdLCBldmVudC5yb3dJdGVtLCB1bmRlZmluZWQsIHJvdXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBvcHRpb25hbCBkYXRhIChpdGVtLCBpdGVtSWQsIC4uLikgYW5kIGN1cnJlbnRseSBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBPcHRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKiBAcGFyYW0gcm91dGUgT3B0aW9uYWwgYWN0aXZhdGVkIHJvdXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhLFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uVHJpZ2dlclJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAvLyBUT0RPOiBkb250IHN0cmlwICcvJywgYnV0IHVzZSBpdCBhY2NvcmRpbmdseSB3aXRoIEFuZ3VsYXIncyByb3V0ZXIgcGF0dGVybnMgKC8sIC4vLCAuLi8pXG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtQW55ID0gKGl0ZW0gPz8ge30pIGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzID09PSAnOml0ZW1JZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3RhcnRzV2l0aChgOiR7YWN0aW9uLm1vZGVsLnR5cGVOYW1lfS5gKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUFueVtzLnN1YnN0cmluZyhhY3Rpb24ubW9kZWwudHlwZU5hbWUubGVuZ3RoICsgMildID8/ICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkRhdGE/LltzLnN1YnN0cmluZygxKV0gPz8gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgICAgICAgbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGFjdGlvbkRhdGEsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCkucGlwZShtYXAocmVzID0+IG5ldyBBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnkpOiBNbmdFcnJvciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yOiBNbmdFcnJvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXNEZXNjcmlwdGlvbiA9IGVycm9yLnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci51cmwgPSBlcnJvci51cmwgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWFwcGVyLnRvTW5nRXJyb3IoZXJyb3IsIGFjdGlvbkVycm9yKTtcbiAgICB9XG59XG4iXX0=
@@ -34,15 +34,17 @@ export class ModelUtil {
34
34
  }
35
35
  return titleAttribute?.name ?? null;
36
36
  }
37
- static trySetLookupItemsProperties(lookup) {
37
+ static trySetLookupItemsProperties(lookup, idAsDataKey = true) {
38
38
  if (lookup.modelType) {
39
39
  if (!lookup.itemsValueProperty || !lookup.dataKeyProperty) {
40
40
  const idProperty = ModelUtil.findIdAttribute(lookup.modelType) ?? undefined;
41
- if (idProperty && !lookup.itemsValueProperty) {
42
- lookup.withItemsValueProperty(idProperty);
43
- }
44
- if (idProperty && !lookup.dataKeyProperty) {
45
- lookup.withDataKeyProperty(idProperty);
41
+ if (idProperty && !lookup.itemsValueProperty && !lookup.dataKeyProperty) {
42
+ if (idAsDataKey) {
43
+ lookup.withDataKeyProperty(idProperty);
44
+ }
45
+ else {
46
+ lookup.withItemsValueProperty(idProperty);
47
+ }
46
48
  }
47
49
  }
48
50
  if (!lookup.itemsLabelProperty) {
@@ -54,4 +56,4 @@ export class ModelUtil {
54
56
  }
55
57
  }
56
58
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvbW9kZWwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFJOUMsTUFBTSxPQUFPLFNBQVM7SUFDWCxNQUFNLENBQUMsZUFBZSxDQUFJLFNBQXVCO1FBQ3BELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCwwQkFBMEI7WUFDMUIsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsNkNBQTZDO2dCQUM3QyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7UUFFRCxPQUFPLFdBQVcsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFTSxNQUFNLENBQUMsa0JBQWtCLENBQUksU0FBdUI7UUFDdkQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNqQiw2QkFBNkI7WUFDN0IsY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ2pCLGdEQUFnRDtnQkFDaEQsY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQztTQUNKO1FBRUQsT0FBTyxjQUFjLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLDJCQUEyQixDQUFJLE1BQTRCO1FBQ3JFLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtnQkFDdkQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO2dCQUM1RSxJQUFJLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDMUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUM3QztnQkFDRCxJQUFJLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7b0JBQ3ZDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDMUM7YUFDSjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JFLElBQUksYUFBYSxFQUFFO29CQUNmLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDaEQ7YUFDSjtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtJTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsVXRpbCB7XG4gICAgcHVibGljIHN0YXRpYyBmaW5kSWRBdHRyaWJ1dGU8VD4oY2xhc3NUeXBlOiBDbGFzc1R5cGU8VD4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgb2JqU2VyaWFsaXplciA9IE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBvYmpTZXJpYWxpemVyLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKGNsYXNzVHlwZSk7XG4gICAgICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaWRBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09ICdpZCcpO1xuICAgICAgICBpZiAoIWlkQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAvLyBpZiBubyBpZCwgdHJ5IHdpdGggY29kZVxuICAgICAgICAgICAgaWRBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09ICdjb2RlJyk7XG4gICAgICAgICAgICBpZiAoIWlkQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gaWQgb3IgY29kZSwgdGFrZSB0aGUgZmlyc3QgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgaWRBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkQXR0cmlidXRlPy5uYW1lID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmaW5kVGl0bGVBdHRyaWJ1dGU8VD4oY2xhc3NUeXBlOiBDbGFzc1R5cGU8VD4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgb2JqU2VyaWFsaXplciA9IE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBvYmpTZXJpYWxpemVyLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKGNsYXNzVHlwZSk7XG4gICAgICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGVBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoYSA9PiBhLnR5cGUgPT09ICdzdHJpbmcnICYmIGEubmFtZSA9PT0gJ25hbWUnKTtcbiAgICAgICAgaWYgKCF0aXRsZUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgLy8gaWYgbm8gbmFtZSwgdHJ5IHdpdGggdGl0bGVcbiAgICAgICAgICAgIHRpdGxlQXR0cmlidXRlID0gYXR0cmlidXRlcy5maW5kKGEgPT4gYS50eXBlID09PSAnc3RyaW5nJyAmJiBhLm5hbWUgPT09ICd0aXRsZScpO1xuICAgICAgICAgICAgaWYgKCF0aXRsZUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIG5hbWUgb3IgdGl0bGUsIHRha2UgdGhlIGZpcnN0IGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgIHRpdGxlQXR0cmlidXRlID0gYXR0cmlidXRlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aXRsZUF0dHJpYnV0ZT8ubmFtZSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdHJ5U2V0TG9va3VwSXRlbXNQcm9wZXJ0aWVzPFQ+KGxvb2t1cDogSUxvb2t1cERlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgaWYgKGxvb2t1cC5tb2RlbFR5cGUpIHtcbiAgICAgICAgICAgIGlmICghbG9va3VwLml0ZW1zVmFsdWVQcm9wZXJ0eSB8fCAhbG9va3VwLmRhdGFLZXlQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkUHJvcGVydHkgPSBNb2RlbFV0aWwuZmluZElkQXR0cmlidXRlKGxvb2t1cC5tb2RlbFR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRQcm9wZXJ0eSAmJiAhbG9va3VwLml0ZW1zVmFsdWVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBsb29rdXAud2l0aEl0ZW1zVmFsdWVQcm9wZXJ0eShpZFByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlkUHJvcGVydHkgJiYgIWxvb2t1cC5kYXRhS2V5UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwLndpdGhEYXRhS2V5UHJvcGVydHkoaWRQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb29rdXAuaXRlbXNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxQcm9wZXJ0eSA9IE1vZGVsVXRpbC5maW5kVGl0bGVBdHRyaWJ1dGUobG9va3VwLm1vZGVsVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwLndpdGhJdGVtc0xhYmVsUHJvcGVydHkobGFiZWxQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvbW9kZWwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFJOUMsTUFBTSxPQUFPLFNBQVM7SUFDWCxNQUFNLENBQUMsZUFBZSxDQUFJLFNBQXVCO1FBQ3BELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCwwQkFBMEI7WUFDMUIsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsNkNBQTZDO2dCQUM3QyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7UUFFRCxPQUFPLFdBQVcsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFTSxNQUFNLENBQUMsa0JBQWtCLENBQUksU0FBdUI7UUFDdkQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNqQiw2QkFBNkI7WUFDN0IsY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ2pCLGdEQUFnRDtnQkFDaEQsY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQztTQUNKO1FBRUQsT0FBTyxjQUFjLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLDJCQUEyQixDQUFJLE1BQTRCLEVBQUUsV0FBVyxHQUFHLElBQUk7UUFDekYsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO2dCQUN2RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7Z0JBQzVFLElBQUksVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtvQkFDckUsSUFBSSxXQUFXLEVBQUU7d0JBQ2IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUMxQzt5QkFBTTt3QkFDSCxNQUFNLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzdDO2lCQUNKO2FBQ0o7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFO2dCQUM1QixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLGFBQWEsRUFBRTtvQkFDZixNQUFNLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ2hEO2FBQ0o7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JqZWN0U2VyaWFsaXplcn0gZnJvbSAnLi4vYXBpL3V0aWxzJztcbmltcG9ydCB7SUxvb2t1cERlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbFV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZElkQXR0cmlidXRlPFQ+KGNsYXNzVHlwZTogQ2xhc3NUeXBlPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG9ialNlcmlhbGl6ZXIgPSBPYmplY3RTZXJpYWxpemVyLmdldCgpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gb2JqU2VyaWFsaXplci5maW5kQXR0cmlidXRlc0RlZmluaXRpb25CeUNsYXNzVHlwZShjbGFzc1R5cGUpO1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlkQXR0cmlidXRlID0gYXR0cmlidXRlcy5maW5kKGEgPT4gYS5uYW1lID09PSAnaWQnKTtcbiAgICAgICAgaWYgKCFpZEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgLy8gaWYgbm8gaWQsIHRyeSB3aXRoIGNvZGVcbiAgICAgICAgICAgIGlkQXR0cmlidXRlID0gYXR0cmlidXRlcy5maW5kKGEgPT4gYS5uYW1lID09PSAnY29kZScpO1xuICAgICAgICAgICAgaWYgKCFpZEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIGlkIG9yIGNvZGUsIHRha2UgdGhlIGZpcnN0IGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgIGlkQXR0cmlidXRlID0gYXR0cmlidXRlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpZEF0dHJpYnV0ZT8ubmFtZSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmluZFRpdGxlQXR0cmlidXRlPFQ+KGNsYXNzVHlwZTogQ2xhc3NUeXBlPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG9ialNlcmlhbGl6ZXIgPSBPYmplY3RTZXJpYWxpemVyLmdldCgpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gb2JqU2VyaWFsaXplci5maW5kQXR0cmlidXRlc0RlZmluaXRpb25CeUNsYXNzVHlwZShjbGFzc1R5cGUpO1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlQXR0cmlidXRlID0gYXR0cmlidXRlcy5maW5kKGEgPT4gYS50eXBlID09PSAnc3RyaW5nJyAmJiBhLm5hbWUgPT09ICduYW1lJyk7XG4gICAgICAgIGlmICghdGl0bGVBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIG5hbWUsIHRyeSB3aXRoIHRpdGxlXG4gICAgICAgICAgICB0aXRsZUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZmluZChhID0+IGEudHlwZSA9PT0gJ3N0cmluZycgJiYgYS5uYW1lID09PSAndGl0bGUnKTtcbiAgICAgICAgICAgIGlmICghdGl0bGVBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBubyBuYW1lIG9yIHRpdGxlLCB0YWtlIHRoZSBmaXJzdCBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICB0aXRsZUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGl0bGVBdHRyaWJ1dGU/Lm5hbWUgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRyeVNldExvb2t1cEl0ZW1zUHJvcGVydGllczxUPihsb29rdXA6IElMb29rdXBEZXNjcmlwdG9yPFQ+LCBpZEFzRGF0YUtleSA9IHRydWUpIHtcbiAgICAgICAgaWYgKGxvb2t1cC5tb2RlbFR5cGUpIHtcbiAgICAgICAgICAgIGlmICghbG9va3VwLml0ZW1zVmFsdWVQcm9wZXJ0eSB8fCAhbG9va3VwLmRhdGFLZXlQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkUHJvcGVydHkgPSBNb2RlbFV0aWwuZmluZElkQXR0cmlidXRlKGxvb2t1cC5tb2RlbFR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRQcm9wZXJ0eSAmJiAhbG9va3VwLml0ZW1zVmFsdWVQcm9wZXJ0eSAmJiAhbG9va3VwLmRhdGFLZXlQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWRBc0RhdGFLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC53aXRoRGF0YUtleVByb3BlcnR5KGlkUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwLndpdGhJdGVtc1ZhbHVlUHJvcGVydHkoaWRQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvb2t1cC5pdGVtc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFByb3BlcnR5ID0gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZShsb29rdXAubW9kZWxUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBsb29rdXAud2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eShsYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=