@fundamental-ngx/platform 0.44.0-rc.2 → 0.44.0-rc.4

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 (131) hide show
  1. package/button/button.component.d.ts +8 -2
  2. package/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.d.ts +1 -1
  3. package/esm2022/action-bar/action-bar.component.mjs +9 -3
  4. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
  5. package/esm2022/approval-flow/approval-flow.component.mjs +14 -4
  6. package/esm2022/button/button.component.mjs +21 -1
  7. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -2
  8. package/esm2022/feed-input/feed-input.component.mjs +12 -1
  9. package/esm2022/form/checkbox/checkbox.component.mjs +11 -1
  10. package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +1 -1
  11. package/esm2022/form/date-picker/date-picker.component.mjs +34 -1
  12. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +45 -1
  13. package/esm2022/form/form-group/form-field/form-field.component.mjs +13 -3
  14. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +1 -1
  15. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  16. package/esm2022/form/select/commons/base-select.mjs +9 -3
  17. package/esm2022/form/select/select/select.component.mjs +1 -1
  18. package/esm2022/form/time-picker/time-picker.component.mjs +17 -1
  19. package/esm2022/list/base-list-item.mjs +4 -1
  20. package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +31 -29
  21. package/esm2022/message-popover/components/message-view/message-view.component.mjs +12 -11
  22. package/esm2022/message-popover/message-popover.component.mjs +21 -22
  23. package/esm2022/page-footer/page-footer.component.mjs +11 -3
  24. package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +1 -1
  25. package/esm2022/search-field/search-field.component.mjs +34 -11
  26. package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +3 -3
  27. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +8 -8
  28. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +18 -17
  29. package/esm2022/settings-generator/settings-generator.component.mjs +14 -17
  30. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +1 -1
  31. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  32. package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +1 -1
  33. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +75 -21
  34. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +14 -13
  35. package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +14 -11
  36. package/esm2022/table/components/table-header-row/table-header-row.component.mjs +7 -9
  37. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +1 -1
  38. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
  39. package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +1 -1
  40. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
  41. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +1 -1
  42. package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +5 -7
  43. package/esm2022/table/components/table-row/table-row.component.mjs +31 -32
  44. package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +1 -1
  45. package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +1 -1
  46. package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +1 -1
  47. package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +5 -4
  48. package/esm2022/table-helpers/directives/table-data-source.directive.mjs +8 -12
  49. package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +10 -11
  50. package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +9 -15
  51. package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +5 -8
  52. package/esm2022/thumbnail/thumbnail-details/thumbnail-details.component.mjs +10 -4
  53. package/esm2022/thumbnail/thumbnail-image/thumbnail-image.component.mjs +12 -4
  54. package/esm2022/thumbnail/thumbnail.component.mjs +13 -4
  55. package/esm2022/upload-collection/dialogs/move-to/move-to.component.mjs +1 -1
  56. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +36 -3
  57. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +23 -6
  58. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +14 -2
  59. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +36 -3
  60. package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +13 -16
  61. package/esm2022/variant-management/variant-management.component.mjs +1 -1
  62. package/feed-input/feed-input.component.d.ts +4 -1
  63. package/fesm2022/fundamental-ngx-platform-action-bar.mjs +10 -4
  64. package/fesm2022/fundamental-ngx-platform-action-bar.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +17 -7
  66. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  67. package/fesm2022/fundamental-ngx-platform-button.mjs +20 -0
  68. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  69. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -2
  70. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +11 -0
  72. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-platform-form.mjs +127 -8
  74. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-platform-list.mjs +3 -0
  76. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  77. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +54 -50
  78. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  79. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +11 -3
  80. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  81. package/fesm2022/fundamental-ngx-platform-search-field.mjs +34 -11
  82. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +31 -33
  84. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +82 -26
  86. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +23 -35
  88. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-platform-table.mjs +64 -67
  90. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs +27 -8
  92. package/fesm2022/fundamental-ngx-platform-thumbnail.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +38 -5
  94. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +70 -8
  96. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +15 -16
  98. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  99. package/form/checkbox/checkbox.component.d.ts +4 -2
  100. package/form/date-picker/date-picker.component.d.ts +16 -7
  101. package/form/datetime-picker/datetime-picker.component.d.ts +20 -8
  102. package/form/form-group/form-field/form-field.component.d.ts +4 -1
  103. package/form/time-picker/time-picker.component.d.ts +4 -1
  104. package/fundamental-ngx-platform-v0.44.0-rc.4.tgz +0 -0
  105. package/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.d.ts +22 -21
  106. package/message-popover/components/message-view/message-view.component.d.ts +4 -5
  107. package/message-popover/message-popover.component.d.ts +7 -6
  108. package/package.json +4 -4
  109. package/schematics/ng-add/index.js +1 -1
  110. package/search-field/search-field.component.d.ts +25 -19
  111. package/settings-generator/layouts/base-settings-generator-layout.d.ts +16 -17
  112. package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.d.ts +3 -3
  113. package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.d.ts +6 -7
  114. package/settings-generator/settings-generator.component.d.ts +8 -8
  115. package/smart-filter-bar/smart-filter-bar.class.d.ts +5 -5
  116. package/smart-filter-bar/smart-filter-bar.component.d.ts +31 -17
  117. package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +3 -3
  118. package/table/components/table-column-resizer/table-column-resizer.component.d.ts +1 -1
  119. package/table/components/table-row/table-row.component.d.ts +10 -10
  120. package/table-helpers/directives/table-data-source.directive.d.ts +11 -13
  121. package/table-helpers/directives/table-header-resizer.directive.d.ts +3 -3
  122. package/table-helpers/directives/table-scrollable.directive.d.ts +1 -1
  123. package/table-helpers/directives/table-virtual-scroll.directive.d.ts +1 -1
  124. package/thumbnail/thumbnail-details/thumbnail-details.component.d.ts +2 -2
  125. package/thumbnail/thumbnail-image/thumbnail-image.component.d.ts +1 -1
  126. package/upload-collection/upload-collection/upload-collection.component.d.ts +11 -5
  127. package/value-help-dialog/components/define-tab/define-tab.component.d.ts +8 -2
  128. package/value-help-dialog/components/select-tab/select-tab.component.d.ts +6 -3
  129. package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +12 -3
  130. package/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.d.ts +1 -3
  131. package/fundamental-ngx-platform-v0.44.0-rc.2.tgz +0 -0
@@ -101,6 +101,7 @@ export class BaseListItem extends BaseComponent {
101
101
  * Attribute to hold avatar path
102
102
  */
103
103
  set avatarSrc(value) {
104
+ console.warn('`avatarSrc` is deprecated. Use `avatar` property for more flexible configuration.');
104
105
  this._avatarConfig = merge(this._avatarConfig, { image: value });
105
106
  }
106
107
  get avatarSrc() {
@@ -114,6 +115,7 @@ export class BaseListItem extends BaseComponent {
114
115
  * Attribute to hold avatar title for a11y
115
116
  */
116
117
  set avatarTitle(value) {
118
+ console.warn('`avatarTitle` is deprecated. Use `avatar` property for more flexible configuration.');
117
119
  this._avatarConfig = merge(this._avatarConfig, { ariaLabel: value });
118
120
  }
119
121
  get avatarTitle() {
@@ -125,6 +127,7 @@ export class BaseListItem extends BaseComponent {
125
127
  * attribute to hold primary/title icon
126
128
  */
127
129
  set titleIcon(value) {
130
+ console.warn('`titleIcon` is deprecated. See `icon` input property for more flexible icon configuration.');
128
131
  this._iconConfig = merge(new ListIconConfig(), { glyph: value, ariaLabel: value });
129
132
  }
130
133
  get titleIcon() {
@@ -483,4 +486,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
483
486
  type: HostListener,
484
487
  args: ['focusout', ['$event']]
485
488
  }] } });
486
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9iYXNlLWxpc3QtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQWUsT0FBTyxFQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbEMsT0FBTyxFQUFFLHdCQUF3QixFQUF1QixNQUFNLDRCQUE0QixDQUFDOzs7QUFFM0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQztBQUMzQyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFHdkIsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFLSSw0QkFBNEI7UUFDNUIsVUFBSyxHQUEyQixFQUFFLENBQUM7UUFDbkM7OztXQUdHO1FBQ0gsU0FBSSxHQUEwQixXQUFXLENBQUM7SUFH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LFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTlRFUiwgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuXG5pbXBvcnQgeyBDb2xvckFjY2VudCwgS2V5VXRpbCwgU2l6ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2hlY2tib3gnO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcmFkaW8nO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgaXNQcmVzZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgTGlzdENvbmZpZyB9IGZyb20gJy4vbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgRmRwTGlzdCwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcbmltcG9ydCB7IEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUiwgTGlzdFVucmVhZEluZGljYXRvciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcblxuZXhwb3J0IGNvbnN0IElTX0FDVElWRV9DTEFTUyA9ICdpcy1hY3RpdmUnO1xubGV0IG5leHRMaXN0SXRlbUlkID0gMDtcbmV4cG9ydCB0eXBlIFN0YXR1c1R5cGUgPSAnbmVnYXRpdmUnIHwgJ2NyaXRpY2FsJyB8ICdwb3NpdGl2ZScgfCAnaW5mb3JtYXRpdmUnO1xuXG5leHBvcnQgY2xhc3MgTGlzdEljb25Db25maWcge1xuICAgIC8qKiBUaGUgaWNvbiBuYW1lIHRvIGRpc3BsYXkuIFNlZSB0aGUgaWNvbiBwYWdlIGZvciB0aGUgbGlzdCBvZiBpY29uc1xuICAgICAqIGhlcmU6IGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1uZ3gvaWNvblxuICAgICAqICovXG4gICAgZ2x5cGg6IEljb25Db21wb25lbnRbJ2dseXBoJ107XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIGNsYXNzOiBJY29uQ29tcG9uZW50WydjbGFzcyddID0gJyc7XG4gICAgLyoqXG4gICAgICogVGhlIGljb24gZm9udFxuICAgICAqIE9wdGlvbnMgaW5jbHVkZTogJ1NBUC1pY29ucycsICdCdXNpbmVzc1N1aXRlSW5BcHBTeW1ib2xzJyBhbmQgJ1NBUC1pY29ucy1UTlQnXG4gICAgICovXG4gICAgZm9udDogSWNvbkNvbXBvbmVudFsnZm9udCddID0gJ1NBUC1pY29ucyc7XG4gICAgLyoqIEFyaWEtbGFiZWwgZm9yIEljb24uICovXG4gICAgYXJpYUxhYmVsOiBJY29uQ29tcG9uZW50WydhcmlhTGFiZWwnXTtcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdmF0YXJDb25maWcge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xhc3MgPSAnJztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhcmlhTGFiZWxsZWRieTogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsYWJlbDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaXplOiBTaXplID0gJ3MnO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2x5cGg6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgem9vbUdseXBoOiBOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNpcmNsZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdHJhbnNwYXJlbnQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnRhaW4gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0aWxlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBib3JkZXIgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbG9yQWNjZW50OiBOdWxsYWJsZTxDb2xvckFjY2VudD4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmFuZG9tID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGlja2FibGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGltYWdlOiBOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFsdGVySWNvbjogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBiYWNrdXBJbWFnZTogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG59XG5cbi8qKlxuICogQmFzZSBpbnRlcmZhY2UgZm9yIGEgbGlzdCB2YXJpYW50IGRlZmluaXRpb24uXG4gKiBDYXB0dXJlcyBhIGxpc3QgaXRlbSB0ZW1wbGF0ZSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1EZWYge1xuICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RBZHZhbmNlZERlc2NyaXB0aW9uIHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaXN0RGVzY3JpcHRpb24gPSBzdHJpbmcgfCBMaXN0QWR2YW5jZWREZXNjcmlwdGlvbjtcblxuZXhwb3J0IGNsYXNzIE1vZGlmeUl0ZW1FdmVudCB7XG4gICAgLyoqIExpc3QgSXRlbSBjb21wb25lbnQgKi9cbiAgICBzb3VyY2U6IEJhc2VMaXN0SXRlbTtcbiAgICAvKiogQWN0aW9uICovXG4gICAgYWN0aW9uOiAnZGVsZXRlJyB8ICdlZGl0Jztcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2ZkcEl0ZW1EZWZdJyB9KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgTGlzdEl0ZW1EZWYgaW1wbGVtZW50cyBJdGVtRGVmIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKC8qKiBAZG9jcy1wcml2YXRlICovIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGNvbW1vbiBwcm9wZXJ0aWVzIHVzZWQgYWNyb3NzIGxpc3QgSXRlbSBjb21wb25lbnRzLlxuICogdGhpcyBjYW4gYmUgZXh0ZW5kZWQgdG8gcmVkdWNlIHRoZSBjb2RlIGR1cGxpY2F0aW9uIGFjcm9zcyBsaXN0IEl0ZW0gY29tcG9uZW50cy5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgQmFzZUxpc3RJdGVtIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgICAvKiogZGVmaW5lIGxhYmVsIGZvciBzY3JlZW4gcmVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIGRlZmluZSBsZXZlbCBvZiBpdGVtIGZvciBzY3JlZW4gcmVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGV2ZWw6IG51bWJlcjtcblxuICAgIC8qKiBkZWZpbmUgcG9zaXRpb24gb2YgaXRlbSBmb3Igc2NyZWVuIHJlYWRlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVBvc2luZXQ6IG51bWJlcjtcblxuICAgIC8qKiBBdmF0YXIgY29tcG9uZW50IHByb3BlcnRpZXMuIEBzZWUgQXZhdGFyQ29tcG9uZW50IGZvciBtb3JlIGRldGFpbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXIodmFsdWU6IFBhcnRpYWw8TGlzdEF2YXRhckNvbmZpZz4gfCBzdHJpbmcpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8geyBpbWFnZTogdmFsdWUgfSA6IHZhbHVlO1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZShuZXcgTGlzdEF2YXRhckNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGF2YXRhcigpOiBMaXN0QXZhdGFyQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YXRhckNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIFVzZSBgYXZhdGFyYCBwcm9wZXJ0eSBmb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQXR0cmlidXRlIHRvIGhvbGQgYXZhdGFyIHBhdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJTcmModmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fYXZhdGFyQ29uZmlnID0gbWVyZ2UodGhpcy5fYXZhdGFyQ29uZmlnLCB7IGltYWdlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyU3JjKCk6IE51bGxhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdmF0YXI/LmltYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGBhdmF0YXJgIHByb3BlcnR5IGZvciBtb3JlIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBBdHRyaWJ1dGUgdG8gaG9sZCBhdmF0YXIgdGl0bGUgZm9yIGExMXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJUaXRsZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZSh0aGlzLl9hdmF0YXJDb25maWcsIHsgYXJpYUxhYmVsOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyVGl0bGUoKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF2YXRhcj8uYXJpYUxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBhdHRyaWJ1dGUgdG8gaG9sZCBjb3VudGVyIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBjb3VudGVyPzogc3RyaW5nO1xuXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVzY3JpcHRpb246IE51bGxhYmxlPExpc3REZXNjcmlwdGlvbj47XG5cbiAgICAvKiogVG8gaW52ZXJ0IHRoZSBzdGF0dXMgb2Ygc2Vjb25kYXJ5IHRleHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGludmVydGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGVyZSBpcyBubyBkYXRhIGluc2lkZSBsaXN0IGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vRGF0YVRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzZWNvbmRhcnkgdGV4dC5mZC1saXN0X19ieWxpbmUtcmlnaHQtLSpcbiAgICAgKiBDYW4gYmUgb25lIG9mICpwb3NpdGl2ZSosICpuZWdhdGl2ZSosICppbmZvcm1hdGl2ZSosICpjcml0aWNhbCosICpuZXV0cmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXNUeXBlPzogU3RhdHVzVHlwZTtcblxuICAgIC8qKiBhdHRyaWJ1dGUgdG8gaG9sZCBzZWNvbmRhcnkgdGV4dCovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnk6IE51bGxhYmxlPExpc3REZXNjcmlwdGlvbj47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGluZyB0aGlzIGZsYWcgY2F1c2VzIGZvcmNpbmcgc2Vjb25kYXJ5IGl0ZW0gZGlyZWN0aXZlIHRvIG5vdCB3cmFwIHRleHQsXG4gICAgICogaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVyZSB3aWxsIGJlIHRleHQgdHJ1bmNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5V3JhcD86IGJvb2xlYW47XG5cbiAgICAvKiogVG9vbHRpcCB0ZXh0IHRvIHNob3cgd2hlbiBmb2N1c2VkIGZvciBtb3JlIHRoYW4gdGltZW91dCB2YWx1ZSovXG4gICAgQElucHV0KClcbiAgICB0aXRsZT86IHN0cmluZztcblxuICAgIC8qKiBVc2VkIGZvciBwbGFjZWluZyBuYXZpZ2F0aW9uIExpbmsgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpbms6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGluZyB0aGlzIGZsYWcgY2F1c2VzIGZvcmNpbmcgdGl0bGUgZGlyZWN0aXZlIHRvIG5vdCB3cmFwIHRleHQsXG4gICAgICogaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVyZSB3aWxsIGJlIHRleHQgdHJ1bmNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGVXcmFwPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFNlZSBgaWNvbmAgaW5wdXQgcHJvcGVydHkgZm9yIG1vcmUgZmxleGlibGUgaWNvbiBjb25maWd1cmF0aW9uLlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGF0dHJpYnV0ZSB0byBob2xkIHByaW1hcnkvdGl0bGUgaWNvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRpdGxlSWNvbih2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9pY29uQ29uZmlnID0gbWVyZ2UobmV3IExpc3RJY29uQ29uZmlnKCksIHsgZ2x5cGg6IHZhbHVlLCBhcmlhTGFiZWw6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGdldCB0aXRsZUljb24oKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uQ29uZmlnLmdseXBoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3QgaXRlbSBpY29uIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaWNvbih2YWx1ZTogUGFydGlhbDxMaXN0SWNvbkNvbmZpZz4pIHtcbiAgICAgICAgdGhpcy5faWNvbkNvbmZpZyA9IG1lcmdlKG5ldyBMaXN0SWNvbkNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGljb24oKTogTGlzdEljb25Db25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5faWNvbkNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHRoZSBsaXN0IGl0ZW0gaW4gYm9sZCB0ZXh0XG4gICAgICogd2hpY2ggcmVzcHJlc2VudHMgdW5yZWFkIGRhdGFcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHVuUmVhZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGNpcmNsZS5cbiAgICAgKi9cbiAgICBnZXQgZGlzcGxheVVucmVhZE5vdGlmaWNhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fbGlzdD8udW5yZWFkSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiByYWRpbyBidXR0b24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogQnkgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSBpcyAnbm9uZScgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvblR5cGUgPSAnbm9uZSc7XG5cbiAgICAvKiogQnkgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSBpcyAnYWN0aXZlJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdFR5cGU6IExpc3RUeXBlID0gJ2FjdGl2ZSc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogb25seSBhIHN1YnNldCBvZiB0aGUgbGlzdCBpdGVtcyBhcmUgbmF2aWdhYmxlXG4gICAgICogeW91IHNob3VsZCBpbmRpY2F0ZSB0aG9zZSBieSBkaXNwbGF5aW5nIGEgbmF2aWdhdGlvbiBhcnJvd1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbkluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIHJvbGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGUgPSAnb3B0aW9uJztcblxuICAgIC8qKlxuICAgICAqIGV2ZW50IGVtaXR0ZXIgZm9yIHNlbGVjdGVkIGl0ZW1cbiAgICAgKiBzZXByYXRlIFBSIGZvciBjdXN0b20gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vZGlmeUl0ZW1FdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgZm9yIHNlbGVjdGVkIGl0ZW0gdGhyb3VnaCB0aGUgY2hlY2tib3guXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgaXRlbUNoZWNrYm94U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vZGlmeUl0ZW1FdmVudD4oKTtcblxuICAgIC8qKiBFdmVudCBzZW50IHdoZW4gZGVsZXRlLCBkZXRhaWxzIG9yIGFueSBvdGhlciBhY3Rpb24gYnV0dG9ucyBhcmUgY2xpY2tlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vZGlmeUl0ZW1FdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGlzdEl0ZW0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBsaXN0SXRlbTogRWxlbWVudFJlZjxIVE1MTElFbGVtZW50PjtcblxuICAgIC8qKiBBY2Nlc3MgY2hpbGQgZWxlbWVudCwgZm9yIGNoZWNraW5nIGxpbmsgY29udGVudCovXG4gICAgQFZpZXdDaGlsZCgnbGlua0VsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBhbmNob3I6IEVsZW1lbnRSZWY8SFRNTExpbmtFbGVtZW50PjtcblxuICAgIC8qKiBBY2Nlc3MgZWRpdCBidXR0b24qL1xuICAgIEBWaWV3Q2hpbGQoJ2VkaXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBlZGl0OiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIC8qKiBBY2Nlc3MgZGVsZXRlIGJ1dHRvbiovXG4gICAgQFZpZXdDaGlsZCgnZGVsZXRlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgZGVsZXRlOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDaGVja2JveENvbXBvbmVudClcbiAgICBjaGVja2JveENvbXBvbmVudDogQ2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoUmFkaW9CdXR0b25Db21wb25lbnQpXG4gICAgcmFkaW9CdXR0b25Db21wb25lbnQ6IFJhZGlvQnV0dG9uQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgQnkgbGluZSBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50LCBieSB3aGljaFxuICAgICAqIGxpc3QgaXRlbSB3aWxsIGFjY29tZGF0ZSB0aGUgZGF0YSBpbiAyIGNvbHVtblxuICAgICAqL1xuICAgIF9oYXNCeUxpbmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIGxpc3RpdGVtIGhhcyByb3cgbGV2ZWwgc2VsZWN0aW9uIGVuYWJsZWRcbiAgICAgKi9cbiAgICByb3dTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBsaXN0aXRlbSBpcyBzZWxlY3RlZCBiaW5kZWQgdG8gdGVtcGxhdGVcbiAgICAgKi9cbiAgICBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBnZXQgdGhlIGZvY3VzZWQgZWxlbWVudCBmb3Iga2V5IG1hbmFnZXJcbiAgICAgKi9cbiAgICBfZm9jdXNlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdENvbXBvbmVudCA9IGluamVjdDxGZHBMaXN0PihGZHBMaXN0Q29tcG9uZW50KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXZhdGFyQ29uZmlnOiBMaXN0QXZhdGFyQ29uZmlnID0gbmV3IExpc3RBdmF0YXJDb25maWcoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaWNvbkNvbmZpZzogTGlzdEljb25Db25maWcgPSBuZXcgTGlzdEljb25Db25maWcoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgaXRlbUVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnOiBMaXN0Q29uZmlnLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUikgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogTGlzdFVucmVhZEluZGljYXRvclxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiByYWRpbyBidXR0b24gc2VsZWN0ZWQgdmFsdWUgYmluZGVkIHRvIHRlbXBsYXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uVmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2VsZWN0aW9uIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0aW9uVmFsdWUodmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvblZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3Rpb25WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLnZhbHVlID09PSB0aGlzLl9zZWxlY3Rpb25WYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2VsZWN0aW9uVmFsdWUoKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2hvdyBuYXZpZ2F0aW9uIGZvciBzaW5nbGUgbGlzdFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlkID0gYGZkcC1saXN0LWl0ZW0tJHtuZXh0TGlzdEl0ZW1JZCsrfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGlzdENvbXBvbmVudC5fc2V0dXBMaXN0SXRlbSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGV0ZWN0IGNoYW5nZXMgZnJvbSBwYXJlbnQtbGlzdGJveCB0byBsaXN0IGl0ZW1cbiAgICAgKiBmb3IgZXhhbXBsZSBzaW5nbGUsIG11bHRpIG9wdGlvbiBzZWxlY3Rpb24gdGhvc2UgZGV0YWlsc1xuICAgICAqIHdpbGwgYmUgZGVkdWN0ZWQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SXRlbTogTnVsbGFibGU8SFRNTExJRWxlbWVudD4gPSB0aGlzLml0ZW1FbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpJyk7XG4gICAgICAgIGlmICghY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRJdGVtLnNldEF0dHJpYnV0ZSgncm9sZScsICdvcHRpb24nKTtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGN1cnJlbnRJdGVtLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBjdXJyZW50SXRlbS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJyB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICBjdXJyZW50SXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBgJHshIXRoaXMuX3NlbGVjdGVkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGVkIGZvY3VzIG9uIGxpc3QgaXRlbSBvbiBtb3VzZWNsaWNrLFxuICAgICAqIFVwLGRvd24gYXJyb3cgcHJlc3NcbiAgICAgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWQgV2hldGhlciB0aGUgbGlzdCBpdGVtIGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkID09PSB0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICBldmVudC5zb3VyY2UgPSB0aGlzO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9uIGl0ZW0gY2xpY2sgZXZlbnQgd2lsbCBiZSBlbWl0dGVkXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIF9vbkl0ZW1DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSAhdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5fZm9jdXNlZCA9ICF0aGlzLl9mb2N1c2VkO1xuICAgICAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBfaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrYm94Q29tcG9uZW50IHx8IHRoaXMucmFkaW9CdXR0b25Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX29uS2V5Ym9hcmRDbGljayhldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSAhdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCAkZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgICRldmVudC5zb3VyY2UgPSB0aGlzO1xuICAgICAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KCRldmVudCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVyIGZvciBtb3VzZSBldmVudHNcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgX29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tib3hDb21wb25lbnQgJiYgIXRoaXMuYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tib3hDb21wb25lbnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG9uIHRoZSBjaGVja2JveCBpcyBub3Qgc3VwcHJlc3NlZFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBvbmx5IHByb2Nlc3MgY2xpY2tzIGlmIGNsaWNrZWQgb24gdGhlIGxpc3QtaXRlbSwgbm90IGNoZWNrYm94IGl0c2VsZlxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQubmV4dFZhbHVlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25Db21wb25lbnQ/LnZhbHVlQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBjb25zdCAkZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgICRldmVudC5zb3VyY2UgPSB0aGlzO1xuICAgICAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KCRldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGhlbHBzIHRvIGF2b2lkIG11bHRpIHJvd3MgYWN0aXZlIGNsYXNzIHdpdGggbmF2aWdhdGlvblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgWyckZXZlbnQnXSlcbiAgICBfb25CbHVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5hbmNob3IpICYmICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoSVNfQUNUSVZFX0NMQVNTKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBrZXlkb3duIGFwcGVuZCBhY3RpdmUgc3R5bGVzIG9uIGFjdGlvbmFibGUgaXRlbVxuICAgICAqL1xuICAgIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmFuY2hvcikgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKElTX0FDVElWRV9DTEFTUyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb24ga2V5dXAgcmVtb3ZlIGFjdGl2ZSBzdHlsZXMgZnJvbSBhY3Rpb25hYmxlIGl0ZW1cbiAgICAgKi9cbiAgICBfb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuYW5jaG9yKSAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoSVNfQUNUSVZFX0NMQVNTKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2hlY2tib3hNb2RlbENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaXRlbUNoZWNrYm94U2VsZWN0ZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgYWN0aW9uIGJ1dHRvbiBjbGlja1xuICAgICAqL1xuICAgIF9vbkFjdGlvbkJ1dHRvbkNsaWNrKGFjdGlvbjogJ2RlbGV0ZScgfCAnZWRpdCcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIGV2ZW50LmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdGhpcy5idXR0b25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGFjdGlvbiBidXR0b24gY2xpY2sgb24ga2V5IHByZXNzXG4gICAgICovXG4gICAgX29uS2V5QnV0dG9uQ2xpY2soZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFjdGlvbjogJ2RlbGV0ZScgfCAnZWRpdCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQWN0aW9uQnV0dG9uQ2xpY2soYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQWR2YW5jZWRUZXh0KHRleHQ6IExpc3REZXNjcmlwdGlvbik6IHRleHQgaXMgTGlzdEFkdmFuY2VkRGVzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRleHQgIT09ICdzdHJpbmcnICYmICEhdGV4dC50ZXh0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25LZXlib2FyZENsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQ/Lm5leHRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnJhZGlvQnV0dG9uQ29tcG9uZW50Py52YWx1ZUNoYW5nZShldmVudCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnN0ICRldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgJGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoJGV2ZW50KTtcbiAgICB9XG59XG4iXX0=
489
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9iYXNlLWxpc3QtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQWUsT0FBTyxFQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbEMsT0FBTyxFQUFFLHdCQUF3QixFQUF1QixNQUFNLDRCQUE0QixDQUFDOzs7QUFFM0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQztBQUMzQyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFHdkIsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFLSSw0QkFBNEI7UUFDNUIsVUFBSyxHQUEyQixFQUFFLENBQUM7UUFDbkM7OztXQUdHO1FBQ0gsU0FBSSxHQUEwQixXQUFXLENBQUM7SUFH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QjtzQkFEbkIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkJuQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVCakMsT0FBTztzQkFETixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTlRFUiwgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuXG5pbXBvcnQgeyBDb2xvckFjY2VudCwgS2V5VXRpbCwgU2l6ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2hlY2tib3gnO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcmFkaW8nO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgaXNQcmVzZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgTGlzdENvbmZpZyB9IGZyb20gJy4vbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgRmRwTGlzdCwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcbmltcG9ydCB7IEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUiwgTGlzdFVucmVhZEluZGljYXRvciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcblxuZXhwb3J0IGNvbnN0IElTX0FDVElWRV9DTEFTUyA9ICdpcy1hY3RpdmUnO1xubGV0IG5leHRMaXN0SXRlbUlkID0gMDtcbmV4cG9ydCB0eXBlIFN0YXR1c1R5cGUgPSAnbmVnYXRpdmUnIHwgJ2NyaXRpY2FsJyB8ICdwb3NpdGl2ZScgfCAnaW5mb3JtYXRpdmUnO1xuXG5leHBvcnQgY2xhc3MgTGlzdEljb25Db25maWcge1xuICAgIC8qKiBUaGUgaWNvbiBuYW1lIHRvIGRpc3BsYXkuIFNlZSB0aGUgaWNvbiBwYWdlIGZvciB0aGUgbGlzdCBvZiBpY29uc1xuICAgICAqIGhlcmU6IGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1uZ3gvaWNvblxuICAgICAqICovXG4gICAgZ2x5cGg6IEljb25Db21wb25lbnRbJ2dseXBoJ107XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIGNsYXNzOiBJY29uQ29tcG9uZW50WydjbGFzcyddID0gJyc7XG4gICAgLyoqXG4gICAgICogVGhlIGljb24gZm9udFxuICAgICAqIE9wdGlvbnMgaW5jbHVkZTogJ1NBUC1pY29ucycsICdCdXNpbmVzc1N1aXRlSW5BcHBTeW1ib2xzJyBhbmQgJ1NBUC1pY29ucy1UTlQnXG4gICAgICovXG4gICAgZm9udDogSWNvbkNvbXBvbmVudFsnZm9udCddID0gJ1NBUC1pY29ucyc7XG4gICAgLyoqIEFyaWEtbGFiZWwgZm9yIEljb24uICovXG4gICAgYXJpYUxhYmVsOiBJY29uQ29tcG9uZW50WydhcmlhTGFiZWwnXTtcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdmF0YXJDb25maWcge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xhc3MgPSAnJztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhcmlhTGFiZWxsZWRieTogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsYWJlbDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaXplOiBTaXplID0gJ3MnO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2x5cGg6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgem9vbUdseXBoOiBOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNpcmNsZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdHJhbnNwYXJlbnQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnRhaW4gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0aWxlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBib3JkZXIgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbG9yQWNjZW50OiBOdWxsYWJsZTxDb2xvckFjY2VudD4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmFuZG9tID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGlja2FibGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGltYWdlOiBOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFsdGVySWNvbjogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBiYWNrdXBJbWFnZTogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG59XG5cbi8qKlxuICogQmFzZSBpbnRlcmZhY2UgZm9yIGEgbGlzdCB2YXJpYW50IGRlZmluaXRpb24uXG4gKiBDYXB0dXJlcyBhIGxpc3QgaXRlbSB0ZW1wbGF0ZSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1EZWYge1xuICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RBZHZhbmNlZERlc2NyaXB0aW9uIHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaXN0RGVzY3JpcHRpb24gPSBzdHJpbmcgfCBMaXN0QWR2YW5jZWREZXNjcmlwdGlvbjtcblxuZXhwb3J0IGNsYXNzIE1vZGlmeUl0ZW1FdmVudCB7XG4gICAgLyoqIExpc3QgSXRlbSBjb21wb25lbnQgKi9cbiAgICBzb3VyY2U6IEJhc2VMaXN0SXRlbTtcbiAgICAvKiogQWN0aW9uICovXG4gICAgYWN0aW9uOiAnZGVsZXRlJyB8ICdlZGl0Jztcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2ZkcEl0ZW1EZWZdJyB9KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgTGlzdEl0ZW1EZWYgaW1wbGVtZW50cyBJdGVtRGVmIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKC8qKiBAZG9jcy1wcml2YXRlICovIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGNvbW1vbiBwcm9wZXJ0aWVzIHVzZWQgYWNyb3NzIGxpc3QgSXRlbSBjb21wb25lbnRzLlxuICogdGhpcyBjYW4gYmUgZXh0ZW5kZWQgdG8gcmVkdWNlIHRoZSBjb2RlIGR1cGxpY2F0aW9uIGFjcm9zcyBsaXN0IEl0ZW0gY29tcG9uZW50cy5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgQmFzZUxpc3RJdGVtIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgICAvKiogZGVmaW5lIGxhYmVsIGZvciBzY3JlZW4gcmVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIGRlZmluZSBsZXZlbCBvZiBpdGVtIGZvciBzY3JlZW4gcmVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGV2ZWw6IG51bWJlcjtcblxuICAgIC8qKiBkZWZpbmUgcG9zaXRpb24gb2YgaXRlbSBmb3Igc2NyZWVuIHJlYWRlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVBvc2luZXQ6IG51bWJlcjtcblxuICAgIC8qKiBBdmF0YXIgY29tcG9uZW50IHByb3BlcnRpZXMuIEBzZWUgQXZhdGFyQ29tcG9uZW50IGZvciBtb3JlIGRldGFpbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXIodmFsdWU6IFBhcnRpYWw8TGlzdEF2YXRhckNvbmZpZz4gfCBzdHJpbmcpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8geyBpbWFnZTogdmFsdWUgfSA6IHZhbHVlO1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZShuZXcgTGlzdEF2YXRhckNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGF2YXRhcigpOiBMaXN0QXZhdGFyQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YXRhckNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIFVzZSBgYXZhdGFyYCBwcm9wZXJ0eSBmb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQXR0cmlidXRlIHRvIGhvbGQgYXZhdGFyIHBhdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJTcmModmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdgYXZhdGFyU3JjYCBpcyBkZXByZWNhdGVkLiBVc2UgYGF2YXRhcmAgcHJvcGVydHkgZm9yIG1vcmUgZmxleGlibGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgdGhpcy5fYXZhdGFyQ29uZmlnID0gbWVyZ2UodGhpcy5fYXZhdGFyQ29uZmlnLCB7IGltYWdlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyU3JjKCk6IE51bGxhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdmF0YXI/LmltYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGBhdmF0YXJgIHByb3BlcnR5IGZvciBtb3JlIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBBdHRyaWJ1dGUgdG8gaG9sZCBhdmF0YXIgdGl0bGUgZm9yIGExMXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJUaXRsZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2BhdmF0YXJUaXRsZWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBhdmF0YXJgIHByb3BlcnR5IGZvciBtb3JlIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIHRoaXMuX2F2YXRhckNvbmZpZyA9IG1lcmdlKHRoaXMuX2F2YXRhckNvbmZpZywgeyBhcmlhTGFiZWw6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGdldCBhdmF0YXJUaXRsZSgpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXZhdGFyPy5hcmlhTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIGF0dHJpYnV0ZSB0byBob2xkIGNvdW50ZXIgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvdW50ZXI/OiBzdHJpbmc7XG5cbiAgICAvKiogRGVzY3JpcHRpb24gb2YgdGhlIHRpdGxlICovXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbjogTnVsbGFibGU8TGlzdERlc2NyaXB0aW9uPjtcblxuICAgIC8qKiBUbyBpbnZlcnQgdGhlIHN0YXR1cyBvZiBzZWNvbmRhcnkgdGV4dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW52ZXJ0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZXJlIGlzIG5vIGRhdGEgaW5zaWRlIGxpc3QgaXRlbSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9EYXRhVGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHNlY29uZGFyeSB0ZXh0LmZkLWxpc3RfX2J5bGluZS1yaWdodC0tKlxuICAgICAqIENhbiBiZSBvbmUgb2YgKnBvc2l0aXZlKiwgKm5lZ2F0aXZlKiwgKmluZm9ybWF0aXZlKiwgKmNyaXRpY2FsKiwgKm5ldXRyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1c1R5cGU/OiBTdGF0dXNUeXBlO1xuXG4gICAgLyoqIGF0dHJpYnV0ZSB0byBob2xkIHNlY29uZGFyeSB0ZXh0Ki9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeTogTnVsbGFibGU8TGlzdERlc2NyaXB0aW9uPjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsaW5nIHRoaXMgZmxhZyBjYXVzZXMgZm9yY2luZyBzZWNvbmRhcnkgaXRlbSBkaXJlY3RpdmUgdG8gbm90IHdyYXAgdGV4dCxcbiAgICAgKiBpbnN0ZWFkIG9mIHdyYXBwaW5nIHRoZXJlIHdpbGwgYmUgdGV4dCB0cnVuY2F0aW9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnlXcmFwPzogYm9vbGVhbjtcblxuICAgIC8qKiBUb29sdGlwIHRleHQgdG8gc2hvdyB3aGVuIGZvY3VzZWQgZm9yIG1vcmUgdGhhbiB0aW1lb3V0IHZhbHVlKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlPzogc3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgZm9yIHBsYWNlaW5nIG5hdmlnYXRpb24gTGluayAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGluazogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsaW5nIHRoaXMgZmxhZyBjYXVzZXMgZm9yY2luZyB0aXRsZSBkaXJlY3RpdmUgdG8gbm90IHdyYXAgdGV4dCxcbiAgICAgKiBpbnN0ZWFkIG9mIHdyYXBwaW5nIHRoZXJlIHdpbGwgYmUgdGV4dCB0cnVuY2F0aW9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZVdyYXA/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgU2VlIGBpY29uYCBpbnB1dCBwcm9wZXJ0eSBmb3IgbW9yZSBmbGV4aWJsZSBpY29uIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogYXR0cmlidXRlIHRvIGhvbGQgcHJpbWFyeS90aXRsZSBpY29uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGl0bGVJY29uKHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignYHRpdGxlSWNvbmAgaXMgZGVwcmVjYXRlZC4gU2VlIGBpY29uYCBpbnB1dCBwcm9wZXJ0eSBmb3IgbW9yZSBmbGV4aWJsZSBpY29uIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgIHRoaXMuX2ljb25Db25maWcgPSBtZXJnZShuZXcgTGlzdEljb25Db25maWcoKSwgeyBnbHlwaDogdmFsdWUsIGFyaWFMYWJlbDogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlSWNvbigpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb25Db25maWcuZ2x5cGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBpdGVtIGljb24gY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpY29uKHZhbHVlOiBQYXJ0aWFsPExpc3RJY29uQ29uZmlnPikge1xuICAgICAgICB0aGlzLl9pY29uQ29uZmlnID0gbWVyZ2UobmV3IExpc3RJY29uQ29uZmlnKCksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgaWNvbigpOiBMaXN0SWNvbkNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uQ29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdGhlIGxpc3QgaXRlbSBpbiBib2xkIHRleHRcbiAgICAgKiB3aGljaCByZXNwcmVzZW50cyB1bnJlYWQgZGF0YVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5SZWFkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gY2lyY2xlLlxuICAgICAqL1xuICAgIGdldCBkaXNwbGF5VW5yZWFkTm90aWZpY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9saXN0Py51bnJlYWRJbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIHJhZGlvIGJ1dHRvbiB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIC8qKiBCeSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIGlzICdub25lJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uVHlwZSA9ICdub25lJztcblxuICAgIC8qKiBCeSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIGlzICdhY3RpdmUnICovXG4gICAgQElucHV0KClcbiAgICBsaXN0VHlwZTogTGlzdFR5cGUgPSAnYWN0aXZlJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBsaXN0IGl0ZW1zIGFyZSBuYXZpZ2FibGVcbiAgICAgKiB5b3Ugc2hvdWxkIGluZGljYXRlIHRob3NlIGJ5IGRpc3BsYXlpbmcgYSBuYXZpZ2F0aW9uIGFycm93XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0aW9uSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogcm9sZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZSA9ICdvcHRpb24nO1xuXG4gICAgLyoqXG4gICAgICogZXZlbnQgZW1pdHRlciBmb3Igc2VsZWN0ZWQgaXRlbVxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCBmb3Igc2VsZWN0ZWQgaXRlbSB0aHJvdWdoIHRoZSBjaGVja2JveC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2hlY2tib3hTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IHNlbnQgd2hlbiBkZWxldGUsIGRldGFpbHMgb3IgYW55IG90aGVyIGFjdGlvbiBidXR0b25zIGFyZSBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0SXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGxpc3RJdGVtOiBFbGVtZW50UmVmPEhUTUxMSUVsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBjaGlsZCBlbGVtZW50LCBmb3IgY2hlY2tpbmcgbGluayBjb250ZW50Ki9cbiAgICBAVmlld0NoaWxkKCdsaW5rRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGFuY2hvcjogRWxlbWVudFJlZjxIVE1MTGlua0VsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBlZGl0IGJ1dHRvbiovXG4gICAgQFZpZXdDaGlsZCgnZWRpdCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGVkaXQ6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBkZWxldGUgYnV0dG9uKi9cbiAgICBAVmlld0NoaWxkKCdkZWxldGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBkZWxldGU6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENoZWNrYm94Q29tcG9uZW50KVxuICAgIGNoZWNrYm94Q29tcG9uZW50OiBDaGVja2JveENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChSYWRpb0J1dHRvbkNvbXBvbmVudClcbiAgICByYWRpb0J1dHRvbkNvbXBvbmVudDogUmFkaW9CdXR0b25Db21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnQsIGJ5IHdoaWNoXG4gICAgICogbGlzdCBpdGVtIHdpbGwgYWNjb21kYXRlIHRoZSBkYXRhIGluIDIgY29sdW1uXG4gICAgICovXG4gICAgX2hhc0J5TGluZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdGl0ZW0gaGFzIHJvdyBsZXZlbCBzZWxlY3Rpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHJvd1NlbGVjdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIGxpc3RpdGVtIGlzIHNlbGVjdGVkIGJpbmRlZCB0byB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIF9zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGdldCB0aGUgZm9jdXNlZCBlbGVtZW50IGZvciBrZXkgbWFuYWdlclxuICAgICAqL1xuICAgIF9mb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0Q29tcG9uZW50ID0gaW5qZWN0PEZkcExpc3Q+KEZkcExpc3RDb21wb25lbnQpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hdmF0YXJDb25maWc6IExpc3RBdmF0YXJDb25maWcgPSBuZXcgTGlzdEF2YXRhckNvbmZpZygpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pY29uQ29uZmlnOiBMaXN0SWNvbkNvbmZpZyA9IG5ldyBMaXN0SWNvbkNvbmZpZygpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBpdGVtRWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcm90ZWN0ZWQgX2xpc3RDb25maWc6IExpc3RDb25maWcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SKSBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBMaXN0VW5yZWFkSW5kaWNhdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHJhZGlvIGJ1dHRvbiBzZWxlY3RlZCB2YWx1ZSBiaW5kZWQgdG8gdGVtcGxhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3Rpb25WYWx1ZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZWxlY3Rpb24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25WYWx1ZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGlvblZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMudmFsdWUgPT09IHRoaXMuX3NlbGVjdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzZWxlY3Rpb25WYWx1ZSgpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTaG93IG5hdmlnYXRpb24gZm9yIHNpbmdsZSBsaXN0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaWQgPSBgZmRwLWxpc3QtaXRlbS0ke25leHRMaXN0SXRlbUlkKyt9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLml0ZW1TZWxlY3RlZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0Q29tcG9uZW50Ll9zZXR1cExpc3RJdGVtKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUbyBkZXRlY3QgY2hhbmdlcyBmcm9tIHBhcmVudC1saXN0Ym94IHRvIGxpc3QgaXRlbVxuICAgICAqIGZvciBleGFtcGxlIHNpbmdsZSwgbXVsdGkgb3B0aW9uIHNlbGVjdGlvbiB0aG9zZSBkZXRhaWxzXG4gICAgICogd2lsbCBiZSBkZWR1Y3RlZCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtOiBOdWxsYWJsZTxIVE1MTElFbGVtZW50PiA9IHRoaXMuaXRlbUVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignbGknKTtcbiAgICAgICAgaWYgKCFjdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEl0ZW0uc2V0QXR0cmlidXRlKCdyb2xlJywgJ29wdGlvbicpO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gY3VycmVudEl0ZW0ucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGN1cnJlbnRJdGVtLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24gfHwgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGAkeyEhdGhpcy5fc2VsZWN0ZWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENyZWF0ZWQgZm9jdXMgb24gbGlzdCBpdGVtIG9uIG1vdXNlY2xpY2ssXG4gICAgICogVXAsZG93biBhcnJvdyBwcmVzc1xuICAgICAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIEBwYXJhbSBzZWxlY3RlZCBXaGV0aGVyIHRoZSBsaXN0IGl0ZW0gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT24gaXRlbSBjbGljayBldmVudCB3aWxsIGJlIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgX29uSXRlbUNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9ICF0aGlzLl9zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICBldmVudC5zb3VyY2UgPSB0aGlzO1xuICAgICAgICB0aGlzLl9mb2N1c2VkID0gIXRoaXMuX2ZvY3VzZWQ7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIF9oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tib3hDb21wb25lbnQgfHwgdGhpcy5yYWRpb0J1dHRvbkNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5fb25LZXlib2FyZENsaWNrKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYW5jaG9yPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9ICF0aGlzLl9zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0ICRldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgJGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoJGV2ZW50KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXIgZm9yIG1vdXNlIGV2ZW50c1xuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBfb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jaGVja2JveENvbXBvbmVudCAmJiAhdGhpcy5hbmNob3IpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja2JveENvbXBvbmVudC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tpbmcgb24gdGhlIGNoZWNrYm94IGlzIG5vdCBzdXBwcmVzc2VkXG4gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyBjbGlja3MgaWYgY2xpY2tlZCBvbiB0aGUgbGlzdC1pdGVtLCBub3QgY2hlY2tib3ggaXRzZWxmXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveENvbXBvbmVudC5uZXh0VmFsdWUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbkNvbXBvbmVudD8udmFsdWVDaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnN0ICRldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgJGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogaGVscHMgdG8gYXZvaWQgbXVsdGkgcm93cyBhY3RpdmUgY2xhc3Mgd2l0aCBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnLCBbJyRldmVudCddKVxuICAgIF9vbkJsdXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmFuY2hvcikgJiYgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShJU19BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIG9uIGtleWRvd24gYXBwZW5kIGFjdGl2ZSBzdHlsZXMgb24gYWN0aW9uYWJsZSBpdGVtXG4gICAgICovXG4gICAgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuYW5jaG9yKSAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoSVNfQUNUSVZFX0NMQVNTKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBrZXl1cCByZW1vdmUgYWN0aXZlIHN0eWxlcyBmcm9tIGFjdGlvbmFibGUgaXRlbVxuICAgICAqL1xuICAgIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5hbmNob3IpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShJU19BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DaGVja2JveE1vZGVsQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtQ2hlY2tib3hTZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBhY3Rpb24gYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX29uQWN0aW9uQnV0dG9uQ2xpY2soYWN0aW9uOiAnZGVsZXRlJyB8ICdlZGl0Jyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgZXZlbnQuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgYWN0aW9uIGJ1dHRvbiBjbGljayBvbiBrZXkgcHJlc3NcbiAgICAgKi9cbiAgICBfb25LZXlCdXR0b25DbGljayhldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aW9uOiAnZGVsZXRlJyB8ICdlZGl0Jyk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5fb25BY3Rpb25CdXR0b25DbGljayhhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNBZHZhbmNlZFRleHQodGV4dDogTGlzdERlc2NyaXB0aW9uKTogdGV4dCBpcyBMaXN0QWR2YW5jZWREZXNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycgJiYgISF0ZXh0LnRleHQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vbktleWJvYXJkQ2xpY2soZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja2JveENvbXBvbmVudD8ubmV4dFZhbHVlKCk7XG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25Db21wb25lbnQ/LnZhbHVlQ2hhbmdlKGV2ZW50KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgY29uc3QgJGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICAkZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCgkZXZlbnQpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,13 +1,12 @@
1
- import { ChangeDetectionStrategy, Component, ContentChildren, Inject, Input, QueryList, ViewEncapsulation } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, Inject, Input, QueryList, ViewEncapsulation } from '@angular/core';
2
2
  import { ControlContainer, FormGroup, NgModel } from '@angular/forms';
3
- import { DestroyedService } from '@fundamental-ngx/cdk/utils';
4
3
  import { PlatformFormFieldControl } from '@fundamental-ngx/platform/shared';
5
- import { BehaviorSubject, filter, startWith, Subject, Subscription, switchMap, takeUntil, zip } from 'rxjs';
4
+ import { BehaviorSubject, filter, startWith, Subject, Subscription, switchMap, zip } from 'rxjs';
6
5
  import { FDP_MESSAGE_POPOVER_CONFIG } from '../../default-config';
7
6
  import { MessagePopoverFormItemDirective } from '../../directives/message-popover-form-item.directive';
8
7
  import { convertFormState } from '../../utils';
8
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
9
  import * as i0 from "@angular/core";
10
- import * as i1 from "@fundamental-ngx/cdk/utils";
11
10
  export class MessagePopoverFormWrapperComponent {
12
11
  /**
13
12
  * User-passed forms.
@@ -31,25 +30,26 @@ export class MessagePopoverFormWrapperComponent {
31
30
  return this._formFields;
32
31
  }
33
32
  /** @hidden */
34
- constructor(_destroy$, _config) {
35
- this._destroy$ = _destroy$;
33
+ constructor(_destroyRef, _config) {
34
+ this._destroyRef = _destroyRef;
36
35
  this._config = _config;
37
36
  /** Message Popover instance. */
38
37
  this.messagePopover$ = new Subject();
39
38
  /** @hidden */
40
- this._formFields = [];
41
- /** @hidden */
42
39
  this._errors$ = new BehaviorSubject([]);
40
+ /**
41
+ * Error models Observable. Emitted when form submitted and contains invalid fields.
42
+ */
43
+ // eslint-disable-next-line @typescript-eslint/member-ordering
44
+ this.errors = this._errors$.asObservable();
45
+ /** @hidden */
46
+ this._formFields = [];
43
47
  /** @hidden */
44
48
  this._ngForms = [];
45
49
  /** @hidden */
46
50
  this._formItemErrorsSubscription = new Subscription();
47
51
  /** @hidden */
48
52
  this._formSubmitted = false;
49
- /**
50
- * Error models Observable. Emitted when form submitted and contains invalid fields.
51
- */
52
- this.errors = this._errors$.asObservable();
53
53
  }
54
54
  /** @hidden */
55
55
  ngAfterViewInit() {
@@ -59,7 +59,7 @@ export class MessagePopoverFormWrapperComponent {
59
59
  }
60
60
  this._ngForms = this._projectedForm?.toArray();
61
61
  this._startListeningForErrors();
62
- this._projectedForm?.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {
62
+ this._projectedForm?.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
63
63
  this._ngForms = this._projectedForm.toArray();
64
64
  this._startListeningForErrors();
65
65
  });
@@ -73,7 +73,7 @@ export class MessagePopoverFormWrapperComponent {
73
73
  }
74
74
  /**
75
75
  * Programmatically add new form to array of forms.
76
- * @param form
76
+ * @param forms
77
77
  */
78
78
  addForms(forms) {
79
79
  const formsArray = Array.isArray(forms) ? forms : [forms];
@@ -88,6 +88,10 @@ export class MessagePopoverFormWrapperComponent {
88
88
  this._formFields.push(...formFields);
89
89
  this._listenToFormFieldErrors(this._formFields);
90
90
  }
91
+ /** @hidden */
92
+ ngOnDestroy() {
93
+ this._formItemErrorsSubscription.unsubscribe();
94
+ }
91
95
  /**
92
96
  * @hidden
93
97
  * Listens to the form submission and collects form control errors.
@@ -100,7 +104,7 @@ export class MessagePopoverFormWrapperComponent {
100
104
  this._errors$.next([]);
101
105
  const formSubmitEvents = this._ngForms.map((form) => form.ngSubmit.pipe(switchMap(() => form.statusChanges.pipe(startWith(form.status), filter((status) => status.toLowerCase() !== 'pending')))));
102
106
  this._formErrorsSubscription = zip(...formSubmitEvents)
103
- .pipe(takeUntil(this._destroy$))
107
+ .pipe(takeUntilDestroyed(this._destroyRef))
104
108
  .subscribe(() => {
105
109
  this._formSubmitted = true;
106
110
  const errors = this._directiveItems.length > 0 ? this._collectPlainFormData() : this._collectAdvancedFormData();
@@ -128,10 +132,6 @@ export class MessagePopoverFormWrapperComponent {
128
132
  });
129
133
  }
130
134
  /** @hidden */
131
- ngOnDestroy() {
132
- this._formItemErrorsSubscription.unsubscribe();
133
- }
134
- /** @hidden */
135
135
  _collectPlainFormData() {
136
136
  const errors = [
137
137
  {
@@ -252,6 +252,8 @@ export class MessagePopoverFormWrapperComponent {
252
252
  * @param field Form Field Control.
253
253
  * @param errorDirective Optional Error directive
254
254
  * @param section Section where text should be rendered.
255
+ * @param errorKey
256
+ * @param error
255
257
  */
256
258
  _getErrorText(field, errorDirective, section = 'heading', errorKey, error) {
257
259
  const errorTextObj = {
@@ -302,20 +304,16 @@ export class MessagePopoverFormWrapperComponent {
302
304
  _isAdvancedError(error) {
303
305
  return !!error && typeof error !== 'string';
304
306
  }
305
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MessagePopoverFormWrapperComponent, deps: [{ token: i1.DestroyedService }, { token: FDP_MESSAGE_POPOVER_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
306
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: MessagePopoverFormWrapperComponent, selector: "fdp-message-popover-form-wrapper", inputs: { forms: "forms", formFields: "formFields" }, providers: [DestroyedService], queries: [{ propertyName: "_projectedForm", predicate: ControlContainer, descendants: true }, { propertyName: "_projectedFormItems", predicate: NgModel, descendants: true }, { propertyName: "_projectedFormFieldControls", predicate: PlatformFormFieldControl, descendants: true }, { propertyName: "_directiveItems", predicate: MessagePopoverFormItemDirective, descendants: true }], exportAs: ["messagePopoverWrapper"], ngImport: i0, template: "<ng-content></ng-content>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
307
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MessagePopoverFormWrapperComponent, deps: [{ token: i0.DestroyRef }, { token: FDP_MESSAGE_POPOVER_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
308
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: MessagePopoverFormWrapperComponent, selector: "fdp-message-popover-form-wrapper", inputs: { forms: "forms", formFields: "formFields" }, queries: [{ propertyName: "_projectedForm", predicate: ControlContainer, descendants: true }, { propertyName: "_projectedFormItems", predicate: NgModel, descendants: true }, { propertyName: "_projectedFormFieldControls", predicate: PlatformFormFieldControl, descendants: true }, { propertyName: "_directiveItems", predicate: MessagePopoverFormItemDirective, descendants: true }], exportAs: ["messagePopoverWrapper"], ngImport: i0, template: "<ng-content></ng-content>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
307
309
  }
308
310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MessagePopoverFormWrapperComponent, decorators: [{
309
311
  type: Component,
310
- args: [{ selector: 'fdp-message-popover-form-wrapper', exportAs: 'messagePopoverWrapper', providers: [DestroyedService], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n" }]
311
- }], ctorParameters: function () { return [{ type: i1.DestroyedService }, { type: undefined, decorators: [{
312
+ args: [{ selector: 'fdp-message-popover-form-wrapper', exportAs: 'messagePopoverWrapper', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n" }]
313
+ }], ctorParameters: function () { return [{ type: i0.DestroyRef }, { type: undefined, decorators: [{
312
314
  type: Inject,
313
315
  args: [FDP_MESSAGE_POPOVER_CONFIG]
314
- }] }]; }, propDecorators: { forms: [{
315
- type: Input
316
- }], formFields: [{
317
- type: Input
318
- }], _projectedForm: [{
316
+ }] }]; }, propDecorators: { _projectedForm: [{
319
317
  type: ContentChildren,
320
318
  args: [ControlContainer, { descendants: true }]
321
319
  }], _projectedFormItems: [{
@@ -327,5 +325,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
327
325
  }], _directiveItems: [{
328
326
  type: ContentChildren,
329
327
  args: [MessagePopoverFormItemDirective, { descendants: true }]
328
+ }], forms: [{
329
+ type: Input
330
+ }], formFields: [{
331
+ type: Input
330
332
  }] } });
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1wb3BvdmVyLWZvcm0td3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbWVzc2FnZS1wb3BvdmVyL2NvbXBvbmVudHMvbWVzc2FnZS1wb3BvdmVyLWZvcm0td3JhcHBlci9tZXNzYWdlLXBvcG92ZXItZm9ybS13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9tZXNzYWdlLXBvcG92ZXIvY29tcG9uZW50cy9tZXNzYWdlLXBvcG92ZXItZm9ybS13cmFwcGVyL21lc3NhZ2UtcG9wb3Zlci1mb3JtLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLFNBQVMsRUFBOEIsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxFQUVILHdCQUF3QixFQUUzQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVHLE9BQU8sRUFBRSwwQkFBMEIsRUFBbUQsTUFBTSxzQkFBc0IsQ0FBQztBQUNuSCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQU92RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QUFFO2dCQUsvQyxlQUFlO3NCQUQvQixlQUFlO3VCQUFDLCtCQUErQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdGb3JtLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IERlc3Ryb3llZFNlcnZpY2UsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmVDb250ZXh0XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBzdGFydFdpdGgsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRkRQX01FU1NBR0VfUE9QT1ZFUl9DT05GSUcsIE1lc3NhZ2VQb3BvdmVyQ29uZmlnLCBNZXNzYWdlUG9wb3ZlckVycm9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vZGVmYXVsdC1jb25maWcnO1xuaW1wb3J0IHsgTWVzc2FnZVBvcG92ZXJGb3JtSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbWVzc2FnZS1wb3BvdmVyLWZvcm0taXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBNZXNzYWdlUG9wb3ZlckVudHJ5LFxuICAgIE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cCxcbiAgICBNZXNzYWdlUG9wb3ZlckVycm9yVGV4dFxufSBmcm9tICcuLi8uLi9tb2RlbHMvbWVzc2FnZS1wb3BvdmVyLWVudHJ5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNZXNzYWdlUG9wb3ZlcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWVzc2FnZS1wb3BvdmVyLXdyYXBwZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IGNvbnZlcnRGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBNZXNzYWdlUG9wb3ZlciB9IGZyb20gJy4uLy4uL21vZGVscy9tZXNzYWdlLXBvcG92ZXIuaW50ZXJmYWNlJztcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVBvcG92ZXJGb3JtID0gTmdGb3JtIHwgRm9ybUdyb3VwRGlyZWN0aXZlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1tZXNzYWdlLXBvcG92ZXItZm9ybS13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1wb3BvdmVyLWZvcm0td3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gICAgZXhwb3J0QXM6ICdtZXNzYWdlUG9wb3ZlcldyYXBwZXInLFxuICAgIHByb3ZpZGVyczogW0Rlc3Ryb3llZFNlcnZpY2VdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVBvcG92ZXJGb3JtV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE1lc3NhZ2VQb3BvdmVyV3JhcHBlciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogTWVzc2FnZSBQb3BvdmVyIGluc3RhbmNlLiAqL1xuICAgIG1lc3NhZ2VQb3BvdmVyJCA9IG5ldyBTdWJqZWN0PE1lc3NhZ2VQb3BvdmVyPigpO1xuICAgIC8qKlxuICAgICAqIFVzZXItcGFzc2VkIGZvcm1zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZvcm1zKGZvcm1zOiBNZXNzYWdlUG9wb3ZlckZvcm0gfCBNZXNzYWdlUG9wb3ZlckZvcm1bXSkge1xuICAgICAgICBpZiAoIWZvcm1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZvcm1zKSkge1xuICAgICAgICAgICAgZm9ybXMgPSBbZm9ybXNdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25nRm9ybXMgPSBmb3JtcztcbiAgICAgICAgdGhpcy5fc3RhcnRMaXN0ZW5pbmdGb3JFcnJvcnMoKTtcbiAgICB9XG5cbiAgICAvKiogVXNlci1wYXNzZWQgZm9ybSBmaWVsZHMuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9ybUZpZWxkcyh2YWx1ZTogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sW10pIHtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1GaWVsZEVycm9ycyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1GaWVsZHMoKTogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybUZpZWxkcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1GaWVsZHM6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQ29udHJvbENvbnRhaW5lciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb2plY3RlZEZvcm06IFF1ZXJ5TGlzdDxNZXNzYWdlUG9wb3ZlckZvcm0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKE5nTW9kZWwsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0ZWRGb3JtSXRlbXMhOiBRdWVyeUxpc3Q8TmdNb2RlbD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJvamVjdGVkRm9ybUZpZWxkQ29udHJvbHMhOiBRdWVyeUxpc3Q8UGxhdGZvcm1Gb3JtRmllbGRDb250cm9sPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihNZXNzYWdlUG9wb3ZlckZvcm1JdGVtRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlyZWN0aXZlSXRlbXMhOiBRdWVyeUxpc3Q8TWVzc2FnZVBvcG92ZXJGb3JtSXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Vycm9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cFtdPihbXSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1FcnJvcnNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmdGb3JtczogKE5nRm9ybSB8IEZvcm1Hcm91cERpcmVjdGl2ZSlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtSXRlbUVycm9yc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybVN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRXJyb3IgbW9kZWxzIE9ic2VydmFibGUuIEVtaXR0ZWQgd2hlbiBmb3JtIHN1Ym1pdHRlZCBhbmQgY29udGFpbnMgaW52YWxpZCBmaWVsZHMuXG4gICAgICovXG4gICAgZXJyb3JzID0gdGhpcy5fZXJyb3JzJC5hc09ic2VydmFibGUoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkOiBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEZEUF9NRVNTQUdFX1BPUE9WRVJfQ09ORklHKSBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IE1lc3NhZ2VQb3BvdmVyQ29uZmlnXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEZvcm1zIGFyZSBwYXNzZWQgdmlhIGlucHV0IHByb3BlcnR5LlxuICAgICAgICBpZiAodGhpcy5fbmdGb3Jtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmdGb3JtcyA9IHRoaXMuX3Byb2plY3RlZEZvcm0/LnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fc3RhcnRMaXN0ZW5pbmdGb3JFcnJvcnMoKTtcbiAgICAgICAgdGhpcy5fcHJvamVjdGVkRm9ybT8uY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uZ0Zvcm1zID0gdGhpcy5fcHJvamVjdGVkRm9ybS50b0FycmF5KCk7XG4gICAgICAgICAgICB0aGlzLl9zdGFydExpc3RlbmluZ0ZvckVycm9ycygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIE1lc3NhZ2UgUG9wb3ZlciBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0TWVzc2FnZVBvcG92ZXIobWVzc2FnZVBvcG92ZXI6IE1lc3NhZ2VQb3BvdmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVzc2FnZVBvcG92ZXIkLm5leHQobWVzc2FnZVBvcG92ZXIpO1xuICAgICAgICAvLyB0aGlzLm1lc3NhZ2VQb3BvdmVyID0gbWVzc2FnZVBvcG92ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljYWxseSBhZGQgbmV3IGZvcm0gdG8gYXJyYXkgb2YgZm9ybXMuXG4gICAgICogQHBhcmFtIGZvcm1cbiAgICAgKi9cbiAgICBhZGRGb3Jtcyhmb3JtczogTWVzc2FnZVBvcG92ZXJGb3JtIHwgTWVzc2FnZVBvcG92ZXJGb3JtW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybXNBcnJheSA9IEFycmF5LmlzQXJyYXkoZm9ybXMpID8gZm9ybXMgOiBbZm9ybXNdO1xuICAgICAgICB0aGlzLl9uZ0Zvcm1zLnB1c2goLi4uZm9ybXNBcnJheSk7XG4gICAgICAgIHRoaXMuX3N0YXJ0TGlzdGVuaW5nRm9yRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljYWxseSBhZGQgbmV3IGZvcm0gZmllbGRzIHRvIGFycmF5IG9mIGxpc3RlbmVkIGZvcm0gZmllbGRzLlxuICAgICAqIEBwYXJhbSBmb3JtRmllbGRzXG4gICAgICovXG4gICAgYWRkRm9ybUZpZWxkcyhmb3JtRmllbGRzOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtRmllbGRzLnB1c2goLi4uZm9ybUZpZWxkcyk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybUZpZWxkRXJyb3JzKHRoaXMuX2Zvcm1GaWVsZHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0ZW5zIHRvIHRoZSBmb3JtIHN1Ym1pc3Npb24gYW5kIGNvbGxlY3RzIGZvcm0gY29udHJvbCBlcnJvcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc3RhcnRMaXN0ZW5pbmdGb3JFcnJvcnMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbmdGb3Jtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zvcm1FcnJvcnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Vycm9ycyQubmV4dChbXSk7XG5cbiAgICAgICAgY29uc3QgZm9ybVN1Ym1pdEV2ZW50cyA9IHRoaXMuX25nRm9ybXMubWFwKChmb3JtKSA9PlxuICAgICAgICAgICAgZm9ybS5uZ1N1Ym1pdC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICBmb3JtLnN0YXR1c0NoYW5nZXMhLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoZm9ybS5zdGF0dXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0dXM6IHN0cmluZykgPT4gc3RhdHVzLnRvTG93ZXJDYXNlKCkgIT09ICdwZW5kaW5nJylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9mb3JtRXJyb3JzU3Vic2NyaXB0aW9uID0gemlwKC4uLmZvcm1TdWJtaXRFdmVudHMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybVN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aXZlSXRlbXMubGVuZ3RoID4gMCA/IHRoaXMuX2NvbGxlY3RQbGFpbkZvcm1EYXRhKCkgOiB0aGlzLl9jb2xsZWN0QWR2YW5jZWRGb3JtRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JzJC5uZXh0KGVycm9ycyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1GaWVsZEVycm9ycyh0aGlzLl9wcm9qZWN0ZWRGb3JtRmllbGRDb250cm9scy50b0FycmF5KCkpO1xuXG4gICAgICAgIHRoaXMuX3Byb2plY3RlZEZvcm1GaWVsZENvbnRyb2xzPy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1GaWVsZEVycm9ycyh0aGlzLl9wcm9qZWN0ZWRGb3JtRmllbGRDb250cm9scy50b0FycmF5KCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvRm9ybUZpZWxkRXJyb3JzKGZpZWxkczogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9ybUl0ZW1FcnJvcnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLl9mb3JtSXRlbUVycm9yc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICBmaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtSXRlbUVycm9yc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybUZpZWxkPy5lcnJvcnNDaGFuZ2UkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3RpdmVJdGVtcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jb2xsZWN0UGxhaW5Gb3JtRGF0YSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9jb2xsZWN0QWR2YW5jZWRGb3JtRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcnMkLm5leHQoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9ybUl0ZW1FcnJvcnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxlY3RQbGFpbkZvcm1EYXRhKCk6IE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cFtdIHtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBNZXNzYWdlUG9wb3ZlckVycm9yR3JvdXBbXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlcnJvcnM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5fZGlyZWN0aXZlSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX25nRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZm9ybS5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmZvcm0uZ2V0KGNvbnRyb2xOYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmb3JtRmllbGQpID0+IGZvcm1GaWVsZC5jb250cm9sPy5uYW1lID09PSBjb250cm9sTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2w/LmVycm9ycyB8fCAhZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0Vycm9ycyA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbmZpZy5lcnJvcnMpO1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbC5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVycm9yKSA9PiBjb25maWdFcnJvcnMuaW5jbHVkZXMoZXJyb3IpKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT2JqID0gY29udHJvbC5lcnJvcnMhW2Vycm9yS2V5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0TW9kZWwgPSB0aGlzLl9nZXRDb25maWdFcnJvck1vZGVsKGVycm9yS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yOiBNZXNzYWdlUG9wb3ZlckVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbnRyb2xOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yVGV4dE1vZGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGNvbnZlcnRGb3JtU3RhdGUoJ2Vycm9yJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZD8ubGFiZWwgPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZmllbGQ/LmVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclRleHRNb2RlbC5oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclRleHRNb2RlbC5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBjb250cm9sIS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yc1swXS5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsZWN0QWR2YW5jZWRGb3JtRGF0YSgpOiBNZXNzYWdlUG9wb3ZlckVycm9yR3JvdXBbXSB7XG4gICAgICAgIGxldCBlcnJvcnM6IE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cFtdID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZm9ybUZpZWxkcy5sZW5ndGggPiAwID8gdGhpcy5mb3JtRmllbGRzIDogdGhpcy5fcHJvamVjdGVkRm9ybUZpZWxkQ29udHJvbHMudG9BcnJheSgpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlcyBvdmVyIGZvcm0gY29udHJvbHMgdG8gY29sbGVjdCB0aGVpciBlcnJvcnMuXG4gICAgICAgICAqIEBwYXJhbSBmb3JtIEZvcm0gR3JvdXAgb3IgYSBjb2xsZWN0aW9uIG9mIEZvcm0gR3JvdXBzLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgaXRlcmF0ZU92ZXJGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1Hcm91cFtdKTogTWVzc2FnZVBvcG92ZXJFcnJvckdyb3VwW10gPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtLmZvckVhY2goKGZvcm1Hcm91cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBpdGVyYXRlT3ZlckZvcm0oZm9ybUdyb3VwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZvcm1GaWVsZCkgPT4gZm9ybUZpZWxkLmlkID09PSBjb250cm9sTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBpdGVyYXRlT3ZlckZvcm0oY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sPy5lcnJvcnMgfHwgIWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JEaXJlY3RpdmUgPSBmaWVsZC5mb3JtRmllbGQ/Lmdyb3VwZWRFcnJvcnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChncm91cGVkRXJyb3IpID0+IGdyb3VwZWRFcnJvci5kaXJlY3RpdmUuZXJyb3IgPT09IGVycm9yS2V5XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBOYW1lID0gdGhpcy5fZ2V0R3JvdXBOYW1lKGZpZWxkPy5mb3JtRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX2dldEVycm9yTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycyFbZXJyb3JLZXldXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yR3JvdXBJbmRleCA9IGVycm9ycy5maW5kSW5kZXgoKGVycm9yR3JvdXApID0+IGVycm9yR3JvdXAuZ3JvdXAgPT09IGdyb3VwTmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yR3JvdXBJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yR3JvdXBJbmRleCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBlcnJvcnNbZXJyb3JHcm91cEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICBncm91cC5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gaXRlcmF0ZU92ZXJGb3JtKHRoaXMuX25nRm9ybXMubWFwKChmb3JtKSA9PiBmb3JtLmZvcm0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlcyBlcnJvciBtb2RlbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVycm9yTW9kZWwoXG4gICAgICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgICAgIGdyb3VwTmFtZTogc3RyaW5nLFxuICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgIGZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIGVycm9yS2V5OiBzdHJpbmcsXG4gICAgICAgIGVycm9yRGlyZWN0aXZlPzogRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmVDb250ZXh0LFxuICAgICAgICBlcnJvcj86IGFueVxuICAgICk6IE1lc3NhZ2VQb3BvdmVyRW50cnkge1xuICAgICAgICBsZXQgc3RhdGU6IEZvcm1TdGF0ZXMgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBjb25maWdFcnJvciA9IHRoaXMuX2NvbmZpZy5lcnJvcnNbZXJyb3JLZXldO1xuXG4gICAgICAgIGlmIChlcnJvckRpcmVjdGl2ZT8uZGlyZWN0aXZlLnR5cGUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZXJyb3JEaXJlY3RpdmUuZGlyZWN0aXZlLnR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNBZHZhbmNlZEVycm9yKGNvbmZpZ0Vycm9yKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBjb25maWdFcnJvci50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbnRyb2xOYW1lLFxuICAgICAgICAgICAgdHlwZTogc3RhdGUsXG4gICAgICAgICAgICBzdGF0ZTogY29udmVydEZvcm1TdGF0ZShzdGF0ZSksXG4gICAgICAgICAgICBncm91cDogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZD8uZm9ybUZpZWxkPy5sYWJlbCA/PyAnJyxcbiAgICAgICAgICAgIGhlYWRpbmc6IHRoaXMuX2dldEVycm9yVGV4dChmaWVsZCwgZXJyb3JEaXJlY3RpdmUsICdoZWFkaW5nJywgZXJyb3JLZXksIGVycm9yKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLl9nZXRFcnJvclRleHQoZmllbGQsIGVycm9yRGlyZWN0aXZlLCAnZGVzY3JpcHRpb24nLCBlcnJvcktleSwgZXJyb3IpLFxuICAgICAgICAgICAgZXJyb3JzOiBjb250cm9sIS5lcnJvcnMsXG4gICAgICAgICAgICBmb3JtRmllbGQ6IGZpZWxkLFxuICAgICAgICAgICAgZWxlbWVudDogZmllbGQ/LmVsZW1lbnRSZWZcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlcyBlcnJvciB0ZXh0IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBlcnJvci5cbiAgICAgKiBAcGFyYW0gZmllbGQgRm9ybSBGaWVsZCBDb250cm9sLlxuICAgICAqIEBwYXJhbSBlcnJvckRpcmVjdGl2ZSBPcHRpb25hbCBFcnJvciBkaXJlY3RpdmVcbiAgICAgKiBAcGFyYW0gc2VjdGlvbiBTZWN0aW9uIHdoZXJlIHRleHQgc2hvdWxkIGJlIHJlbmRlcmVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVycm9yVGV4dChcbiAgICAgICAgZmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgZXJyb3JEaXJlY3RpdmU6IE51bGxhYmxlPEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dD4sXG4gICAgICAgIHNlY3Rpb246ICdoZWFkaW5nJyB8ICdkZXNjcmlwdGlvbicgPSAnaGVhZGluZycsXG4gICAgICAgIGVycm9yS2V5OiBzdHJpbmcsXG4gICAgICAgIGVycm9yPzogYW55XG4gICAgKTogTWVzc2FnZVBvcG92ZXJFcnJvclRleHQge1xuICAgICAgICBjb25zdCBlcnJvclRleHRPYmo6IE1lc3NhZ2VQb3BvdmVyRXJyb3JUZXh0ID0ge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yRGlyZWN0aXZlPy5lcnJvcixcbiAgICAgICAgICAgIHR5cGU6IGVycm9yRGlyZWN0aXZlPy5kaXJlY3RpdmUgPyAnZGlyZWN0aXZlJyA6IGZpZWxkPy5mb3JtRmllbGQ/LmkxOFN0cmluZ3MgPyAndGVtcGxhdGVSZWYnIDogJ3N0cmluZydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZXJyb3JUZXh0T2JqLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHRNb2RlbCA9IHRoaXMuX2dldENvbmZpZ0Vycm9yTW9kZWwoZXJyb3JLZXkpO1xuXG4gICAgICAgICAgICBlcnJvclRleHRPYmouZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIGVycm9yVGV4dE9iai5tZXNzYWdlID0gZXJyb3JUZXh0TW9kZWxbc2VjdGlvbl07XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JUZXh0T2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yRGlyZWN0aXZlPy5kaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIGVycm9yVGV4dE9iai5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICBzZWN0aW9uID09PSAnaGVhZGluZydcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvckRpcmVjdGl2ZS5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZiA/PyBlcnJvckRpcmVjdGl2ZS5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvckRpcmVjdGl2ZS5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWY7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JUZXh0T2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JUZXh0T2JqLm1lc3NhZ2UgPSBmaWVsZD8uZm9ybUZpZWxkPy5pMThTdHJpbmdzID8/IG51bGw7XG4gICAgICAgIHJldHVybiBlcnJvclRleHRPYmo7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cE5hbWUoZm9ybUZpZWxkOiBOdWxsYWJsZTxQbGF0Zm9ybUZvcm1GaWVsZD4pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAoZm9ybUZpZWxkPy5mb3JtR3JvdXBDb250YWluZXI/Lm1haW5UaXRsZSkge1xuICAgICAgICAgICAgcGFydHMucHVzaChmb3JtRmllbGQuZm9ybUdyb3VwQ29udGFpbmVyLm1haW5UaXRsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybUZpZWxkPy5mb3JtRmllbGRHcm91cD8ubGFiZWwpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goZm9ybUZpZWxkLmZvcm1GaWVsZEdyb3VwLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q29uZmlnRXJyb3JNb2RlbChlcnJvcktleTogc3RyaW5nKTogTWVzc2FnZVBvcG92ZXJFcnJvckNvbmZpZyB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0Vycm9yID0gdGhpcy5fY29uZmlnLmVycm9yc1tlcnJvcktleV07XG4gICAgICAgIGNvbnN0IGlzUGxhaW5FcnJvciA9ICF0aGlzLl9pc0FkdmFuY2VkRXJyb3IoY29uZmlnRXJyb3IpO1xuICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBpc1BsYWluRXJyb3IgPyAnZXJyb3InIDogY29uZmlnRXJyb3IudHlwZTtcbiAgICAgICAgY29uc3QgaGVhZGluZ01lc3NhZ2UgPSBpc1BsYWluRXJyb3IgPyBjb25maWdFcnJvciA6IGNvbmZpZ0Vycm9yLmhlYWRpbmc7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uTWVzc2FnZSA9IGlzUGxhaW5FcnJvciA/IHVuZGVmaW5lZCA6IGNvbmZpZ0Vycm9yLmRlc2NyaXB0aW9uO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBlcnJvclR5cGUsXG4gICAgICAgICAgICBoZWFkaW5nOiBoZWFkaW5nTWVzc2FnZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbk1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQWR2YW5jZWRFcnJvcihlcnJvcjogc3RyaW5nIHwgTWVzc2FnZVBvcG92ZXJFcnJvckNvbmZpZyk6IGVycm9yIGlzIE1lc3NhZ2VQb3BvdmVyRXJyb3JDb25maWcge1xuICAgICAgICByZXR1cm4gISFlcnJvciAmJiB0eXBlb2YgZXJyb3IgIT09ICdzdHJpbmcnO1xuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1wb3BvdmVyLWZvcm0td3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbWVzc2FnZS1wb3BvdmVyL2NvbXBvbmVudHMvbWVzc2FnZS1wb3BvdmVyLWZvcm0td3JhcHBlci9tZXNzYWdlLXBvcG92ZXItZm9ybS13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9tZXNzYWdlLXBvcG92ZXIvY29tcG9uZW50cy9tZXNzYWdlLXBvcG92ZXItZm9ybS13cmFwcGVyL21lc3NhZ2UtcG9wb3Zlci1mb3JtLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixnQkFBZ0IsRUFBRSxTQUFTLEVBQThCLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25ILE9BQU8sRUFHSCx3QkFBd0IsRUFDM0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBbUQsTUFBTSxzQkFBc0IsQ0FBQztBQUNuSCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQU92RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0s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QkFVbkUsS0FBSztzQkFEUixLQUFLO2dCQWNGLFVBQVU7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0Zvcm0sIE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtU3RhdGVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIHN0YXJ0V2l0aCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXAsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRkRQX01FU1NBR0VfUE9QT1ZFUl9DT05GSUcsIE1lc3NhZ2VQb3BvdmVyQ29uZmlnLCBNZXNzYWdlUG9wb3ZlckVycm9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vZGVmYXVsdC1jb25maWcnO1xuaW1wb3J0IHsgTWVzc2FnZVBvcG92ZXJGb3JtSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbWVzc2FnZS1wb3BvdmVyLWZvcm0taXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBNZXNzYWdlUG9wb3ZlckVudHJ5LFxuICAgIE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cCxcbiAgICBNZXNzYWdlUG9wb3ZlckVycm9yVGV4dFxufSBmcm9tICcuLi8uLi9tb2RlbHMvbWVzc2FnZS1wb3BvdmVyLWVudHJ5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNZXNzYWdlUG9wb3ZlcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWVzc2FnZS1wb3BvdmVyLXdyYXBwZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IGNvbnZlcnRGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBNZXNzYWdlUG9wb3ZlciB9IGZyb20gJy4uLy4uL21vZGVscy9tZXNzYWdlLXBvcG92ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVBvcG92ZXJGb3JtID0gTmdGb3JtIHwgRm9ybUdyb3VwRGlyZWN0aXZlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1tZXNzYWdlLXBvcG92ZXItZm9ybS13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1wb3BvdmVyLWZvcm0td3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gICAgZXhwb3J0QXM6ICdtZXNzYWdlUG9wb3ZlcldyYXBwZXInLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVBvcG92ZXJGb3JtV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE1lc3NhZ2VQb3BvdmVyV3JhcHBlciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQ29udHJvbENvbnRhaW5lciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb2plY3RlZEZvcm06IFF1ZXJ5TGlzdDxNZXNzYWdlUG9wb3ZlckZvcm0+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihOZ01vZGVsLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJvamVjdGVkRm9ybUl0ZW1zITogUXVlcnlMaXN0PE5nTW9kZWw+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb2plY3RlZEZvcm1GaWVsZENvbnRyb2xzITogUXVlcnlMaXN0PFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTWVzc2FnZVBvcG92ZXJGb3JtSXRlbURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpcmVjdGl2ZUl0ZW1zITogUXVlcnlMaXN0PE1lc3NhZ2VQb3BvdmVyRm9ybUl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgLyoqIE1lc3NhZ2UgUG9wb3ZlciBpbnN0YW5jZS4gKi9cbiAgICBtZXNzYWdlUG9wb3ZlciQgPSBuZXcgU3ViamVjdDxNZXNzYWdlUG9wb3Zlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIFVzZXItcGFzc2VkIGZvcm1zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZvcm1zKGZvcm1zOiBNZXNzYWdlUG9wb3ZlckZvcm0gfCBNZXNzYWdlUG9wb3ZlckZvcm1bXSkge1xuICAgICAgICBpZiAoIWZvcm1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZvcm1zKSkge1xuICAgICAgICAgICAgZm9ybXMgPSBbZm9ybXNdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25nRm9ybXMgPSBmb3JtcztcbiAgICAgICAgdGhpcy5fc3RhcnRMaXN0ZW5pbmdGb3JFcnJvcnMoKTtcbiAgICB9XG5cbiAgICAvKiogVXNlci1wYXNzZWQgZm9ybSBmaWVsZHMuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9ybUZpZWxkcyh2YWx1ZTogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sW10pIHtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1GaWVsZEVycm9ycyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1GaWVsZHMoKTogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybUZpZWxkcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Vycm9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cFtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBtb2RlbHMgT2JzZXJ2YWJsZS4gRW1pdHRlZCB3aGVuIGZvcm0gc3VibWl0dGVkIGFuZCBjb250YWlucyBpbnZhbGlkIGZpZWxkcy5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xuICAgIGVycm9ycyA9IHRoaXMuX2Vycm9ycyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1GaWVsZHM6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1FcnJvcnNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmdGb3JtczogKE5nRm9ybSB8IEZvcm1Hcm91cERpcmVjdGl2ZSlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtSXRlbUVycm9yc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybVN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZjogRGVzdHJveVJlZixcbiAgICAgICAgQEluamVjdChGRFBfTUVTU0FHRV9QT1BPVkVSX0NPTkZJRykgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBNZXNzYWdlUG9wb3ZlckNvbmZpZ1xuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBGb3JtcyBhcmUgcGFzc2VkIHZpYSBpbnB1dCBwcm9wZXJ0eS5cbiAgICAgICAgaWYgKHRoaXMuX25nRm9ybXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25nRm9ybXMgPSB0aGlzLl9wcm9qZWN0ZWRGb3JtPy50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3N0YXJ0TGlzdGVuaW5nRm9yRXJyb3JzKCk7XG4gICAgICAgIHRoaXMuX3Byb2plY3RlZEZvcm0/LmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uZ0Zvcm1zID0gdGhpcy5fcHJvamVjdGVkRm9ybS50b0FycmF5KCk7XG4gICAgICAgICAgICB0aGlzLl9zdGFydExpc3RlbmluZ0ZvckVycm9ycygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIE1lc3NhZ2UgUG9wb3ZlciBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0TWVzc2FnZVBvcG92ZXIobWVzc2FnZVBvcG92ZXI6IE1lc3NhZ2VQb3BvdmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVzc2FnZVBvcG92ZXIkLm5leHQobWVzc2FnZVBvcG92ZXIpO1xuICAgICAgICAvLyB0aGlzLm1lc3NhZ2VQb3BvdmVyID0gbWVzc2FnZVBvcG92ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljYWxseSBhZGQgbmV3IGZvcm0gdG8gYXJyYXkgb2YgZm9ybXMuXG4gICAgICogQHBhcmFtIGZvcm1zXG4gICAgICovXG4gICAgYWRkRm9ybXMoZm9ybXM6IE1lc3NhZ2VQb3BvdmVyRm9ybSB8IE1lc3NhZ2VQb3BvdmVyRm9ybVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1zQXJyYXkgPSBBcnJheS5pc0FycmF5KGZvcm1zKSA/IGZvcm1zIDogW2Zvcm1zXTtcbiAgICAgICAgdGhpcy5fbmdGb3Jtcy5wdXNoKC4uLmZvcm1zQXJyYXkpO1xuICAgICAgICB0aGlzLl9zdGFydExpc3RlbmluZ0ZvckVycm9ycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpY2FsbHkgYWRkIG5ldyBmb3JtIGZpZWxkcyB0byBhcnJheSBvZiBsaXN0ZW5lZCBmb3JtIGZpZWxkcy5cbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkc1xuICAgICAqL1xuICAgIGFkZEZvcm1GaWVsZHMoZm9ybUZpZWxkczogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkcy5wdXNoKC4uLmZvcm1GaWVsZHMpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1GaWVsZEVycm9ycyh0aGlzLl9mb3JtRmllbGRzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtSXRlbUVycm9yc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0ZW5zIHRvIHRoZSBmb3JtIHN1Ym1pc3Npb24gYW5kIGNvbGxlY3RzIGZvcm0gY29udHJvbCBlcnJvcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc3RhcnRMaXN0ZW5pbmdGb3JFcnJvcnMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbmdGb3Jtcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zvcm1FcnJvcnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2Vycm9ycyQubmV4dChbXSk7XG5cbiAgICAgICAgY29uc3QgZm9ybVN1Ym1pdEV2ZW50cyA9IHRoaXMuX25nRm9ybXMubWFwKChmb3JtKSA9PlxuICAgICAgICAgICAgZm9ybS5uZ1N1Ym1pdC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICBmb3JtLnN0YXR1c0NoYW5nZXMhLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoZm9ybS5zdGF0dXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0dXM6IHN0cmluZykgPT4gc3RhdHVzLnRvTG93ZXJDYXNlKCkgIT09ICdwZW5kaW5nJylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9mb3JtRXJyb3JzU3Vic2NyaXB0aW9uID0gemlwKC4uLmZvcm1TdWJtaXRFdmVudHMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtU3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3RpdmVJdGVtcy5sZW5ndGggPiAwID8gdGhpcy5fY29sbGVjdFBsYWluRm9ybURhdGEoKSA6IHRoaXMuX2NvbGxlY3RBZHZhbmNlZEZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcnMkLm5leHQoZXJyb3JzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybUZpZWxkRXJyb3JzKHRoaXMuX3Byb2plY3RlZEZvcm1GaWVsZENvbnRyb2xzLnRvQXJyYXkoKSk7XG5cbiAgICAgICAgdGhpcy5fcHJvamVjdGVkRm9ybUZpZWxkQ29udHJvbHM/LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvRm9ybUZpZWxkRXJyb3JzKHRoaXMuX3Byb2plY3RlZEZvcm1GaWVsZENvbnRyb2xzLnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Gb3JtRmllbGRFcnJvcnMoZmllbGRzOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtSXRlbUVycm9yc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1JdGVtRXJyb3JzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIGZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1JdGVtRXJyb3JzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICBmaWVsZC5mb3JtRmllbGQ/LmVycm9yc0NoYW5nZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9mb3JtU3VibWl0dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGl2ZUl0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2NvbGxlY3RQbGFpbkZvcm1EYXRhKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NvbGxlY3RBZHZhbmNlZEZvcm1EYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9ycyQubmV4dChlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxlY3RQbGFpbkZvcm1EYXRhKCk6IE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cFtdIHtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBNZXNzYWdlUG9wb3ZlckVycm9yR3JvdXBbXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlcnJvcnM6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5fZGlyZWN0aXZlSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX25nRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZm9ybS5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmZvcm0uZ2V0KGNvbnRyb2xOYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmb3JtRmllbGQpID0+IGZvcm1GaWVsZC5jb250cm9sPy5uYW1lID09PSBjb250cm9sTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2w/LmVycm9ycyB8fCAhZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0Vycm9ycyA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbmZpZy5lcnJvcnMpO1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbC5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVycm9yKSA9PiBjb25maWdFcnJvcnMuaW5jbHVkZXMoZXJyb3IpKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT2JqID0gY29udHJvbC5lcnJvcnMhW2Vycm9yS2V5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0TW9kZWwgPSB0aGlzLl9nZXRDb25maWdFcnJvck1vZGVsKGVycm9yS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yOiBNZXNzYWdlUG9wb3ZlckVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbnRyb2xOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yVGV4dE1vZGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGNvbnZlcnRGb3JtU3RhdGUoJ2Vycm9yJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZD8ubGFiZWwgPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZmllbGQ/LmVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclRleHRNb2RlbC5oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclRleHRNb2RlbC5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBjb250cm9sIS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yc1swXS5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsZWN0QWR2YW5jZWRGb3JtRGF0YSgpOiBNZXNzYWdlUG9wb3ZlckVycm9yR3JvdXBbXSB7XG4gICAgICAgIGxldCBlcnJvcnM6IE1lc3NhZ2VQb3BvdmVyRXJyb3JHcm91cFtdID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZm9ybUZpZWxkcy5sZW5ndGggPiAwID8gdGhpcy5mb3JtRmllbGRzIDogdGhpcy5fcHJvamVjdGVkRm9ybUZpZWxkQ29udHJvbHMudG9BcnJheSgpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlcyBvdmVyIGZvcm0gY29udHJvbHMgdG8gY29sbGVjdCB0aGVpciBlcnJvcnMuXG4gICAgICAgICAqIEBwYXJhbSBmb3JtIEZvcm0gR3JvdXAgb3IgYSBjb2xsZWN0aW9uIG9mIEZvcm0gR3JvdXBzLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgaXRlcmF0ZU92ZXJGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1Hcm91cFtdKTogTWVzc2FnZVBvcG92ZXJFcnJvckdyb3VwW10gPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtLmZvckVhY2goKGZvcm1Hcm91cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBpdGVyYXRlT3ZlckZvcm0oZm9ybUdyb3VwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoY29udHJvbE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZvcm1GaWVsZCkgPT4gZm9ybUZpZWxkLmlkID09PSBjb250cm9sTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBpdGVyYXRlT3ZlckZvcm0oY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sPy5lcnJvcnMgfHwgIWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JEaXJlY3RpdmUgPSBmaWVsZC5mb3JtRmllbGQ/Lmdyb3VwZWRFcnJvcnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChncm91cGVkRXJyb3IpID0+IGdyb3VwZWRFcnJvci5kaXJlY3RpdmUuZXJyb3IgPT09IGVycm9yS2V5XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBOYW1lID0gdGhpcy5fZ2V0R3JvdXBOYW1lKGZpZWxkPy5mb3JtRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX2dldEVycm9yTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycyFbZXJyb3JLZXldXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yR3JvdXBJbmRleCA9IGVycm9ycy5maW5kSW5kZXgoKGVycm9yR3JvdXApID0+IGVycm9yR3JvdXAuZ3JvdXAgPT09IGdyb3VwTmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yR3JvdXBJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yR3JvdXBJbmRleCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBlcnJvcnNbZXJyb3JHcm91cEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICBncm91cC5lcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gaXRlcmF0ZU92ZXJGb3JtKHRoaXMuX25nRm9ybXMubWFwKChmb3JtKSA9PiBmb3JtLmZvcm0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlcyBlcnJvciBtb2RlbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVycm9yTW9kZWwoXG4gICAgICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXG4gICAgICAgIGdyb3VwTmFtZTogc3RyaW5nLFxuICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgIGZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIGVycm9yS2V5OiBzdHJpbmcsXG4gICAgICAgIGVycm9yRGlyZWN0aXZlPzogRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmVDb250ZXh0LFxuICAgICAgICBlcnJvcj86IGFueVxuICAgICk6IE1lc3NhZ2VQb3BvdmVyRW50cnkge1xuICAgICAgICBsZXQgc3RhdGU6IEZvcm1TdGF0ZXMgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBjb25maWdFcnJvciA9IHRoaXMuX2NvbmZpZy5lcnJvcnNbZXJyb3JLZXldO1xuXG4gICAgICAgIGlmIChlcnJvckRpcmVjdGl2ZT8uZGlyZWN0aXZlLnR5cGUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZXJyb3JEaXJlY3RpdmUuZGlyZWN0aXZlLnR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNBZHZhbmNlZEVycm9yKGNvbmZpZ0Vycm9yKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBjb25maWdFcnJvci50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbnRyb2xOYW1lLFxuICAgICAgICAgICAgdHlwZTogc3RhdGUsXG4gICAgICAgICAgICBzdGF0ZTogY29udmVydEZvcm1TdGF0ZShzdGF0ZSksXG4gICAgICAgICAgICBncm91cDogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZD8uZm9ybUZpZWxkPy5sYWJlbCA/PyAnJyxcbiAgICAgICAgICAgIGhlYWRpbmc6IHRoaXMuX2dldEVycm9yVGV4dChmaWVsZCwgZXJyb3JEaXJlY3RpdmUsICdoZWFkaW5nJywgZXJyb3JLZXksIGVycm9yKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLl9nZXRFcnJvclRleHQoZmllbGQsIGVycm9yRGlyZWN0aXZlLCAnZGVzY3JpcHRpb24nLCBlcnJvcktleSwgZXJyb3IpLFxuICAgICAgICAgICAgZXJyb3JzOiBjb250cm9sIS5lcnJvcnMsXG4gICAgICAgICAgICBmb3JtRmllbGQ6IGZpZWxkLFxuICAgICAgICAgICAgZWxlbWVudDogZmllbGQ/LmVsZW1lbnRSZWZcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlcyBlcnJvciB0ZXh0IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBlcnJvci5cbiAgICAgKiBAcGFyYW0gZmllbGQgRm9ybSBGaWVsZCBDb250cm9sLlxuICAgICAqIEBwYXJhbSBlcnJvckRpcmVjdGl2ZSBPcHRpb25hbCBFcnJvciBkaXJlY3RpdmVcbiAgICAgKiBAcGFyYW0gc2VjdGlvbiBTZWN0aW9uIHdoZXJlIHRleHQgc2hvdWxkIGJlIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSBlcnJvcktleVxuICAgICAqIEBwYXJhbSBlcnJvclxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVycm9yVGV4dChcbiAgICAgICAgZmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgZXJyb3JEaXJlY3RpdmU6IE51bGxhYmxlPEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dD4sXG4gICAgICAgIHNlY3Rpb246ICdoZWFkaW5nJyB8ICdkZXNjcmlwdGlvbicgPSAnaGVhZGluZycsXG4gICAgICAgIGVycm9yS2V5OiBzdHJpbmcsXG4gICAgICAgIGVycm9yPzogYW55XG4gICAgKTogTWVzc2FnZVBvcG92ZXJFcnJvclRleHQge1xuICAgICAgICBjb25zdCBlcnJvclRleHRPYmo6IE1lc3NhZ2VQb3BvdmVyRXJyb3JUZXh0ID0ge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yRGlyZWN0aXZlPy5lcnJvcixcbiAgICAgICAgICAgIHR5cGU6IGVycm9yRGlyZWN0aXZlPy5kaXJlY3RpdmUgPyAnZGlyZWN0aXZlJyA6IGZpZWxkPy5mb3JtRmllbGQ/LmkxOFN0cmluZ3MgPyAndGVtcGxhdGVSZWYnIDogJ3N0cmluZydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZXJyb3JUZXh0T2JqLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHRNb2RlbCA9IHRoaXMuX2dldENvbmZpZ0Vycm9yTW9kZWwoZXJyb3JLZXkpO1xuXG4gICAgICAgICAgICBlcnJvclRleHRPYmouZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIGVycm9yVGV4dE9iai5tZXNzYWdlID0gZXJyb3JUZXh0TW9kZWxbc2VjdGlvbl07XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JUZXh0T2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yRGlyZWN0aXZlPy5kaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIGVycm9yVGV4dE9iai5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICBzZWN0aW9uID09PSAnaGVhZGluZydcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvckRpcmVjdGl2ZS5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZiA/PyBlcnJvckRpcmVjdGl2ZS5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvckRpcmVjdGl2ZS5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWY7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JUZXh0T2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JUZXh0T2JqLm1lc3NhZ2UgPSBmaWVsZD8uZm9ybUZpZWxkPy5pMThTdHJpbmdzID8/IG51bGw7XG4gICAgICAgIHJldHVybiBlcnJvclRleHRPYmo7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cE5hbWUoZm9ybUZpZWxkOiBOdWxsYWJsZTxQbGF0Zm9ybUZvcm1GaWVsZD4pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAoZm9ybUZpZWxkPy5mb3JtR3JvdXBDb250YWluZXI/Lm1haW5UaXRsZSkge1xuICAgICAgICAgICAgcGFydHMucHVzaChmb3JtRmllbGQuZm9ybUdyb3VwQ29udGFpbmVyLm1haW5UaXRsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybUZpZWxkPy5mb3JtRmllbGRHcm91cD8ubGFiZWwpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goZm9ybUZpZWxkLmZvcm1GaWVsZEdyb3VwLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q29uZmlnRXJyb3JNb2RlbChlcnJvcktleTogc3RyaW5nKTogTWVzc2FnZVBvcG92ZXJFcnJvckNvbmZpZyB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0Vycm9yID0gdGhpcy5fY29uZmlnLmVycm9yc1tlcnJvcktleV07XG4gICAgICAgIGNvbnN0IGlzUGxhaW5FcnJvciA9ICF0aGlzLl9pc0FkdmFuY2VkRXJyb3IoY29uZmlnRXJyb3IpO1xuICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBpc1BsYWluRXJyb3IgPyAnZXJyb3InIDogY29uZmlnRXJyb3IudHlwZTtcbiAgICAgICAgY29uc3QgaGVhZGluZ01lc3NhZ2UgPSBpc1BsYWluRXJyb3IgPyBjb25maWdFcnJvciA6IGNvbmZpZ0Vycm9yLmhlYWRpbmc7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uTWVzc2FnZSA9IGlzUGxhaW5FcnJvciA/IHVuZGVmaW5lZCA6IGNvbmZpZ0Vycm9yLmRlc2NyaXB0aW9uO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBlcnJvclR5cGUsXG4gICAgICAgICAgICBoZWFkaW5nOiBoZWFkaW5nTWVzc2FnZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbk1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQWR2YW5jZWRFcnJvcihlcnJvcjogc3RyaW5nIHwgTWVzc2FnZVBvcG92ZXJFcnJvckNvbmZpZyk6IGVycm9yIGlzIE1lc3NhZ2VQb3BvdmVyRXJyb3JDb25maWcge1xuICAgICAgICByZXR1cm4gISFlcnJvciAmJiB0eXBlb2YgZXJyb3IgIT09ICdzdHJpbmcnO1xuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==