@rivet-health/design-system 40.44.1 → 40.44.2

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 (148) hide show
  1. package/esm2022/lib/accessibility/sr-only/sr-only.component.mjs +3 -3
  2. package/esm2022/lib/download/download.service.mjs +6 -6
  3. package/esm2022/lib/format/pipes/common.mjs +5 -5
  4. package/esm2022/lib/format/pipes/date.pipe.mjs +3 -3
  5. package/esm2022/lib/format/pipes/days.pipe.mjs +3 -3
  6. package/esm2022/lib/format/pipes/dollars.pipe.mjs +3 -3
  7. package/esm2022/lib/format/pipes/number.pipe.mjs +3 -3
  8. package/esm2022/lib/format/pipes/percentage.pipe.mjs +3 -3
  9. package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +4 -4
  10. package/esm2022/lib/format/pipes/small-currency.pipe.mjs +4 -4
  11. package/esm2022/lib/format/pipes/small-number.pipe.mjs +4 -4
  12. package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +5 -5
  13. package/esm2022/lib/format/truncate/truncate.component.mjs +6 -6
  14. package/esm2022/lib/icon/dom-cache.mjs +1 -1
  15. package/esm2022/lib/icon/icon.component.mjs +5 -5
  16. package/esm2022/lib/icon/icons.mjs +1 -1
  17. package/esm2022/lib/input/alphabetic-field/alphabetic-field.component.mjs +3 -3
  18. package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +5 -5
  19. package/esm2022/lib/input/button/button.component.mjs +6 -6
  20. package/esm2022/lib/input/button-group/button-group.component.mjs +5 -5
  21. package/esm2022/lib/input/calendar/calendar.component.mjs +4 -4
  22. package/esm2022/lib/input/card-checkbox/card-checkbox.component.mjs +3 -3
  23. package/esm2022/lib/input/checkbox/checkbox.component.mjs +4 -4
  24. package/esm2022/lib/input/currency-field/currency-field.component.mjs +3 -3
  25. package/esm2022/lib/input/date/date.component.mjs +5 -5
  26. package/esm2022/lib/input/date-range/date-range.component.mjs +4 -4
  27. package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +5 -5
  28. package/esm2022/lib/input/filter-dropdown/filter-dropdown.component.mjs +5 -5
  29. package/esm2022/lib/input/input-label/input-label.component.mjs +3 -3
  30. package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +5 -5
  31. package/esm2022/lib/input/number-field/number-field.component.mjs +4 -4
  32. package/esm2022/lib/input/percentage-field/percentage-field.component.mjs +3 -3
  33. package/esm2022/lib/input/phone-field/phone-field.component.mjs +4 -4
  34. package/esm2022/lib/input/radio/radio.component.mjs +3 -3
  35. package/esm2022/lib/input/search/search.component.mjs +3 -3
  36. package/esm2022/lib/input/search-select/search-select.component.mjs +5 -5
  37. package/esm2022/lib/input/select/select/select.component.mjs +4 -4
  38. package/esm2022/lib/input/select/select-node/select-node.component.mjs +3 -3
  39. package/esm2022/lib/input/select/state.mjs +1 -1
  40. package/esm2022/lib/input/simple-select/option-group.pipe.mjs +3 -3
  41. package/esm2022/lib/input/simple-select/simple-select.component.mjs +4 -4
  42. package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +4 -4
  43. package/esm2022/lib/input/text-field/text-field.component.mjs +4 -4
  44. package/esm2022/lib/input/textarea-field/textarea-field.component.mjs +3 -3
  45. package/esm2022/lib/input/validation-message/validation-message.component.mjs +3 -3
  46. package/esm2022/lib/layout/card/card-actions.component.mjs +3 -3
  47. package/esm2022/lib/layout/card/card-content.component.mjs +6 -6
  48. package/esm2022/lib/layout/card/card-header.component.mjs +6 -6
  49. package/esm2022/lib/layout/card/card-link.component.mjs +5 -5
  50. package/esm2022/lib/layout/card/card-media.component.mjs +3 -3
  51. package/esm2022/lib/layout/card/card.component.mjs +5 -5
  52. package/esm2022/lib/layout/setting-row/setting-row.component.mjs +3 -3
  53. package/esm2022/lib/load/loading/loading.component.mjs +4 -4
  54. package/esm2022/lib/load/loading-cover/loading-cover.component.mjs +3 -3
  55. package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +6 -6
  56. package/esm2022/lib/navigation/link/link.component.mjs +6 -6
  57. package/esm2022/lib/navigation/page-header/page-header.component.mjs +3 -3
  58. package/esm2022/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +3 -3
  59. package/esm2022/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +3 -3
  60. package/esm2022/lib/navigation/tabs/tab/tab.component.mjs +3 -3
  61. package/esm2022/lib/navigation/tabs/tabs/tabs.component.mjs +3 -3
  62. package/esm2022/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +3 -3
  63. package/esm2022/lib/navigation/views/edit-view/edit-view.component.mjs +5 -5
  64. package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +5 -5
  65. package/esm2022/lib/navigation/views/state.mjs +1 -1
  66. package/esm2022/lib/navigation/views/view-menu/view-menu.component.mjs +5 -5
  67. package/esm2022/lib/navigation/views/views/views.component.mjs +4 -4
  68. package/esm2022/lib/notification/badge/badge.component.mjs +3 -3
  69. package/esm2022/lib/notification/banner/banner-action.component.mjs +5 -5
  70. package/esm2022/lib/notification/banner/banner.component.mjs +4 -4
  71. package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +5 -5
  72. package/esm2022/lib/notification/map-indicator/map-indicators.mjs +1 -1
  73. package/esm2022/lib/notification/notification-badge/notification-badge.component.mjs +3 -3
  74. package/esm2022/lib/overlay/callout/callout.component.mjs +6 -6
  75. package/esm2022/lib/overlay/callout/callout.helpers.mjs +1 -1
  76. package/esm2022/lib/overlay/callout/help/help.component.mjs +3 -3
  77. package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +8 -8
  78. package/esm2022/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +5 -5
  79. package/esm2022/lib/overlay/callout/menu/menu.component.mjs +3 -3
  80. package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +4 -4
  81. package/esm2022/lib/overlay/callout/tooltip/tooltip.component.mjs +3 -3
  82. package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +5 -5
  83. package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +5 -5
  84. package/esm2022/lib/overlay/modal/dialog-stack.service.mjs +3 -3
  85. package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +5 -5
  86. package/esm2022/lib/overlay/modal/modal.component.mjs +4 -4
  87. package/esm2022/lib/overlay/modal/side-sheet/side-sheet.component.mjs +3 -3
  88. package/esm2022/lib/overlay/overlay-outlet.component.mjs +4 -4
  89. package/esm2022/lib/overlay/overlay.directive.mjs +4 -4
  90. package/esm2022/lib/overlay/overlay.service.mjs +4 -4
  91. package/esm2022/lib/overlay/toast/toast-action.component.mjs +3 -3
  92. package/esm2022/lib/overlay/toast/toast.component.mjs +4 -4
  93. package/esm2022/lib/riv.module.mjs +4 -4
  94. package/esm2022/lib/size/size.directive.mjs +5 -5
  95. package/esm2022/lib/table/simple-table/coordinate-helper.mjs +1 -1
  96. package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +5 -5
  97. package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +5 -5
  98. package/esm2022/lib/table/simple-table/simple-table-row.component.mjs +3 -3
  99. package/esm2022/lib/table/simple-table/simple-table.component.mjs +4 -4
  100. package/esm2022/lib/table/table/clipboard.mjs +1 -1
  101. package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +1 -1
  102. package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +1 -1
  103. package/esm2022/lib/table/table/state-helpers/display-helpers.mjs +1 -1
  104. package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +1 -1
  105. package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +1 -1
  106. package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +1 -1
  107. package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +1 -1
  108. package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +1 -1
  109. package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +1 -1
  110. package/esm2022/lib/table/table/state.mjs +1 -1
  111. package/esm2022/lib/table/table/table/table.component.mjs +5 -5
  112. package/esm2022/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +5 -5
  113. package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +4 -4
  114. package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +4 -4
  115. package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +5 -5
  116. package/esm2022/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +6 -6
  117. package/esm2022/lib/table/table/table-search/table-search.component.mjs +4 -4
  118. package/esm2022/lib/table/table/table-search-columns/table-search-columns.component.mjs +3 -3
  119. package/esm2022/lib/visibility/visibility.directive.mjs +5 -5
  120. package/esm2022/lib/visualization/chart/chart-scaling.mjs +1 -1
  121. package/esm2022/lib/visualization/chart/chart.component.mjs +5 -5
  122. package/esm2022/lib/visualization/chart/chart.mjs +2 -2
  123. package/esm2022/lib/visualization/data-table/data-table-cell.component.mjs +5 -5
  124. package/esm2022/lib/visualization/data-table/data-table-header-cell.component.mjs +3 -3
  125. package/esm2022/lib/visualization/data-table/data-table-row.component.mjs +3 -3
  126. package/esm2022/lib/visualization/data-table/data-table.component.mjs +3 -3
  127. package/esm2022/lib/visualization/donut/donut.component.mjs +3 -3
  128. package/esm2022/lib/visualization/funnel-chart/funnel-chart.component.mjs +4 -4
  129. package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +1 -1
  130. package/esm2022/lib/visualization/highlight/highlight.component.mjs +3 -3
  131. package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +1 -1
  132. package/esm2022/lib/visualization/intervals.mjs +1 -1
  133. package/esm2022/lib/visualization/issue/issue.component.mjs +3 -3
  134. package/esm2022/lib/visualization/legend-item/legend-item.component.mjs +3 -3
  135. package/esm2022/lib/visualization/metric/metric.component.mjs +3 -3
  136. package/esm2022/lib/visualization/mini-pie/mini-pie.component.mjs +3 -3
  137. package/esm2022/lib/visualization/progress/progress.component.mjs +3 -3
  138. package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +4 -4
  139. package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +1 -1
  140. package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +5 -5
  141. package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +1 -1
  142. package/esm2022/lib/visualization/time-series/time-series.component.mjs +4 -4
  143. package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +1 -1
  144. package/esm2022/lib/visualization/trend/trend.component.mjs +4 -4
  145. package/esm2022/lib/visualization/zero-state/zero-state.component.mjs +3 -3
  146. package/fesm2022/rivet-health-design-system.mjs +418 -418
  147. package/fesm2022/rivet-health-design-system.mjs.map +1 -1
  148. package/package.json +1 -1
@@ -2868,7 +2868,7 @@ export var Chart;
2868
2868
  : 0,
2869
2869
  horizontalAxisLabelTextSize: chartDataDirection === 'vertical'
2870
2870
  ? dataAxisValues.bucketLabelTextSize
2871
- : dataAxisValues.dataLabelTextSize,
2871
+ : dataAxisValues.dataLabelTextSize, //Ticks and data labels use the same formatting on the same kind of data
2872
2872
  verticalAxisLabelTextSize: dataAxisValues.fontSize,
2873
2873
  chartDataDirection,
2874
2874
  horizontalContainerScale: scalingConfig.horizontalContainerScale,
@@ -3765,4 +3765,4 @@ export var Chart;
3765
3765
  };
3766
3766
  }
3767
3767
  })(Chart || (Chart = {}));
3768
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV2RSxPQUFPLEVBSUwsd0JBQXdCLEVBSXhCLHFCQUFxQixFQUlyQixrQ0FBa0MsR0FHbkMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLEtBQVcsS0FBSyxDQTAxTHJCO0FBMTFMRCxXQUFpQixLQUFLO0lBQ1AseUJBQW1CLEdBQUc7UUFDakMsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztR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LFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsOEJBQThCLENBQUM7UUFFNUQsTUFBTSxJQUFJLEdBQUc7VUFDUCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7O1VBRTlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0RCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7O1VBRTlDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTs7VUFFcEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUM1RCxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQzVELFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTs7O0tBR3pELENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLEtBQUssQ0FDWixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTLEVBQ1QsQ0FBUztRQUVULE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFNBQVMsVUFBVSxDQUNqQixDQUFTLEVBQ1QsSUFLQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsOEJBQThCLENBQUM7UUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVgsNENBQTRDO1FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVB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QUFLLFNBQVMsRUFBRTtnQkFDMUIsUUFBUSxHQUFHLENBQUMsQ0FBQzthQUNkO1NBQ0Y7UUFDRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2xDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUNmO1NBQ0Y7UUFDRCxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDbEIsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsU0FBUyxHQUFHLENBQUMsQ0FBQzthQUNmO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsV0FBVyxFQUFFLFFBQVE7WUFDckIsWUFBWSxFQUFFLFNBQVM7U0FDeEIsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLEVBMTFMZ0IsS0FBSyxLQUFMLEtBQUssUUEwMUxyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciB9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7IGFyYywgYXJlYSwgbGluZSwgcGllIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgdXRjRm9ybWF0IH0gZnJvbSAnZDMtdGltZS1mb3JtYXQnO1xuaW1wb3J0IHsgc3VtLCB1bmlxIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERheXNQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL2RheXMucGlwZSc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IFBlcmNlbnRhZ2VQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3BlcmNlbnRhZ2UucGlwZSc7XG5pbXBvcnQgeyBTbWFsbEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCB7IFNtYWxsTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBDYWxsb3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3ZlcmxheS9jYWxsb3V0L2NhbGxvdXQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIENoYXJ0RGF0YURpcmVjdGlvbixcbiAgQ2hhcnRTY2FsZUVsZW1lbnQsXG4gIENvbnRhaW5lclNjYWxpbmdUeXBlLFxuICBEZWZhdWx0RG9udXRTaXppbmdDb25maWcsXG4gIERlZmF1bHRTY2FsaW5nQ29uZmlnLFxuICBEb251dFNpemluZ0NvbmZpZyxcbiAgRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICBlbXB0eUNoYXJ0U2NhbGVWYWx1ZXMsXG4gIEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gIEZ1bGxTY2FsaW5nQ29uZmlnLFxuICBnZXREZWZhdWx0U2NhbGluZ0NvbmZpZ0J5Q2hhcnRUeXBlLFxuICBOb25FbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgUGFydGlhbEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxufSBmcm9tICcuL2NoYXJ0LXNjYWxpbmcnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENoYXJ0IHtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xvclBhbGV0dGUgPSBbXG4gICAgLy9CYXNlIGNvbG9yc1xuICAgICctLWJhamEtYmxhc3QtNTAnLFxuICAgICctLXRlYWwtZGlhbW9uZC01MCcsXG4gICAgJy0tZnlyZS01MCcsXG4gICAgJy0tdGFuZy01MCcsXG4gICAgJy0tcHVycC02MCcsXG4gICAgJy0tcm9zaS03MCcsXG4gICAgLy9TaGlmdCBsaWdodGVyIGZyb20gYmFzZSBieSAtMjBcbiAgICAnLS1iYWphLWJsYXN0LTMwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtMzAnLFxuICAgICctLWZ5cmUtMzAnLFxuICAgICctLXRhbmctMzAnLFxuICAgICctLXB1cnAtNDAnLFxuICAgICctLXJvc2ktNTAnLFxuICAgIC8vU2hpZnQgZGFya2VyIGZyb20gYmFzZSBieSArMjBcbiAgICAnLS1iYWphLWJsYXN0LTcwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNzAnLFxuICAgICctLWZ5cmUtNzAnLFxuICAgICctLXRhbmctNzAnLFxuICAgICctLXB1cnAtODAnLFxuICAgICctLXJvc2ktOTAnLFxuICBdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFydChcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBkYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgcmV0dXJuIGNvbmZpZy50eXBlID09PSAnbGluZSdcbiAgICAgID8gbGluZXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2FyZWEnXG4gICAgICA/IGFyZWFzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdkb251dCdcbiAgICAgID8gYXJjcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInXG4gICAgICA/IGhvcml6b250YWxCYXJzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdiYXInXG4gICAgICA/IGJhcnMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ3dhdGVyZmFsbCdcbiAgICAgID8gd2F0ZXJmYWxsKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdmdW5uZWwnXG4gICAgICA/IGZ1bm5lbChjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnZmxvdydcbiAgICAgID8gZmxvd3MoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBlbXB0eUNoYXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZXMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdsaW5lJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogaGlkZGVuRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgaWYgKGhpZGRlbkRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBMYWJlbGVkIHNlcmllcyBhcmVuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBmb3IgbGluZSBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGhpZGRlbkRhdGEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIG5vbi1iYXIgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHdhcm5VbnN1cHBvcnRlZFBhdHRlcm5zKGhpZGRlbkRhdGEsIFsnc3RyaXBlZCcsICdkb3RzJ10sICdsaW5lJyk7XG4gICAgLy9UaGlzIGFzc2lnbm1lbnQgbWFrZXMgdHlwZXNjcmlwdCByZWNvZ25pemUgdGhlIGFjdHVhbCB0eXBlIChUaW1lc2VyaWVzRGF0YSlcbiAgICBjb25zdCBkYXRhID0gaGlkZGVuRGF0YTtcblxuICAgIGNvbnN0IHsgZGF0ZUZvcm1hdCwgcGlwZVRyYW5zZm9ybSwgY29sb3JzIH0gPSBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcsXG4gICAgKTtcblxuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tDb3VudCA9IGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgY29uc3QgeFRpY2tzID0gZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICAgdGlja0NvdW50LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICkubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgeFNjYWxlID0gKGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0ICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwICogaW5kZXhcbiAgICAgICk7XG4gICAgfTtcbiAgICBjb25zdCB7IHNjYWxlLCB0aWNrczogZGF0YVRpY2tzIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB5VGlja3MgPSBkYXRhVGlja3MubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgbGluZXMgPVxuICAgICAgZGF0YS54Lmxlbmd0aCA+IDFcbiAgICAgICAgPyBkYXRhLnlzLm1hcCh5ID0+ICh7XG4gICAgICAgICAgICBsaW5lOiBsaW5lPG51bWJlcj4oXG4gICAgICAgICAgICAgIGkgPT4geFNjYWxlKGkpLFxuICAgICAgICAgICAgICBpID0+IHNjYWxlKHkudmFsdWVzW2ldLCB5LmlzU2Vjb25kYXJ5KSxcbiAgICAgICAgICAgICkoaW5kaWNlcyksXG4gICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgfSkpXG4gICAgICAgIDogW107XG4gICAgY29uc3QgY2lyY2xlcyA9XG4gICAgICBkYXRhLngubGVuZ3RoID09PSAxXG4gICAgICAgID8gZGF0YS55cy5tYXAoKHlTZXJpZXMsIGkpID0+ICh7XG4gICAgICAgICAgICBjeDogeFNjYWxlKDApLFxuICAgICAgICAgICAgY3k6IHNjYWxlKHlTZXJpZXMudmFsdWVzWzBdLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIDApKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBbXTtcblxuICAgIGNvbnN0IHlPZmZzZXQgPSBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gZGF0YS55cy5mbGF0TWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiAoe1xuICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKHZhbCwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCkpLFxuICAgICAgICB5UG9zOiBzY2FsZSh2YWwsIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgpKSAtIHlPZmZzZXQsXG4gICAgICAgIHhQb3M6IHhTY2FsZSh4SW5kZXgpLFxuICAgICAgICBhbmNob3I6ICdtaWRkbGUnLFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB4SG92ZXJJbmRpY2VzID0gZ2V0QnVja2V0QW5kQ2x1c3Rlck51bUZvckhvdmVyKFxuICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YS54Lmxlbmd0aCxcbiAgICAgICk7XG4gICAgICBpZiAoIXhIb3ZlckluZGljZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGJ1Y2tldE51bTogeEluZGV4IH0gPSB4SG92ZXJJbmRpY2VzO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZSh4SW5kZXgpO1xuICAgICAgY29uc3QgdmlzaWJsZVlJbmRleCA9IGZpbmROZWFyZXN0SW5kZXhXaXRoU2Vjb25kYXJ5KFxuICAgICAgICBkYXRhLnlzLm1hcCgoeSwgaSkgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogeS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBpc1NlY29uZGFyeTogY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgpLFxuICAgICAgICB9KSksXG4gICAgICAgIHBvcy55LFxuICAgICAgICBzY2FsZSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoKHksIGkpID0+XG4gICAgICAgIHNjYWxlKHkudmFsdWVzW3hJbmRleF0sIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4KSksXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmb3JtYXQgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgICAgICAgZm9ybWF0ZWREYXRlKGNvbmZpZy5kYXRlRm9ybWF0IHx8ICdkYXknLCBkYXRlKTtcblxuICAgICAgLy8gQ2xhbXAgaW4gY2hhcnQtbG9jYWwgY29vcmRpbmF0ZXMgZmlyc3Qgc28gdGhlIHRvb2x0aXAgc3RheXMgd2l0aGluIHRoZVxuICAgICAgLy8gdmlzaWJsZSBjaGFydCBhcmVhLCB0aGVuIHRyYW5zbGF0ZSB0byB2aWV3cG9ydCBjb29yZGluYXRlcyBieSBhZGRpbmdcbiAgICAgIC8vIHBvcy5yZWN0LngveSAod2hpY2ggYXJlIHZpZXdwb3J0LXJlbGF0aXZlIGZyb20gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KS5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IHggLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IHlzW3Zpc2libGVZSW5kZXhdIC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclkgfSA9IGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgU01BTExfUEFERElORyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCcsXG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiBmb3JtYXQobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiBkYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgeS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaW5kZXgsIHhJbmRleCksXG4gICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3MsXG4gICAgICB5VGlja3MsXG4gICAgICBjb2xvcnMsXG4gICAgICBsaW5lcyxcbiAgICAgIGNpcmNsZXMsXG4gICAgICBob3ZlcixcbiAgICAgIGJhcnM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgICAgZ3JhZGllbnRzOiBbXSxcbiAgICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhcmVhcyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2FyZWEnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiB1bmNoZWNrZWREYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAodW5jaGVja2VkRGF0YS50eXBlID09PSAnbGFiZWxlZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIExhYmVsZWQgc2VyaWVzIGFyZW4ndCBjdXJyZW50bHkgc3VwcG9ydGVkIGZvciBhcmVhIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNob3dEYXRhTGFiZWxzID09PSB0cnVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBEYXRhIGxhYmVscyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBhbnkgc3RhY2tlZCBjaGFydCB0eXBlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YSh1bmNoZWNrZWREYXRhKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBub24tYmFyIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICB3YXJuVW5zdXBwb3J0ZWRQYXR0ZXJucyh1bmNoZWNrZWREYXRhLCBbJ3N0cmlwZWQnXSwgJ2FyZWEnKTtcbiAgICAvL1RoaXMgYXNzaWdubWVudCBtYWtlcyB0eXBlc2NyaXB0IHJlY29nbml6ZSB0aGUgYWN0dWFsIHR5cGUgKFRpbWVzZXJpZXNEYXRhKVxuICAgIGNvbnN0IGRhdGEgPSB1bmNoZWNrZWREYXRhO1xuXG4gICAgY29uc3QgeyBkYXRlRm9ybWF0LCBwaXBlVHJhbnNmb3JtLCBjb2xvcnMgfSA9IGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoXG4gICAgICBhbGxEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tDb3VudCA9IGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgY29uc3QgeFRpY2tzID0gZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICAgdGlja0NvdW50LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICkubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgeFNjYWxlID0gKGluZGV4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0ICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwICogaW5kZXhcbiAgICAgICk7XG4gICAgfTtcbiAgICBjb25zdCB7IHNjYWxlLCB0aWNrczogZGF0YVRpY2tzIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB5VGlja3MgPSBkYXRhVGlja3MubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG4gICAgY29uc3QgemVyb0F4aXNQb3NWYWwgPSBzY2FsZSgwLCB0cnVlKTtcblxuICAgIGNvbnN0IGluZGljZXMgPSBkYXRhLngubWFwKChfLCBpKSA9PiBpKTtcbiAgICBjb25zdCBhcmVhcyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+ICh7XG4gICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICBhcmVhOiBhcmVhPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGkpLFxuICAgICAgICBpID0+IGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgeUluZGV4LCBpLCBzY2FsZSkueVZhbHVlLFxuICAgICAgICBpID0+XG4gICAgICAgICAgZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCB5SW5kZXgsIGksIHNjYWxlKS55VmFsdWUgK1xuICAgICAgICAgIGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgeUluZGV4LCBpLCBzY2FsZSkuaGVpZ2h0LFxuICAgICAgKShpbmRpY2VzKSxcbiAgICB9KSk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwgfHxcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeEhvdmVySW5kaWNlcyA9IGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEueC5sZW5ndGgsXG4gICAgICApO1xuICAgICAgaWYgKCF4SG92ZXJJbmRpY2VzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBidWNrZXROdW06IHhJbmRleCB9ID0geEhvdmVySW5kaWNlcztcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoeEluZGV4KTtcbiAgICAgIGNvbnN0IGZ1bGxZcyA9IGRhdGEueXMubWFwKChfLCBtYXBZSW5kZXgpID0+XG4gICAgICAgIGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgbWFwWUluZGV4LCB4SW5kZXgsIHNjYWxlKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5cyA9IGZ1bGxZcy5tYXAoeSA9PiB5LnlWYWx1ZSk7XG4gICAgICAvL1RoaXMgaXMgdGhlIHlzIGFycmF5LCBidXQgc2hpZnRlZCBzbyB0aGF0IHRoZSB5IHBvc2l0aW9uIGZvciBuZWdhdGl2ZSB2YWx1ZXMgaXMgYXdheSBmcm9tIHRoZSBheGlzIChmb3IgdGhlIGhvdmVyIGNpcmNsZXMpXG4gICAgICBjb25zdCBzaGlmdGVkWXMgPSBmdWxsWXMubWFwKHkgPT4ge1xuICAgICAgICBpZiAoeS55VmFsdWUgPj0gemVyb0F4aXNQb3NWYWwpIHtcbiAgICAgICAgICByZXR1cm4geS55VmFsdWUgKyB5LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geS55VmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHlQb3NTaWduID0gemVyb0F4aXNQb3NWYWwgLSBwb3MueTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gLTE7XG4gICAgICBpZiAoeVBvc1NpZ24gPCAwICYmIGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA8IDApKSkge1xuICAgICAgICBmb3IgKGxldCBpID0geXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPj0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCBwb3MueSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPD0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCBwb3MueSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09PSAtMSkge1xuICAgICAgICBpZiAocG9zLnkgPD0gemVyb0F4aXNQb3NWYWwpIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1pbiguLi55cykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWF4KC4uLnlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0geCAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0geXNbdmlzaWJsZVlJbmRleF0gLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSB9ID0gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBTTUFMTF9QQURESU5HLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5czogc2hpZnRlZFlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogdXRjRm9ybWF0KCclQiAlZCwgJVknKShuZXcgRGF0ZShkYXRhLnhbeEluZGV4XSkpLFxuICAgICAgICAgIG1ldHJpY3M6IGRhdGEueXNcbiAgICAgICAgICAgIC5tYXAoKHksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogY29sb3JzW2luZGV4ICUgY29sb3JzLmxlbmd0aF0sXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICAgIHZhbHVlOiBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHkudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpbmRleCwgeEluZGV4KSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3MsXG4gICAgICB5VGlja3MsXG4gICAgICBjb2xvcnMsXG4gICAgICBhcmVhcyxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgaG92ZXIsXG4gICAgICBiYXJzOiBbXSxcbiAgICAgIGFyY3M6IFtdLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgICAgZGF0YUxhYmVsczogW10sXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhcnMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdiYXInKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcywgdmlzaWJsZVN1cHBJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy5zaG93RGF0YUxhYmVscyA9PT0gdHJ1ZSAmJlxuICAgICAgaXNTdGFja2VkRGF0YShjb25maWcpICYmXG4gICAgICAhaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YSwgY29uZmlnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgRGF0YSBsYWJlbHMgYXJlbid0IHN1cHBvcnRlZCBmb3IgYW55IHN0YWNrZWQgY2hhcnQgdHlwZVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJlxuICAgICAgaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpICYmXG4gICAgICAhaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YSwgY29uZmlnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBjbHVzdGVyZWQgZGF0YSAoanVzdCB1c2UgYW5vdGhlciBub3JtYWwgeSBzZXJpZXMpXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHJldHVybiBiYXJzSGVscGVyKFxuICAgICAgY29uZmlnLFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIHZpc2libGVTdXBwSW5kaWNlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBmYWxzZSxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBmdW5uZWwoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdmdW5uZWwnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcywgdmlzaWJsZVN1cHBJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIHJldHVybiBiYXJzSGVscGVyKFxuICAgICAgY29uZmlnLFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIHZpc2libGVTdXBwSW5kaWNlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhdGVyZmFsbChcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ3dhdGVyZmFsbCcpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHVuY2hlY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YSh1bmNoZWNrZWREYXRhKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBub24tYmFyIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBXYXRlcmZhbGwgY2hhcnRzIGRvIG5vdCBjdXJyZW50bHkgaGF2ZSB0d28tYXhpcyBzdXBwb3J0JyxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgd2FyblVuc3VwcG9ydGVkUGF0dGVybnModW5jaGVja2VkRGF0YSwgW10sICd3YXRlcmZhbGwnKTtcblxuICAgIHJldHVybiBiYXJzSGVscGVyKFxuICAgICAgY29uZmlnLFxuICAgICAgYWxsRGF0YSxcbiAgICAgIHVuY2hlY2tlZERhdGEsXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIFtdLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYmFyc0hlbHBlcihcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBhbGxEYXRhOiBOb25GbG93RGF0YSxcbiAgICB1bmNoZWNrZWREYXRhOiBOb25GbG93RGF0YSxcbiAgICB2aXNpYmxlSW5kaWNlczogbnVtYmVyW10sXG4gICAgdmlzaWJsZVN1cHBJbmRpY2VzOiBudW1iZXJbXSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIGlzRnVubmVsOiBib29sZWFuLFxuICAgIGlzV2F0ZXJmYWxsOiBib29sZWFuLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGVGb3JtYXQsIHBpcGVUcmFuc2Zvcm0sIGNvbG9ySW5kaWNlcywgY29sb3JzIH0gPVxuICAgICAgZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhhbGxEYXRhLCB1bmNoZWNrZWREYXRhLCBjb25maWcpO1xuICAgIGNvbnN0IHdhdGVyZmFsbERhdGEgPSB3YXRlcmZhbGxUcmFuc2Zvcm0odW5jaGVja2VkRGF0YSwgaXNXYXRlcmZhbGwpO1xuICAgIGNvbnN0IGRhdGEgPSBpc1dhdGVyZmFsbCA/IHdhdGVyZmFsbERhdGEuZGF0YSA6IHVuY2hlY2tlZERhdGE7XG5cbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrQ291bnQgPSBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIGNvbnN0IHhUaWNrcyA9IChcbiAgICAgIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnXG4gICAgICAgID8gZ2VuZXJhdGVMYWJlbGxlZFRpY2tzKGRhdGEsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcylcbiAgICAgICAgOiBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB0aWNrQ291bnQsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgKVxuICAgICkubWFwKHRpY2sgPT4gdG9YVGljayh0aWNrKSk7XG4gICAgY29uc3QgeyBzY2FsZSwgdGlja3M6IGRhdGFUaWNrcyB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgeVRpY2tzID0gZGF0YVRpY2tzLm1hcCh0aWNrID0+IHRvWVRpY2sodGljaykpO1xuICAgIGNvbnN0IHplcm9BeGlzUG9zVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBncmFkaWVudHM6IFJlY3RbXVtdID0gW107XG4gICAgY29uc3QgYmFyczogUmVjdFtdW10gPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbmRTZXJpZXNHcmFkaWVudHM6IFJlY3RbXSA9IFtdO1xuICAgICAgY29uc3QgaW5kU2VyaWVzQmFycyA9IHkudmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgeyB5VmFsdWUsIGhlaWdodCB9ID0gZ2V0QmFyWUluZm8oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgeUluZGV4LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHNjYWxlLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB4VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgPyB5SW5kZXggOiAwLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNGdW5uZWwpIHtcbiAgICAgICAgICAvL1RoZSBlbXB0eSBncmFkaWVudCBzdGlsbCBuZWVkcyB0byBiZSBpbnNlcnRlZCB0byBrZWVwIGRhdGEgYWxpZ25lZFxuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgaW5kU2VyaWVzR3JhZGllbnRzLnB1c2goe1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeVZhbHVlOiBwcmV2QmFyWVZhbCB9ID0gZ2V0QmFyWUluZm8oXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgeUluZGV4LFxuICAgICAgICAgICAgICBpbmRleCAtIDEsXG4gICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaW5kU2VyaWVzR3JhZGllbnRzLnB1c2goe1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICAgIHk6IHByZXZCYXJZVmFsLFxuICAgICAgICAgICAgICB3aWR0aDogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heCh5VmFsdWUgLSBwcmV2QmFyWVZhbCwgMCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXI6IFJlY3QgPSB7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgIHdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgfSk7XG4gICAgICBncmFkaWVudHMucHVzaChpbmRTZXJpZXNHcmFkaWVudHMpO1xuICAgICAgcmV0dXJuIGluZFNlcmllc0JhcnM7XG4gICAgfSk7XG4gICAgbGV0IHN1cHBCYXJzOiBSZWN0W11bXSA9IFtdO1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSkge1xuICAgICAgc3VwcEJhcnMgPSBkYXRhLnN1cHBsZW1lbnRhcnlZcy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgICAgeS52YWx1ZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgeVZhbHVlLCBoZWlnaHQgfSA9IGdldEJhcllJbmZvKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeFZhbHVlID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHkuc3VwcGxlbWVudGFsSW5kZXggKyAxLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgICB3aWR0aDogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBiYXJzLnB1c2goLi4uc3VwcEJhcnMpO1xuICAgICAgY29sb3JzLnB1c2goXG4gICAgICAgIC4uLmRhdGEuc3VwcGxlbWVudGFyeVlzLm1hcCh5ID0+XG4gICAgICAgICAgZ2V0Q29sb3IoeSwgY29sb3JJbmRpY2VzLCBjb25maWcuY29sb3JzKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2F0ZXJmYWxsTGluZXM6IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfVtdID0gW107XG4gICAgaWYgKGlzV2F0ZXJmYWxsKSB7XG4gICAgICAvL01vdmUgYmFycyBiYXNlZCBvbiBoZWlnaHQgb2YgcHJldmlvdXMgYmFycyAoZXhjZXB0IHRoZSB0b3RhbCBiYXIpXG4gICAgICBsZXQgYmFyT2Zmc2V0UnVubmluZ1RvdGFsID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBsZXQgYmFyT2Zmc2V0Q2hhbmdlID0gMDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiYXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgYmFySXNOZWdhdGl2ZSA9XG4gICAgICAgICAgICBiYXJzW2pdW2ldLnkgPj0gemVyb0F4aXNQb3NWYWwgJiYgYmFyc1tqXVtpXS5oZWlnaHQgPiAwO1xuICAgICAgICAgIGlmIChiYXJJc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICBiYXJPZmZzZXRDaGFuZ2UgLT0gYmFyc1tqXVtpXS5oZWlnaHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhck9mZnNldENoYW5nZSArPSBiYXJzW2pdW2ldLmhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYmFyc1tqXVtpXS5vZmZzZXQgPSBiYXJPZmZzZXRSdW5uaW5nVG90YWw7XG4gICAgICAgICAgYmFyc1tqXVtpXS55IC09IGJhck9mZnNldFJ1bm5pbmdUb3RhbDtcbiAgICAgICAgICBpZiAoaiA9PT0gYmFycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCB4MSA9IGJhcnNbal1baV0ueCArIGJhcnNbYmFycy5sZW5ndGggLSAxXVtpXS53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gYmFyc1tqXVtpXS55ICsgKGJhcklzTmVnYXRpdmUgPyBiYXJzW2pdW2ldLmhlaWdodCA6IDApO1xuICAgICAgICAgICAgY29uc3QgeDIgPSBiYXJzW2pdW2kgKyAxXS54O1xuICAgICAgICAgICAgY29uc3QgeTIgPSB5MTtcbiAgICAgICAgICAgIHdhdGVyZmFsbExpbmVzLnB1c2goe1xuICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgeTEsXG4gICAgICAgICAgICAgIHgyLFxuICAgICAgICAgICAgICB5MixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBiYXJPZmZzZXRSdW5uaW5nVG90YWwgKz0gYmFyT2Zmc2V0Q2hhbmdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gZGF0YS55cy5mbGF0TWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmVnYXRpdmVCYXIgPVxuICAgICAgICAgIGJhcnNbeUluZGV4XVt4SW5kZXhdLnkgPj0gemVyb0F4aXNQb3NWYWwgJiZcbiAgICAgICAgICBiYXJzW3lJbmRleF1beEluZGV4XS5oZWlnaHQgPiAwO1xuICAgICAgICBjb25zdCB5T2Zmc2V0ID0gaXNOZWdhdGl2ZUJhclxuICAgICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSArXG4gICAgICAgICAgICBiYXJzW3lJbmRleF1beEluZGV4XS5oZWlnaHRcbiAgICAgICAgICA6IC1jaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0odmFsLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4KSkgPz8gJycsXG4gICAgICAgICAgeVBvczpcbiAgICAgICAgICAgIChpc0Z1bm5lbCAmJiBncmFkaWVudHNbeUluZGV4XVt4SW5kZXhdLmhlaWdodCAhPT0gMFxuICAgICAgICAgICAgICA/IGdyYWRpZW50c1t5SW5kZXhdW3hJbmRleF0ueVxuICAgICAgICAgICAgICA6IGJhcnNbeUluZGV4XVt4SW5kZXhdLnkpICsgeU9mZnNldCxcbiAgICAgICAgICB4UG9zOiBiYXJzW3lJbmRleF1beEluZGV4XS54ICsgYmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggLyAyLFxuICAgICAgICAgIGFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgfSk7XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpKSB7XG4gICAgICBjb25zdCBzdXBwRGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBkYXRhLnN1cHBsZW1lbnRhcnlZcy5mbGF0TWFwKFxuICAgICAgICAoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3ViTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzTmVnYXRpdmVCYXIgPVxuICAgICAgICAgICAgICBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0ueSA+PSB6ZXJvQXhpc1Bvc1ZhbCAmJlxuICAgICAgICAgICAgICBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0ID4gMDtcbiAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQgPSBpc05lZ2F0aXZlQmFyXG4gICAgICAgICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArXG4gICAgICAgICAgICAgICAgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLmhlaWdodFxuICAgICAgICAgICAgICA6IC1jaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgKSA/PyAnJyxcbiAgICAgICAgICAgICAgeVBvczogc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLnkgKyB5T2Zmc2V0LFxuICAgICAgICAgICAgICB4UG9zOlxuICAgICAgICAgICAgICAgIHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS54ICsgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgYW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBkYXRhTGFiZWxzLnB1c2goLi4uc3VwcERhdGFMYWJlbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwWXMgPSBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSA/IGRhdGEuc3VwcGxlbWVudGFyeVlzIDogbnVsbDtcblxuICAgICAgY29uc3QgeEhvdmVySW5kaWNlcyA9IGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEueC5sZW5ndGgsXG4gICAgICApO1xuICAgICAgaWYgKCF4SG92ZXJJbmRpY2VzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBidWNrZXROdW06IHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICAgY2x1c3Rlck5vcm1Db3VudCxcbiAgICAgICAgY2x1c3Rlck51bVR5cGUsXG4gICAgICB9ID0geEhvdmVySW5kaWNlcztcblxuICAgICAgbGV0IGlzU3VwcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgc3VwcEluZGV4VmFsID0gMDtcbiAgICAgIGlmIChzdXBwWXMpIHtcbiAgICAgICAgc3VwcEluZGV4VmFsID0gY2x1c3Rlck51bSAtIGNsdXN0ZXJOb3JtQ291bnQ7XG4gICAgICAgIGlmIChjbHVzdGVyTnVtVHlwZSA9PT0gJ3N1cHAnKSB7XG4gICAgICAgICAgaXNTdXBwVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGNYID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKChfLCBtYXBZSW5kZXgpID0+XG4gICAgICAgIGlzU3VwcFZhbHVlXG4gICAgICAgICAgPyBnZXRTdXBwQmFyWUluZm9WaWFZSW5kZXgoXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgbWFwWUluZGV4LFxuICAgICAgICAgICAgICBzdXBwSW5kZXhWYWwsXG4gICAgICAgICAgICAgIHhJbmRleCxcbiAgICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICApLnlWYWx1ZVxuICAgICAgICAgIDogZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCBtYXBZSW5kZXgsIHhJbmRleCwgc2NhbGUpLnlWYWx1ZSAtXG4gICAgICAgICAgICAoIWlzU3VwcFZhbHVlICYmIGlzV2F0ZXJmYWxsXG4gICAgICAgICAgICAgID8gYmFyc1ttYXBZSW5kZXhdW3hJbmRleF0ub2Zmc2V0ID8/IDBcbiAgICAgICAgICAgICAgOiAwKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB5UG9zU2lnbiA9IHplcm9BeGlzUG9zVmFsIC0gcmVhbFBvc1k7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IC0xO1xuICAgICAgbGV0IGRyb3BPZmZIb3ZlckRldGVjdGVkID0gZmFsc2U7XG4gICAgICBpZiAoeVBvc1NpZ24gPCAwICYmIGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA8IDApKSkge1xuICAgICAgICBmb3IgKGxldCBpID0geXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPj0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCByZWFsUG9zWSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoeXNbaV0gPD0gemVyb0F4aXNQb3NWYWwgJiYgeXNbaV0gPCByZWFsUG9zWSkge1xuICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgJiYgIXN1cHBZcykge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gY2x1c3Rlck51bTtcbiAgICAgICAgaWYgKGlzRnVubmVsICYmIHhJbmRleCAhPT0gMCAmJiB5c1t2aXNpYmxlWUluZGV4XSA+IHJlYWxQb3NZKSB7XG4gICAgICAgICAgZHJvcE9mZkhvdmVyRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHJlYWxQb3NZIDw9IHplcm9BeGlzUG9zVmFsKSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5taW4oLi4ueXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1heCguLi55cykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGxldCB7IHlWYWx1ZSwgaGVpZ2h0IH0gPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IGdldFN1cHBCYXJZSW5mb1ZpYVlJbmRleChcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgICBzdXBwSW5kZXhWYWwsXG4gICAgICAgICAgICB4SW5kZXgsXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICApXG4gICAgICAgIDogZ2V0QmFyWUluZm8oZGF0YSwgY29uZmlnLCB5SW5kZXgsIHhJbmRleCwgc2NhbGUpO1xuICAgICAgaWYgKGRyb3BPZmZIb3ZlckRldGVjdGVkKSB7XG4gICAgICAgIHlWYWx1ZSA9IGdyYWRpZW50c1t5SW5kZXhdW3hJbmRleF0ueTtcbiAgICAgICAgaGVpZ2h0ID0gZ3JhZGllbnRzW3lJbmRleF1beEluZGV4XS5oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGNhbGNYIC0gcG9zLmNvbnRhaW5lclNjcm9sbFggLSBTTUFMTF9QQURESU5HO1xuICAgICAgY29uc3Qgd2lkdGggPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgU01BTExfUEFERElORyAqIDI7XG4gICAgICBjb25zdCB3YXRlcmZhbGxPZmZzZXQgPVxuICAgICAgICAhaXNTdXBwVmFsdWUgJiYgaXNXYXRlcmZhbGwgPyBiYXJzW3lJbmRleF1beEluZGV4XS5vZmZzZXQgPz8gMCA6IDA7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSB5VmFsdWUgLSBwb3MuY29udGFpbmVyU2Nyb2xsWSAtIHdhdGVyZmFsbE9mZnNldDtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSwgYW5jaG9yV2lkdGgsIGFuY2hvckhlaWdodCB9ID1cbiAgICAgICAgY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBhbmNob3JXaWR0aCxcbiAgICAgICAgYW5jaG9ySGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIC8vV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaW5kZXggZm9yIHRoZSBsYXRlciBjaGVja0lmU2Vjb25kYXJ5IGNhbGxcbiAgICAgIGNvbnN0IHlzRm9yTWV0cmljczoge1xuICAgICAgICBkYXRhOiBTdXBwbGVtZW50YXJ5RGF0YVkgfCBEYXRhWTtcbiAgICAgICAgb3JpZ2luYWxJbmRleDogbnVtYmVyO1xuICAgICAgfVtdID1cbiAgICAgICAgaXNTdXBwVmFsdWUgJiYgc3VwcFlzXG4gICAgICAgICAgPyBzdXBwWXNcbiAgICAgICAgICAgICAgLm1hcCgoc3VwcFksIGluZGV4KSA9PiAoeyBkYXRhOiBzdXBwWSwgb3JpZ2luYWxJbmRleDogaW5kZXggfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoc3VwcFkgPT4gc3VwcFkuZGF0YS5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgIDogZGF0YS55cy5tYXAoKHksIGluZGV4KSA9PiAoeyBkYXRhOiB5LCBvcmlnaW5hbEluZGV4OiBpbmRleCB9KSk7XG4gICAgICAvLyBGaW5kIHRoZSBzcGVjaWZpYyBzdXBwbGVtZW50YXJ5IGl0ZW0gdGhhdCB3YXMgaG92ZXJlZFxuICAgICAgY29uc3QgZ3JvdXBTdXBwcyA9IHN1cHBZc1xuICAgICAgICA/IHN1cHBZcy5maWx0ZXIocyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpID8/IFtdXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBzdXBwQXJyYXlJbmRleCA9IHZpc2libGVZSW5kZXg7IC8vIFVzZSB0aGUgdmlzdWFsIFkgcG9zaXRpb24gd2l0aGluIHRoZSBsYXllclxuICAgICAgY29uc3QgZmlsdGVyZWRTdXBwWUluZGV4ID1cbiAgICAgICAgc3VwcEFycmF5SW5kZXggPj0gMCAmJiBzdXBwQXJyYXlJbmRleCA8IGdyb3VwU3VwcHMubGVuZ3RoICYmIHN1cHBZc1xuICAgICAgICAgID8gc3VwcFlzLmluZGV4T2YoZ3JvdXBTdXBwc1tzdXBwQXJyYXlJbmRleF0pID8/IC0xXG4gICAgICAgICAgOiAtMTtcbiAgICAgIGNvbnN0IHN1cHBZSW5kZXggPVxuICAgICAgICBmaWx0ZXJlZFN1cHBZSW5kZXggPj0gMCA/IHZpc2libGVTdXBwSW5kaWNlc1tmaWx0ZXJlZFN1cHBZSW5kZXhdIDogLTE7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgeDogY2FsY1ggKyBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplIC8gMixcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICAuLi4oaXNTdXBwVmFsdWUgJiYgc3VwcFlJbmRleCA+PSAwXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGlzU3VwcFZhbHVlLFxuICAgICAgICAgICAgICBzdXBwWUluZGV4OiBzdXBwWUluZGV4LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oZHJvcE9mZkhvdmVyRGV0ZWN0ZWQgPyB7IGlzRHJvcE9mZjogdHJ1ZSB9IDoge30pLFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGRhdGU6XG4gICAgICAgICAgICBkYXRhLnR5cGUgPT09ICdsYWJlbGVkJ1xuICAgICAgICAgICAgICA/IGRyb3BPZmZIb3ZlckRldGVjdGVkXG4gICAgICAgICAgICAgICAgPyAnRHJvcCBvZmYgZnJvbSAnLmNvbmNhdChkYXRhLnhbeEluZGV4IC0gMV0ubGFiZWwpXG4gICAgICAgICAgICAgICAgOiBkYXRhLnhbeEluZGV4XS5sYWJlbFxuICAgICAgICAgICAgICA6IHV0Y0Zvcm1hdCgnJUIgJWQsICVZJykobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiB5c0Zvck1ldHJpY3NcbiAgICAgICAgICAgIC5tYXAoeSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogZ2V0Q29sb3IoXG4gICAgICAgICAgICAgICAgaXNXYXRlcmZhbGwgPyB3YXRlcmZhbGxEYXRhLm1hcC5nZXQoeS5kYXRhKSA6IHkuZGF0YSxcbiAgICAgICAgICAgICAgICBjb2xvckluZGljZXMsXG4gICAgICAgICAgICAgICAgY29uZmlnLmNvbG9ycyxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkuZGF0YS5sYWJlbCxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5kYXRhLnBhdHRlcm4sXG4gICAgICAgICAgICAgIHZhbHVlOiBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIGRyb3BPZmZIb3ZlckRldGVjdGVkXG4gICAgICAgICAgICAgICAgICA/IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgIHkuZGF0YS52YWx1ZXNbeEluZGV4IC0gMV0gLSB5LmRhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB5LmRhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShcbiAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICB5Lm9yaWdpbmFsSW5kZXgsXG4gICAgICAgICAgICAgICAgICBkcm9wT2ZmSG92ZXJEZXRlY3RlZCA/IHhJbmRleCAtIDEgOiB4SW5kZXgsXG4gICAgICAgICAgICAgICAgICBpc1N1cHBWYWx1ZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIHhUaWNrcyxcbiAgICAgIHlUaWNrcyxcbiAgICAgIGNvbG9ycyxcbiAgICAgIGJhcnMsXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGFyZWFzOiBbXSxcbiAgICAgIGhvdmVyLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXMsXG4gICAgICBncmFkaWVudHMsXG4gICAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaG9yaXpvbnRhbEJhcnMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdob3Jpem9udGFsIGJhcicpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICAvL1NvbWUgb2YgdGhpcyBzdHVmZiBnZXRzIGNvbmZ1c2luZywgYmVjYXVzZSB4IGFuZCB5IGFyZSBlc3NlbnRpYWxseSBpbnZlcnRlZCBoZXJlXG4gICAgLy8gIFNvLCBpZiB5b3Ugc2VlIGEgc2l0dWF0aW9uIHdoZXJlIGEgdmFyaWFibGUgaXMgbmFtZWQgJ3knLCBidXQgcmVmZXJlbmNpbmdcbiAgICAvLyAgJ3gnIChvciB2aWNlIHZlcnNhKSwgdGhhdCdzIHdoeVxuICAgIGNvbnN0IHsgZGF0YSwgdmlzaWJsZUluZGljZXMsIHZpc2libGVTdXBwSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAoXG4gICAgICBjb25maWcuc2hvd0RhdGFMYWJlbHMgPT09IHRydWUgJiZcbiAgICAgIGlzU3RhY2tlZERhdGEoY29uZmlnKSAmJlxuICAgICAgIWlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGEsIGNvbmZpZylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIERhdGEgbGFiZWxzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGFueSBzdGFja2VkIGNoYXJ0IHR5cGVcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiZcbiAgICAgIGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSAmJlxuICAgICAgIWlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGEsIGNvbmZpZylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3IgY2x1c3RlcmVkIGRhdGEgKGp1c3QgdXNlIGFub3RoZXIgbm9ybWFsIHkgc2VyaWVzKVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0ZUZvcm1hdCwgcGlwZVRyYW5zZm9ybSwgY29sb3JJbmRpY2VzLCBjb2xvcnMgfSA9XG4gICAgICBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKGFsbERhdGEsIGRhdGEsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrQ291bnQgPSBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIGNvbnN0IHlUaWNrcyA9IChcbiAgICAgIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnXG4gICAgICAgID8gZ2VuZXJhdGVMYWJlbGxlZFRpY2tzKGRhdGEsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcylcbiAgICAgICAgOiBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB0aWNrQ291bnQsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgKVxuICAgICkubWFwKHRpY2sgPT4gdG9ZVGljayh0aWNrKSk7XG4gICAgY29uc3QgeyBzY2FsZSwgdGlja3M6IGRhdGFUaWNrcyB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgeFRpY2tzID0gZGF0YVRpY2tzLm1hcCh0aWNrID0+IHRvWFRpY2sodGljaykpO1xuICAgIGNvbnN0IHplcm9BeGlzUG9zVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnM6IHtcbiAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgIHlQb3M6IG51bWJlcjtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgfVtdW10gPSBbXTtcbiAgICBjb25zdCBob3Jpem9udGFsQmFycyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1YlNpbXBIb3JCYXJzOiB7XG4gICAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgICAgeVBvczogbnVtYmVyO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgfVtdID0gW107XG4gICAgICBjb25zdCByZXRWYWwgPSB5LnZhbHVlcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgeFZhbHVlLCB3aWR0aCB9ID0gZ2V0QmFyWEluZm8oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgeUluZGV4LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHNjYWxlLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbHVzdGVySW5mbyA9IGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJOdW0gPSBjbHVzdGVySW5mby5ub3JtQ2x1c3RlckluZGljZXMuaW5kZXhPZih5SW5kZXgpO1xuICAgICAgICBjb25zdCB5VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgPyBjbHVzdGVyTnVtIDogMCxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBob3JSID0gTWF0aC5taW4oXG4gICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgIE1hdGguZmxvb3Iod2lkdGggLyAyKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmVyUiA9IE1hdGgubWluKFxuICAgICAgICAgIERFRkFVTFRfSE9SSVpPTlRBTF9CQVJfQ09STkVSX1JBRElVUyxcbiAgICAgICAgICBNYXRoLmZsb29yKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgLyAyKSxcbiAgICAgICAgKTtcbiAgICAgICAgc3ViU2ltcEhvckJhcnMucHVzaCh7XG4gICAgICAgICAgeFBvczogeFZhbHVlLFxuICAgICAgICAgIHlQb3M6IHlWYWx1ZSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vSWYgY2x1c3Rlck51bSBpcyAtMSwgdGhlbiB0aGUgdmFsdWUgb2YgZGF0YVt5SW5kZXhdW3hJbmRleF0gbXVzdCBiZSB6ZXJvXG4gICAgICAgIGlmIChjbHVzdGVyTnVtID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3Jpem9udGFsQmFyOiAnJyxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vRG9uJ3QgZHJhdyBhbnl0aGluZyBmb3IgemVyby12YWx1ZSBiYXJzXG4gICAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3Jpem9udGFsQmFyOiAnJyxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQb3NpdGl2ZSA9IGRhdGEueXNbeUluZGV4XS52YWx1ZXNbaW5kZXhdID4gMDtcbiAgICAgICAgY29uc3QgaGFzQW55TmVnYXRpdmVCYXJzID0gZGF0YS55c1xuICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgLmZpbmQodmFsID0+IHZhbCA8IDApO1xuICAgICAgICBjb25zdCBoYXNBbnlQb3NpdGl2ZUJhcnMgPSBkYXRhLnlzXG4gICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAuZmluZCh2YWwgPT4gdmFsID4gMCk7XG5cbiAgICAgICAgLy9UaGVzZSBjaGVja3MgYXJlIHRvIG1ha2Ugc3VyZSB3ZSBzdGlsbCByb3VuZCBpZiBhbGwgcHJldmlvdXMvbGF0ZXIgdmFsdWVzIGFyZSAwXG4gICAgICAgIGNvbnN0IGFsbExlZnRaZXJvID0gaXNQb3NpdGl2ZVxuICAgICAgICAgID8gZGF0YS55c1xuICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueU5lZ2F0aXZlQmFyc1xuICAgICAgICAgIDogZGF0YS55c1xuICAgICAgICAgICAgICAuc2xpY2UoeUluZGV4ICsgMSwgZGF0YS55cy5sZW5ndGgpXG4gICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA8IDApLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgY29uc3QgbGVmdFNpZGVSb3VuZCA9ICFpc1N0YWNrZWREYXRhKGNvbmZpZykgfHwgYWxsTGVmdFplcm87XG4gICAgICAgIGNvbnN0IGFsbFJpZ2h0WmVybyA9IGlzUG9zaXRpdmVcbiAgICAgICAgICA/IGRhdGEueXNcbiAgICAgICAgICAgICAgLnNsaWNlKHlJbmRleCArIDEsIGRhdGEueXMubGVuZ3RoKVxuICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDBcbiAgICAgICAgICA6IGRhdGEueXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIHlJbmRleClcbiAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsIDwgMCkubGVuZ3RoID09PSAwICYmICFoYXNBbnlQb3NpdGl2ZUJhcnM7XG4gICAgICAgIGNvbnN0IHJpZ2h0U2lkZVJvdW5kID0gIWlzU3RhY2tlZERhdGEoY29uZmlnKSB8fCBhbGxSaWdodFplcm87XG4gICAgICAgIGNvbnN0IHBhdGhEID0gY2FsY3VsYXRlSG9yaXpvbnRhbEJhclBhdGgoXG4gICAgICAgICAgbGVmdFNpZGVSb3VuZCxcbiAgICAgICAgICByaWdodFNpZGVSb3VuZCxcbiAgICAgICAgICB4VmFsdWUsXG4gICAgICAgICAgeVZhbHVlLFxuICAgICAgICAgIGhvclIsXG4gICAgICAgICAgdmVyUixcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxCYXI6IHBhdGhELFxuICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnMucHVzaChzdWJTaW1wSG9yQmFycyk7XG4gICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1cHBZcyA9IGRhdGEuc3VwcGxlbWVudGFyeVlzO1xuICAgIGNvbnN0IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnM6IHtcbiAgICAgIHhQb3M6IG51bWJlcjtcbiAgICAgIHlQb3M6IG51bWJlcjtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgfVtdW10gPSBbXTtcbiAgICBpZiAoc3VwcFlzKSB7XG4gICAgICBjb25zdCBzdXBwSG9yaXpvbnRhbEJhcnMgPSBzdXBwWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViU2ltcEhvckJhcnM6IHtcbiAgICAgICAgICB4UG9zOiBudW1iZXI7XG4gICAgICAgICAgeVBvczogbnVtYmVyO1xuICAgICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCByZXRWYWwgPSB5LnZhbHVlcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB4VmFsdWUsIHdpZHRoIH0gPSBnZXRCYXJYSW5mbyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGNsdXN0ZXJJbmZvID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgICBjb25zdCBjbHVzdGVyTnVtID1cbiAgICAgICAgICAgIGNsdXN0ZXJJbmZvLnN1cHBDbHVzdGVySW5kaWNlcy5pbmRleE9mKHkuc3VwcGxlbWVudGFsSW5kZXgpICtcbiAgICAgICAgICAgIGNsdXN0ZXJJbmZvLm5vcm1Db3VudDtcbiAgICAgICAgICBjb25zdCB5VmFsdWUgPSBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgaG9yUiA9IE1hdGgubWluKFxuICAgICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgICAgTWF0aC5mbG9vcih3aWR0aCAvIDIpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmVyUiA9IE1hdGgubWluKFxuICAgICAgICAgICAgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTLFxuICAgICAgICAgICAgTWF0aC5mbG9vcihjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplIC8gMiksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdWJTaW1wSG9yQmFycy5wdXNoKHtcbiAgICAgICAgICAgIHhQb3M6IHhWYWx1ZSxcbiAgICAgICAgICAgIHlQb3M6IHlWYWx1ZSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vRG9uJ3QgZHJhdyBhbnl0aGluZyBmb3IgemVyby12YWx1ZSBiYXJzXG4gICAgICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3Jpem9udGFsQmFyOiAnJyxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNQb3NpdGl2ZSA9IHN1cHBZc1t5SW5kZXhdLnZhbHVlc1tpbmRleF0gPiAwO1xuICAgICAgICAgIGNvbnN0IGhhc0FueU5lZ2F0aXZlQmFycyA9IHN1cHBZc1xuICAgICAgICAgICAgLmZpbHRlcihzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleClcbiAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAuZmluZCh2YWwgPT4gdmFsIDwgMCk7XG4gICAgICAgICAgY29uc3QgaGFzQW55UG9zaXRpdmVCYXJzID0gc3VwcFlzXG4gICAgICAgICAgICAuZmlsdGVyKHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4KVxuICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgIC5maW5kKHZhbCA9PiB2YWwgPiAwKTtcblxuICAgICAgICAgIC8vVGhlc2UgY2hlY2tzIGFyZSB0byBtYWtlIHN1cmUgd2Ugc3RpbGwgcm91bmQgaWYgYWxsIHByZXZpb3VzL2xhdGVyIHZhbHVlcyBhcmUgMFxuICAgICAgICAgIGNvbnN0IGFsbExlZnRaZXJvID0gaXNQb3NpdGl2ZVxuICAgICAgICAgICAgPyBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueU5lZ2F0aXZlQmFyc1xuICAgICAgICAgICAgOiBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoeUluZGV4ICsgMSwgc3VwcFlzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsIDwgMCkubGVuZ3RoID09PSAwO1xuICAgICAgICAgIGNvbnN0IGxlZnRTaWRlUm91bmQgPSAhaXNTdGFja2VkRGF0YShjb25maWcpIHx8IGFsbExlZnRaZXJvO1xuICAgICAgICAgIGNvbnN0IGFsbFJpZ2h0WmVybyA9IGlzUG9zaXRpdmVcbiAgICAgICAgICAgID8gc3VwcFlzXG4gICAgICAgICAgICAgICAgLnNsaWNlKHlJbmRleCArIDEsIHN1cHBZcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA+IDApLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgOiBzdXBwWXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgeUluZGV4KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPCAwKS5sZW5ndGggPT09IDAgJiYgIWhhc0FueVBvc2l0aXZlQmFycztcbiAgICAgICAgICBjb25zdCByaWdodFNpZGVSb3VuZCA9ICFpc1N0YWNrZWREYXRhKGNvbmZpZykgfHwgYWxsUmlnaHRaZXJvO1xuICAgICAgICAgIGNvbnN0IHBhdGhEID0gY2FsY3VsYXRlSG9yaXpvbnRhbEJhclBhdGgoXG4gICAgICAgICAgICBsZWZ0U2lkZVJvdW5kLFxuICAgICAgICAgICAgcmlnaHRTaWRlUm91bmQsXG4gICAgICAgICAgICB4VmFsdWUsXG4gICAgICAgICAgICB5VmFsdWUsXG4gICAgICAgICAgICBob3JSLFxuICAgICAgICAgICAgdmVyUixcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3Jpem9udGFsQmFyOiBwYXRoRCxcbiAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgIHg6IHhWYWx1ZSxcbiAgICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFycy5wdXNoKHN1YlNpbXBIb3JCYXJzKTtcbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICAgIH0pO1xuICAgICAgaG9yaXpvbnRhbEJhcnMucHVzaCguLi5zdXBwSG9yaXpvbnRhbEJhcnMpO1xuICAgICAgY29sb3JzLnB1c2goLi4uc3VwcFlzLm1hcCh5ID0+IGdldENvbG9yKHksIGNvbG9ySW5kaWNlcywgY29uZmlnLmNvbG9ycykpKTtcbiAgICB9XG5cbiAgICBjb25zdCB5T2Zmc2V0ID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZTtcbiAgICBjb25zdCBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IGRhdGEueXMuZmxhdE1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBiYXJJc05lZ2F0aXZlID1cbiAgICAgICAgICBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnhQb3MgPCB6ZXJvQXhpc1Bvc1ZhbCAmJlxuICAgICAgICAgIHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggPiAwO1xuICAgICAgICBjb25zdCB4T2Zmc2V0ID0gYmFySXNOZWdhdGl2ZVxuICAgICAgICAgID8gLWNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmdcbiAgICAgICAgICA6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggK1xuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtKHZhbCwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCkpID8/ICcnLFxuICAgICAgICAgIHlQb3M6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueVBvcyArIHlPZmZzZXQsXG4gICAgICAgICAgeFBvczogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS54UG9zICsgeE9mZnNldCxcbiAgICAgICAgICBhbmNob3I6IGJhcklzTmVnYXRpdmUgPyAnZW5kJyA6ICdzdGFydCcsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgfSk7XG4gICAgaWYgKHN1cHBZcykge1xuICAgICAgY29uc3Qgc3VwcERhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gc3VwcFlzLmZsYXRNYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhcklzTmVnYXRpdmUgPVxuICAgICAgICAgICAgc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueFBvcyA8XG4gICAgICAgICAgICAgIHplcm9BeGlzUG9zVmFsICYmXG4gICAgICAgICAgICBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCA+IDA7XG4gICAgICAgICAgY29uc3QgeE9mZnNldCA9IGJhcklzTmVnYXRpdmVcbiAgICAgICAgICAgID8gLWNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmdcbiAgICAgICAgICAgIDogc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggK1xuICAgICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgdHJ1ZSksXG4gICAgICAgICAgICAgICkgPz8gJycsXG4gICAgICAgICAgICB5UG9zOiBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS55UG9zICsgeU9mZnNldCxcbiAgICAgICAgICAgIHhQb3M6IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnhQb3MgKyB4T2Zmc2V0LFxuICAgICAgICAgICAgYW5jaG9yOiBiYXJJc05lZ2F0aXZlID8gJ2VuZCcgOiAnc3RhcnQnLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3ViTGFiZWxzO1xuICAgICAgfSk7XG4gICAgICBkYXRhTGFiZWxzLnB1c2goLi4uc3VwcERhdGFMYWJlbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwWXMgPSBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSA/IGRhdGEuc3VwcGxlbWVudGFyeVlzIDogbnVsbDtcbiAgICAgIGNvbnN0IHhIb3ZlckluZGljZXMgPSBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgICAgIHJlYWxQb3NZLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhLngubGVuZ3RoLFxuICAgICAgKTtcbiAgICAgIGlmICgheEhvdmVySW5kaWNlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYnVja2V0TnVtOiB4SW5kZXgsXG4gICAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICAgIGNsdXN0ZXJOb3JtQ291bnQsXG4gICAgICAgIGNsdXN0ZXJOdW1UeXBlLFxuICAgICAgfSA9IHhIb3ZlckluZGljZXM7XG5cbiAgICAgIGxldCB4ID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgY2x1c3Rlck51bSxcbiAgICAgICk7XG4gICAgICBsZXQgaXNTdXBwVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCBzdXBwSW5kZXhWYWwgPSAwO1xuICAgICAgaWYgKHN1cHBZcykge1xuICAgICAgICBzdXBwSW5kZXhWYWwgPSBjbHVzdGVyTnVtIC0gY2x1c3Rlck5vcm1Db3VudDtcbiAgICAgICAgaWYgKGNsdXN0ZXJOdW1UeXBlID09PSAnc3VwcCcpIHtcbiAgICAgICAgICBpc1N1cHBWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBob3ZlcmluZyBzdXBwbGVtZW50YXJ5IHZhbHVlcywgZ2V0IGJhcnMgZm9yIHRoYXQgc3VwcGxlbWVudGFsIGxheWVyXG4gICAgICAvLyBXaGVuIGhvdmVyaW5nIG9yaWdpbmFsIFlzLCBnZXQgYmFycyBmb3Igb3JpZ2luYWwgWXNcbiAgICAgIGNvbnN0IGZ1bGxZcyA9XG4gICAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcFZhbHVlXG4gICAgICAgICAgPyAoXG4gICAgICAgICAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzID0+IHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbCxcbiAgICAgICAgICAgICAgKSA/PyBbXVxuICAgICAgICAgICAgKS5tYXAoc3VwcFkgPT5cbiAgICAgICAgICAgICAgZ2V0QmFyWEluZm8oXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgZGF0YS5zdXBwbGVtZW50YXJ5WXMuaW5kZXhPZihzdXBwWSksXG4gICAgICAgICAgICAgICAgeEluZGV4LFxuICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBkYXRhLnlzLm1hcCgoXywgbWFwWUluZGV4KSA9PlxuICAgICAgICAgICAgICBnZXRCYXJYSW5mbyhkYXRhLCBjb25maWcsIG1hcFlJbmRleCwgeEluZGV4LCBzY2FsZSksXG4gICAgICAgICAgICApO1xuICAgICAgY29uc3QgeXMgPSBmdWxsWXMubWFwKHkgPT4geS54VmFsdWUpO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVsbFlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxlZnRCb3JkZXIgPSBmdWxsWXNbaV0ueFZhbHVlO1xuICAgICAgICBjb25zdCByaWdodEJvcmRlckNhbmRpZGF0ZXMgPSBmdWxsWXNcbiAgICAgICAgICAuZmlsdGVyKHkgPT4geS54VmFsdWUgPiBsZWZ0Qm9yZGVyKVxuICAgICAgICAgIC5tYXAoeSA9PiB5LnhWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyID1cbiAgICAgICAgICByaWdodEJvcmRlckNhbmRpZGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5yaWdodEJvcmRlckNhbmRpZGF0ZXMpXG4gICAgICAgICAgICA6IGxlZnRCb3JkZXIgKyBmdWxsWXNbaV0ud2lkdGg7XG4gICAgICAgIGlmIChyZWFsUG9zWCA+IGxlZnRCb3JkZXIgJiYgcmVhbFBvc1ggPCByaWdodEJvcmRlcikge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpKSB7XG4gICAgICAgIHZpc2libGVZSW5kZXggPSBjbHVzdGVyTnVtO1xuICAgICAgfVxuXG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHJlYWxQb3NYID49IHplcm9BeGlzUG9zVmFsKSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5tYXgoLi4ueXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1pbiguLi55cykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGb3Igc3VwcGxlbWVudGFyeSBiYXJzOiB2aXNpYmxlWUluZGV4IGlzIGluZGV4IHdpdGhpbiBmaWx0ZXJlZCBzdXBwbGVtZW50YXJ5IGFycmF5XG4gICAgICAvLyBGb3Igb3JpZ2luYWwgWXM6IHZpc2libGVZSW5kZXggaXMgaW5kZXggd2l0aGluIG9yaWdpbmFsIFlzIGFycmF5XG4gICAgICBjb25zdCBhY3R1YWxTdXBwWUluZGV4ID1cbiAgICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaXNTdXBwVmFsdWVcbiAgICAgICAgICA/IGRhdGEuc3VwcGxlbWVudGFyeVlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAgIHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbCAmJlxuICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKHMyID0+IHMyLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgICAgICAgICAuaW5kZXhPZihzKSA9PT0gdmlzaWJsZVlJbmRleCxcbiAgICAgICAgICAgICkgPz8gLTFcbiAgICAgICAgICA6IC0xO1xuXG4gICAgICBjb25zdCB5SW5kZXggPSBpc1N1cHBWYWx1ZSA/IDAgOiB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcblxuICAgICAgLy9DaGVjayBpZiB3ZSd2ZSBsYW5kZWQgb24gYSB6ZXJvLXdpZHRoIGJhciAob25seSByZWFsbHkgcmVsZXZhbnQgb24gZW5kcylcbiAgICAgIGNvbnN0IGJhcnNUb0NoZWNrID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzO1xuICAgICAgY29uc3QgYmFySW5kZXhUb0NoZWNrID0gaXNTdXBwVmFsdWUgPyBhY3R1YWxTdXBwWUluZGV4IDogdmlzaWJsZVlJbmRleDtcblxuICAgICAgaWYgKFxuICAgICAgICBiYXJJbmRleFRvQ2hlY2sgPj0gMCAmJlxuICAgICAgICBiYXJzVG9DaGVja1tiYXJJbmRleFRvQ2hlY2tdW3hJbmRleF0ud2lkdGggPT09IDAgJiZcbiAgICAgICAgaXNTdGFja2VkRGF0YShjb25maWcpXG4gICAgICApIHtcbiAgICAgICAgbGV0IGFsdEJhckZvdW5kID0gZmFsc2U7XG4gICAgICAgIC8vQ2hlY2sgdXB3YXJkc1xuICAgICAgICBmb3IgKGxldCBpID0gYmFySW5kZXhUb0NoZWNrICsgMTsgaSA8IGJhcnNUb0NoZWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFsdEJhckZvdW5kKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhcnNUb0NoZWNrW2ldW3hJbmRleF0ud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBWYWx1ZSkge1xuICAgICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS5zdXBwbGVtZW50YXJ5WXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKGRhdGEuc3VwcGxlbWVudGFyeVlzW2ldKSE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsdEJhckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL0NoZWNrIGRvd253YXJkc1xuICAgICAgICBmb3IgKGxldCBpID0gYmFySW5kZXhUb0NoZWNrIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAoYWx0QmFyRm91bmQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmFyc1RvQ2hlY2tbaV1beEluZGV4XS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcFZhbHVlKSB7XG4gICAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBkYXRhLnN1cHBsZW1lbnRhcnlZc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIocyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoZGF0YS5zdXBwbGVtZW50YXJ5WXNbaV0pITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWx0QmFyRm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcmlnaW5hbFN1cHBZSW5kZXggPVxuICAgICAgICBpc1N1cHBWYWx1ZSAmJiBhY3R1YWxTdXBwWUluZGV4ID49IDBcbiAgICAgICAgICA/IHZpc2libGVTdXBwSW5kaWNlc1thY3R1YWxTdXBwWUluZGV4XVxuICAgICAgICAgIDogLTE7XG5cbiAgICAgIGNvbnN0IGJhclhQb3MgPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbYWN0dWFsU3VwcFlJbmRleF1beEluZGV4XS54UG9zXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueFBvcztcbiAgICAgIGNvbnN0IGJhcllQb3MgPSBpc1N1cHBWYWx1ZVxuICAgICAgICA/IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbYWN0dWFsU3VwcFlJbmRleF1beEluZGV4XS55UG9zXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ueVBvcztcbiAgICAgIGNvbnN0IGJhcldpZHRoID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW2FjdHVhbFN1cHBZSW5kZXhdW3hJbmRleF0ud2lkdGhcbiAgICAgICAgOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS53aWR0aDtcblxuICAgICAgY29uc3QgbG9jYWxBbmNob3JYID0gYmFyWFBvcyAtIHBvcy5jb250YWluZXJTY3JvbGxYIC0gU01BTExfUEFERElORztcbiAgICAgIGNvbnN0IHdpZHRoID0gYmFyV2lkdGggKyBTTUFMTF9QQURESU5HICogMjtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGJhcllQb3MgLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemU7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICk7XG4gICAgICAvL1dlIG5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGluZGV4IGZvciB0aGUgbGF0ZXIgY2hlY2tJZlNlY29uZGFyeSBjYWxsXG4gICAgICBjb25zdCB5c0Zvck1ldHJpY3M6IHtcbiAgICAgICAgZGF0YTogU3VwcGxlbWVudGFyeURhdGFZIHwgRGF0YVk7XG4gICAgICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcjtcbiAgICAgIH1bXSA9XG4gICAgICAgIGlzU3VwcFZhbHVlICYmIHN1cHBZc1xuICAgICAgICAgID8gc3VwcFlzXG4gICAgICAgICAgICAgIC5tYXAoKHN1cHBZLCBpbmRleCkgPT4gKHsgZGF0YTogc3VwcFksIG9yaWdpbmFsSW5kZXg6IGluZGV4IH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKHN1cHBZID0+IHN1cHBZLmRhdGEuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbClcbiAgICAgICAgICA6IGRhdGEueXMubWFwKCh5LCBpbmRleCkgPT4gKHsgZGF0YTogeSwgb3JpZ2luYWxJbmRleDogaW5kZXggfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIC4uLihpc1N1cHBWYWx1ZSAmJiBvcmlnaW5hbFN1cHBZSW5kZXggPj0gMFxuICAgICAgICAgID8geyBpc1N1cHBWYWx1ZSwgc3VwcFlJbmRleDogb3JpZ2luYWxTdXBwWUluZGV4IH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOlxuICAgICAgICAgICAgZGF0YS50eXBlID09PSAnbGFiZWxlZCdcbiAgICAgICAgICAgICAgPyBkYXRhLnhbeEluZGV4XS5sYWJlbFxuICAgICAgICAgICAgICA6IHV0Y0Zvcm1hdCgnJUIgJWQsICVZJykobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiB5c0Zvck1ldHJpY3NcbiAgICAgICAgICAgIC5tYXAoeSA9PiAoe1xuICAgICAgICAgICAgICBjb2xvcjogZ2V0Q29sb3IoeS5kYXRhLCBjb2xvckluZGljZXMsIGNvbmZpZy5jb2xvcnMpLFxuICAgICAgICAgICAgICBsYWJlbDogeS5kYXRhLmxhYmVsLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiB5LmRhdGEucGF0dGVybixcbiAgICAgICAgICAgICAgdmFsdWU6IHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgeS5kYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeS5vcmlnaW5hbEluZGV4LCB4SW5kZXgsIGlzU3VwcFZhbHVlKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3M6IHhUaWNrcyxcbiAgICAgIHlUaWNrczogeVRpY2tzLFxuICAgICAgaG92ZXIsXG4gICAgICBjb2xvcnMsXG4gICAgICBiYXJzOiBbXSxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFycyxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyY3MoXG4gICAgY29uZmlnOiBEb251dENvbmZpZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKCF3YXJuRmxvd0RhdGEoYWxsRGF0YSwgJ2RvbnV0JykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGUgJiZcbiAgICAgIChjb25maWcudmFsdWVUeXBlID09PSAncGVyY2VudGFnZScgfHxcbiAgICAgICAgY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZSA9PT0gJ3BlcmNlbnRhZ2UnKVxuICAgICkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgVHdvIGF4ZXMgd2l0aCBwZXJjZW50YWdlIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGRvbnV0IGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoYWxsRGF0YSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3Igbm9uLWJhciBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgd2FyblVuc3VwcG9ydGVkUGF0dGVybnMoYWxsRGF0YSwgW10sICdkb251dCcpO1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZG9udXREYXRhID0gQ2hhcnQuY29udmVydENoYXJ0RGF0YVRvRG9udXREYXRhKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IGhhc05vblplcm9WYWx1ZSA9IGRvbnV0RGF0YS5zb21lKGQgPT4gZC52YWx1ZSA+IDApO1xuICAgIGNvbnN0IGFyY0RhdGEgPSBoYXNOb25aZXJvVmFsdWVcbiAgICAgID8gZG9udXREYXRhXG4gICAgICA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIGNvbnN0IGNvbG9ycyA9IGhhc05vblplcm9WYWx1ZVxuICAgICAgPyB2aXNpYmxlSW5kaWNlcy5tYXAoaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0pXG4gICAgICA6IFsnLS1ncmF5LTMwJ107XG4gICAgY29uc3QgeyBwaXBlVHJhbnNmb3JtIH0gPSBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKFxuICAgICAgYWxsRGF0YSxcbiAgICAgIHVuc3RhY2tlZERhdGEsXG4gICAgICBjb25maWcsXG4gICAgKTtcblxuICAgIGNvbnN0IGRvbnV0RGVmYXVsdENvbmZpZyA9IERlZmF1bHREb251dFNpemluZ0NvbmZpZztcbiAgICBjb25zdCBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8uZWxlbWVudFNjYWxlcyxcbiAgICAgIGRvbnV0RGVmYXVsdENvbmZpZy5lbGVtZW50U2NhbGVzLFxuICAgICAgJ2RhdGFMYWJlbFBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgZm9udFNpemVDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5lbGVtZW50U2NhbGVzLFxuICAgICAgZG9udXREZWZhdWx0Q29uZmlnLmVsZW1lbnRTY2FsZXMsXG4gICAgICAnZm9udFNpemUnLFxuICAgICk7XG4gICAgY29uc3QgZGF0YUxhYmVsVGV4dFNpemluZyA9IGdldERhdGFMYWJlbFNpemUoXG4gICAgICB1bnN0YWNrZWREYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGZvbnRTaXplQ29uZmlnLnRhcmdldCxcbiAgICApO1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/Lmhvcml6b250YWxDb250YWluZXJTY2FsZSAhPT1cbiAgICAgIHVuZGVmaW5lZFxuICAgICAgICA/IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWcuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlXG4gICAgICAgIDogZG9udXREZWZhdWx0Q29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZTtcbiAgICBjb25zdCB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/LnZlcnRpY2FsQ29udGFpbmVyU2NhbGUgIT09XG4gICAgICB1bmRlZmluZWRcbiAgICAgICAgPyBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgOiBkb251dERlZmF1bHRDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZTtcbiAgICBjb25zdCBvdXRlclJhZGl1c0NvbmZpZyA9XG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5vdXRlclJhZGl1cyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZy5vdXRlclJhZGl1c1xuICAgICAgICA6IGRvbnV0RGVmYXVsdENvbmZpZy5vdXRlclJhZGl1cztcbiAgICBjb25zdCBkcmF3UmFkaXVzQ29uZmlnID1cbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/LmRyYXdSYWRpdXMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWcuZHJhd1JhZGl1c1xuICAgICAgICA6IGRvbnV0RGVmYXVsdENvbmZpZy5kcmF3UmFkaXVzO1xuXG4gICAgY29uc3Qgb3V0ZXIgPVxuICAgICAgb3V0ZXJSYWRpdXNDb25maWcudHlwZSA9PT0gJ3Byb3BvcnRpb24nXG4gICAgICAgID8gKGRpbWVuc2lvbnMuaGVpZ2h0IC8gMikgKiBvdXRlclJhZGl1c0NvbmZpZy52YWx1ZVxuICAgICAgICA6IG91dGVyUmFkaXVzQ29uZmlnLnZhbHVlO1xuICAgIGNvbnN0IGRyYXdSYWRpdXMgPVxuICAgICAgZHJhd1JhZGl1c0NvbmZpZy50eXBlID09PSAncHJvcG9ydGlvbidcbiAgICAgICAgPyBvdXRlciAqIGRyYXdSYWRpdXNDb25maWcudmFsdWVcbiAgICAgICAgOiBkcmF3UmFkaXVzQ29uZmlnLnZhbHVlO1xuICAgIGNvbnN0IGlubmVyID0gb3V0ZXIgLSBkcmF3UmFkaXVzO1xuXG4gICAgY29uc3QgcGllQXJjcyA9IHBpZTxEb251dERhdGE+KClcbiAgICAgIC5zb3J0VmFsdWVzKG51bGwpXG4gICAgICAudmFsdWUoZCA9PiBNYXRoLm1heChkLnZhbHVlLCAwKSkoYXJjRGF0YSk7XG5cbiAgICBjb25zdCBhcmNzID0gcGllQXJjcy5tYXAocGllQXJjID0+XG4gICAgICBhcmM8RG9udXREYXRhPigpXG4gICAgICAgIC5pbm5lclJhZGl1cyhpbm5lcilcbiAgICAgICAgLm91dGVyUmFkaXVzKG91dGVyKVxuICAgICAgICAucGFkQW5nbGUoMC4wMTMpXG4gICAgICAgIC5zdGFydEFuZ2xlKHBpZUFyYy5zdGFydEFuZ2xlKVxuICAgICAgICAuZW5kQW5nbGUocGllQXJjLmVuZEFuZ2xlKShwaWVBcmMuZGF0YSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gaGFzTm9uWmVyb1ZhbHVlXG4gICAgICA/IHBpZUFyY3MubWFwKGFyYyA9PiB7XG4gICAgICAgICAgLy9Eb24ndCBzaG93IGRhdGEgbGFiZWxzIGZvciB6ZXJvLXdpZHRoIGRvbnV0IHNsaWNlcyAoaW5jbHVkZXMgbmVnYXRpdmUgdmFsdWVzKVxuICAgICAgICAgIGlmIChhcmMuc3RhcnRBbmdsZSA9PT0gYXJjLmVuZEFuZ2xlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgeVBvczogMCxcbiAgICAgICAgICAgICAgeFBvczogMCxcbiAgICAgICAgICAgICAgYW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFyY0NlbnRlckFuZ2xlID0gKGFyYy5zdGFydEFuZ2xlICsgYXJjLmVuZEFuZ2xlKSAvIDI7XG4gICAgICAgICAgY29uc3QgZWRnZVBvaW50ID0gYXJjVG9Qb2ludChhcmNDZW50ZXJBbmdsZSwgb3V0ZXIpO1xuICAgICAgICAgIGNvbnN0IGxpbmVFbmRQb2ludCA9IGFyY1RvUG9pbnQoXG4gICAgICAgICAgICBhcmNDZW50ZXJBbmdsZSxcbiAgICAgICAgICAgIG91dGVyICsgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBtaWRkbGVBcmVhID0gb3V0ZXIgLyA0O1xuICAgICAgICAgIGxldCB5T2Zmc2V0ID0gMDtcbiAgICAgICAgICBsZXQgeE9mZnNldCA9IDA7XG4gICAgICAgICAgaWYgKGxpbmVFbmRQb2ludC55ID4gMCkge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbmVFbmRQb2ludC55KSA8IG1pZGRsZUFyZWEpIHtcbiAgICAgICAgICAgICAgeU9mZnNldCA9IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgeU9mZnNldCA9IFNNQUxMX1BBRERJTkc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LngpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0ICs9IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LnkpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0ID0gU01BTExfUEFERElORyAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobGluZUVuZFBvaW50LngpIDwgbWlkZGxlQXJlYSkge1xuICAgICAgICAgICAgICB5T2Zmc2V0IC09IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0oYXJjLmRhdGEudmFsdWUsIGFyYy5kYXRhLmlzU2Vjb25kYXJ5KSxcbiAgICAgICAgICAgIHlQb3M6IGxpbmVFbmRQb2ludC55ICsgeU9mZnNldCxcbiAgICAgICAgICAgIHhQb3M6IGxpbmVFbmRQb2ludC54ICsgeE9mZnNldCxcbiAgICAgICAgICAgIGFuY2hvcjpcbiAgICAgICAgICAgICAgTWF0aC5hYnMobGluZUVuZFBvaW50LngpIDwgbWlkZGxlQXJlYVxuICAgICAgICAgICAgICAgID8gJ21pZGRsZSdcbiAgICAgICAgICAgICAgICA6IGxpbmVFbmRQb2ludC54IDwgMFxuICAgICAgICAgICAgICAgID8gJ2VuZCdcbiAgICAgICAgICAgICAgICA6ICdzdGFydCcsXG4gICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgIHgxOiBlZGdlUG9pbnQueCxcbiAgICAgICAgICAgICAgeTE6IGVkZ2VQb2ludC55LFxuICAgICAgICAgICAgICB4MjogbGluZUVuZFBvaW50LngsXG4gICAgICAgICAgICAgIHkyOiBsaW5lRW5kUG9pbnQueSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIDogW107XG5cbiAgICBjb25zdCBkcmF3V2lkdGggPVxuICAgICAgKG91dGVyICtcbiAgICAgICAgKGNvbmZpZy5zaG93RGF0YUxhYmVsc1xuICAgICAgICAgID8gZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQgKyBkYXRhTGFiZWxUZXh0U2l6aW5nLmhvcml6b250YWxcbiAgICAgICAgICA6IDApKSAqXG4gICAgICAyO1xuICAgIGNvbnN0IGRyYXdIZWlnaHQgPVxuICAgICAgKG91dGVyICtcbiAgICAgICAgKGNvbmZpZy5zaG93RGF0YUxhYmVsc1xuICAgICAgICAgID8gZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQgKyBkYXRhTGFiZWxUZXh0U2l6aW5nLnZlcnRpY2FsXG4gICAgICAgICAgOiAwKSkgKlxuICAgICAgMjtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBjZW50ZXJQb2ludFggPSBkaW1lbnNpb25zLndpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGNlbnRlclBvaW50WSA9IGRpbWVuc2lvbnMuaGVpZ2h0IC8gMjtcbiAgICAgIGNvbnN0IGRvbnV0UG9zaXRpb25YID0gcmVhbFBvc1ggLSBjZW50ZXJQb2ludFg7XG4gICAgICBjb25zdCBkb251dFBvc2l0aW9uWSA9IHJlYWxQb3NZIC0gY2VudGVyUG9pbnRZO1xuICAgICAgY29uc3QgaG92ZXJQb3NBcmNJbmZvID0gcG9pbnRUb0FyYyhkb251dFBvc2l0aW9uWCwgZG9udXRQb3NpdGlvblkpO1xuICAgICAgY29uc3QgYXJjQ2VudGVyTGluZSA9IChvdXRlciArIGlubmVyKSAvIDI7XG5cbiAgICAgIC8vRGV0ZWN0IGRvbnV0IHNsaWNlXG4gICAgICBsZXQgZm91bmRZSW5kZXggPSAtMTtcbiAgICAgIGxldCBwcmVmZXJyZWRQb3NpdGlvbjogQ2FsbG91dENvbXBvbmVudC5BbmNob3JlZFBvc2l0aW9uIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgbGV0IGRvbnV0WFBvc2l0aW9uID0gMDtcbiAgICAgIGxldCBkb251dFlQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpZUFyY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXJjID0gcGllQXJjc1tpXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgaG92ZXJQb3NBcmNJbmZvLmFuZ2xlID4gYXJjLnN0YXJ0QW5nbGUgJiZcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8uYW5nbGUgPCBhcmMuZW5kQW5nbGUgJiZcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8ucmFkaXVzID4gYXJjQ2VudGVyTGluZSAtIGRyYXdSYWRpdXMgJiZcbiAgICAgICAgICBob3ZlclBvc0FyY0luZm8ucmFkaXVzIDwgYXJjQ2VudGVyTGluZSArIGRyYXdSYWRpdXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm91bmRZSW5kZXggPSBpO1xuICAgICAgICAgIGNvbnN0IGFyY0NlbnRlclBvaW50ID0gYXJjVG9Qb2ludChcbiAgICAgICAgICAgIChhcmMuc3RhcnRBbmdsZSArIGFyYy5lbmRBbmdsZSkgLyAyLFxuICAgICAgICAgICAgYXJjQ2VudGVyTGluZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy9OZWVkIHRvIHVuLW9mZnNldCB0aGUgcG9zaXRpb25zXG4gICAgICAgICAgZG9udXRYUG9zaXRpb24gPSBhcmNDZW50ZXJQb2ludC54ICsgY2VudGVyUG9pbnRYO1xuICAgICAgICAgIGRvbnV0WVBvc2l0aW9uID0gYXJjQ2VudGVyUG9pbnQueSArIGNlbnRlclBvaW50WTtcbiAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEFyZWEgPVxuICAgICAgICAgICAgYXJjQ2VudGVyUG9pbnQueSA8IChkaW1lbnNpb25zLmhlaWdodCAqIC0xKSAvIDRcbiAgICAgICAgICAgICAgPyAndG9wJ1xuICAgICAgICAgICAgICA6IGFyY0NlbnRlclBvaW50LnkgPiBkaW1lbnNpb25zLmhlaWdodCAvIDRcbiAgICAgICAgICAgICAgPyAnYm90dG9tJ1xuICAgICAgICAgICAgICA6ICdjZW50ZXInO1xuXG4gICAgICAgICAgLy9EZXRlcm1pbmUgdGhlIGJlc3QgcG9zaXRpb24gZm9yIHRoZSB0b29sdGlwXG4gICAgICAgICAgaWYgKGFyY0NlbnRlclBvaW50LnggPiAwKSB7XG4gICAgICAgICAgICAvL1JpZ2h0IHBhdGhcbiAgICAgICAgICAgIGlmICghY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IHZlcnRpY2FsQXJlYSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAnY2VudGVyLXJpZ2h0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBcmVhID09PSAndG9wJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdyaWdodC10b3AnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFyZWEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ3JpZ2h0LWJvdHRvbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vTGVmdCBwYXRoXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCB2ZXJ0aWNhbEFyZWEgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ2NlbnRlci1sZWZ0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBcmVhID09PSAndG9wJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdsZWZ0LXRvcCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQXJlYSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAnbGVmdC1ib3R0b20nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kWUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghaGFzTm9uWmVyb1ZhbHVlKSB7XG4gICAgICAgIGRvbnV0WFBvc2l0aW9uID0gY2VudGVyUG9pbnRYICsgYXJjQ2VudGVyTGluZTtcbiAgICAgICAgZG9udXRZUG9zaXRpb24gPSBjZW50ZXJQb2ludFk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGRvbnV0WFBvc2l0aW9uIC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBkb251dFlQb3NpdGlvbiAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZIH0gPSBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgIFNNQUxMX1BBRERJTkcsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uLFxuICAgICAgICAgIGRhdGU6IG51bGwsXG4gICAgICAgICAgbWV0cmljczogZG9udXREYXRhXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IHBpcGVUcmFuc2Zvcm0oeS52YWx1ZSwgeS5pc1NlY29uZGFyeSwgdHJ1ZSksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09PSBmb3VuZFlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICAgIC8vTm90IHVzZWQgYnkgZG9udXQgY2hhcnRzXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHhJbmRleDogMCxcbiAgICAgICAgeXM6IFtdLFxuICAgICAgICB5SW5kZXg6IDAsXG4gICAgICAgIHZpc2libGVZSW5kZXg6IDAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBkcmF3V2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogZHJhd0hlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiB7XG4gICAgICAgIC4uLmVtcHR5Q2hhcnRTY2FsZVZhbHVlcyxcbiAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGRhdGFMYWJlbFRleHRTaXplOiBkYXRhTGFiZWxUZXh0U2l6aW5nLmhvcml6b250YWwsXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICB9LFxuICAgICAgeFRpY2tzOiBbXSxcbiAgICAgIHlUaWNrczogW10sXG4gICAgICBhcmVhczogW10sXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGJhcnM6IFtdLFxuICAgICAgY29sb3JzLFxuICAgICAgYXJjcyxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgICAgaG92ZXIsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsb3dzKFxuICAgIGNvbmZpZzogRmxvd0NvbmZpZyxcbiAgICBhbGxEYXRhOiBJbnB1dERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgaWYgKGFsbERhdGEudHlwZSAhPT0gJ2Zsb3cnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgSGVhZHMgdXAhIFRoZSAnJHthbGxEYXRhLnR5cGV9JyBkYXRhIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkIGZvciBmbG93IGNoYXJ0cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGZsb3dzVHJhbnNmb3JtKGNvbmZpZywgYWxsRGF0YSk7XG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBjb25zdCBvdmVyYWxsVG90YWwgPSBkYXRhLnhbMF0udG90YWxDb3VudDtcblxuICAgIGNvbnN0IGNoYXJ0U2l6aW5nVmFsdWVzID0gZ2V0RnVsbENoYXJ0U2NhbGVWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIG51bGwsXG4gICAgICBudWxsLFxuICAgICk7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnc2l6aW5nJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NhbGUgfSA9IGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIG51bGwsXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICApO1xuICAgIGNvbnN0IHZhbHVlUGlwZXMgPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCBwZXJjZW50UGlwZXMgPSBnZXRQaXBlcygncGVyY2VudGFnZScpO1xuXG4gICAgY29uc3QgYmFyczogRmxvd1JlY3RbXVtdID0gW107XG4gICAgY29uc3QgZmxvd0Nvbm5lY3Rpb25zOiBGbG93Q29ubmVjdGlvblJlbmRlcltdID0gW107XG4gICAgY29uc3QgZGF0YUxhYmVsczogRmxvd0RhdGFMYWJlbFtdID0gW107XG4gICAgY29uc3QgbWluaW11bVNpemUgPSBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJ1Y2tldEJhcnM6IEZsb3dSZWN0W10gPSBbXTtcbiAgICAgIGxldCBydW5uaW5nSGVpZ2h0ID0gMDtcbiAgICAgIGZvciAoY29uc3QgYmFyIG9mIGRhdGEueFtpXS5zdWJCdWNrZXRzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVpbmdDb3VudCA9IGJhci5jb25uZWN0aW9uc1xuICAgICAgICAgIC5maWx0ZXIoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnKVxuICAgICAgICAgIC5tYXAoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmNvdW50KVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRvdGFsU2l6ZTogdG90YWxIZWlnaHQsXG4gICAgICAgICAgY29udGludWluZ1NpemU6IGRhcmtlbmVkSGVpZ2h0LFxuICAgICAgICAgIGNvbm5lY3Rpb25TaXplcyxcbiAgICAgICAgfSA9IGdldEZsb3dTdWJCdWNrZXRTaXplcyhcbiAgICAgICAgICBiYXIsXG4gICAgICAgICAgdmFsdWUgPT4gc2NhbGUodmFsdWUsIGZhbHNlKSAtIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0LFxuICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uSGVpZ2h0ID0gKGNvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uKTogbnVtYmVyID0+XG4gICAgICAgICAgY29ubmVjdGlvblNpemVzW2Jhci5jb25uZWN0aW9ucy5pbmRleE9mKGNvbm5lY3Rpb24pXTtcbiAgICAgICAgY29uc3Qgbm9uRGFya2VuZWRIZWlnaHQgPSB0b3RhbEhlaWdodCAtIGRhcmtlbmVkSGVpZ2h0O1xuICAgICAgICBjb25zdCBkYXJrZW5lZFkgPSBydW5uaW5nSGVpZ2h0ICsgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXQ7XG4gICAgICAgIGNvbnN0IG5vbkRhcmtlbmVkWSA9IGRhcmtlbmVkWSArIGRhcmtlbmVkSGVpZ2h0O1xuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZTtcbiAgICAgICAgY29uc3QgeCA9XG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0ICtcbiAgICAgICAgICBpICogKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXApO1xuICAgICAgICBjb25zdCBjb2xvck92ZXJyaWRlID0gY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZy5maW5kKFxuICAgICAgICAgIGJjID0+IGJjLmJ1Y2tldElkID09PSBiYXIuaWQsXG4gICAgICAgICk/LmNvbG9yO1xuICAgICAgICBpZiAoZGFya2VuZWRIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgYnVja2V0QmFycy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICByZWN0VHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgaGVpZ2h0OiBkYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgeTogZGFya2VuZWRZLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIGNvbG9yT3ZlcnJpZGUsXG4gICAgICAgICAgICBkYXJrZW46IHRydWUsXG4gICAgICAgICAgICBkZUVtcGhhc2l6ZTogaXNEZUVtcGhhc2l6ZWQoY29uZmlnLCBiYXIuaWQsIHRydWUpLFxuICAgICAgICAgICAgaWQ6IGJhci5pZCxcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgICAgY291bnQ6IGNvbnRpbnVpbmdDb3VudCxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IGJhci5jb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9uRGFya2VuZWRIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgYnVja2V0QmFycy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgICByZWN0VHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgaGVpZ2h0OiBub25EYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgeTogbm9uRGFya2VuZWRZLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIGNvbG9yT3ZlcnJpZGUsXG4gICAgICAgICAgICBkYXJrZW46IGZhbHNlLFxuICAgICAgICAgICAgZGVFbXBoYXNpemU6IGlzRGVFbXBoYXNpemVkKGNvbmZpZywgYmFyLmlkLCBmYWxzZSksXG4gICAgICAgICAgICBpZDogYmFyLmlkLFxuICAgICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgICBjb3VudDogYmFyLmNvdW50IC0gY29udGludWluZ0NvdW50LFxuICAgICAgICAgICAgdG90YWxDb3VudDogYmFyLmNvdW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vSW52aXNpYmxlIGJhciBmb3IgaG92ZXIgaGlnaGxpZ2h0IHB1cnBvc2VzXG4gICAgICAgIGJ1Y2tldEJhcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICByZWN0VHlwZTogJ2Zsb3cnLFxuICAgICAgICAgIGhlaWdodDogZGFya2VuZWRIZWlnaHQgKyBub25EYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB5OiBkYXJrZW5lZFksXG4gICAgICAgICAgeCxcbiAgICAgICAgICBub25EaXNwbGF5OiB0cnVlLFxuICAgICAgICAgIGlkOiBiYXIuaWQsXG4gICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgY291bnQ6IGJhci5jb3VudCxcbiAgICAgICAgICB0b3RhbENvdW50OiBiYXIuY291bnQsXG4gICAgICAgICAgZGFya2VuOiBmYWxzZSxcbiAgICAgICAgICBkZUVtcGhhc2l6ZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBydW5uaW5nSGVpZ2h0ICs9XG4gICAgICAgICAgdG90YWxIZWlnaHQgK1xuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgK1xuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplO1xuXG4gICAgICAgIC8vQ29ubmVjdGlvbnNcbiAgICAgICAgLy9BZGQgbmV3IHJlbmRlcnMgZm9yIGZvcndhcmQgY29ubmVjdGlvbnNcbiAgICAgICAgbGV0IHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiBiYXIuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJyxcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNvbnN0IHRvcExpbmVZMSA9IGRhcmtlbmVkWSArIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldDtcbiAgICAgICAgICBjb25zdCBib3R0b21MaW5lWTEgPSB0b3BMaW5lWTEgKyBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgIGNvbnN0IHgxID0geCArIHdpZHRoO1xuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25SZW5kZXI6IEZsb3dDb25uZWN0aW9uUmVuZGVyID0ge1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgICAgIHN0YXJ0OiBjb25uZWN0aW9uLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBjb25uZWN0aW9uLmVuZCxcbiAgICAgICAgICAgIGNvdW50OiBjb25uZWN0aW9uLmNvdW50LFxuICAgICAgICAgICAgc3RlcDogaSxcbiAgICAgICAgICAgIHRvcExpbmU6IHtcbiAgICAgICAgICAgICAgeTE6IHRvcExpbmVZMSxcbiAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgIC8vVG8gYmUgZmlsbGVkIGluIGxhdGVyXG4gICAgICAgICAgICAgIHkyOiAwLFxuICAgICAgICAgICAgICB4MjogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib3R0b21MaW5lOiB7XG4gICAgICAgICAgICAgIHkxOiBib3R0b21MaW5lWTEsXG4gICAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgICAvL1RvIGJlIGZpbGxlZCBpbiBsYXRlclxuICAgICAgICAgICAgICB5MjogMCxcbiAgICAgICAgICAgICAgeDI6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy9UbyBiZSBmaWxsZWQgaW4gbGF0ZXJcbiAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0ICs9IGNvbm5lY3Rpb25IZWlnaHQoY29ubmVjdGlvbik7XG4gICAgICAgICAgZmxvd0Nvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvblJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9CYWNrZmlsbCBwb3NpdGlvbiBpbmZvIGZvciBiYWNrd2FyZHMgY29ubmVjdGlvbnNcbiAgICAgICAgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGJhci5jb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyxcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ29ubmVjdGlvbiA9IGZsb3dDb25uZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgY29uID0+XG4gICAgICAgICAgICAgIGNvbi5zdGFydCA9PT0gY29ubmVjdGlvbi5zdGFydCAmJlxuICAgICAgICAgICAgICBjb24uZW5kID09PSBjb25uZWN0aW9uLmVuZCAmJlxuICAgICAgICAgICAgICBjb24uc3RlcCA9PT0gaSAtIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BMaW5lWTIgPSBkYXJrZW5lZFkgKyB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQ7XG4gICAgICAgICAgICBjb25zdCBib3R0b21MaW5lWTIgPSB0b3BMaW5lWTIgKyBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgbWF0Y2hpbmdDb25uZWN0aW9uLnRvcExpbmUueTIgPSB0b3BMaW5lWTI7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24udG9wTGluZS54MiA9IHg7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24uYm90dG9tTGluZS55MiA9IGJvdHRvbUxpbmVZMjtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi5ib3R0b21MaW5lLngyID0geDtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi5wYXRoID1cbiAgICAgICAgICAgICAgY2FsY3VsYXRlRmxvd0Nvbm5lY3Rpb25QYXRoKG1hdGNoaW5nQ29ubmVjdGlvbik7XG5cbiAgICAgICAgICAgIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldCArPSBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vRGF0YSBMYWJlbHNcbiAgICAgICAgY29uc3QgYmFyTmFtZSA9IGNvbmZpZy5mbG93Q29uZmlnLnN1YkJ1Y2tldHNDb25maWcuZmluZChcbiAgICAgICAgICBzYmMgPT4gc2JjLmJ1Y2tldElkID09PSBiYXIuaWQsXG4gICAgICAgICk/LmJ1Y2tldE5hbWU7XG4gICAgICAgIGlmIChiYXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkYXRhTGFiZWxzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgZGF0YUxhYmVsVHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgbGFiZWw6IGAke2Jhck5hbWV9ICgke3BlcmNlbnRQaXBlcy5waXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgYmFyLmNvdW50IC8gZGF0YS54W2ldLnRvdGFsQ291bnQsXG4gICAgICAgICAgICApfSlgLFxuICAgICAgICAgICAgeFBvczogeCxcbiAgICAgICAgICAgIHlQb3M6XG4gICAgICAgICAgICAgIGRhcmtlbmVkWSAtXG4gICAgICAgICAgICAgIChjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSArXG4gICAgICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZykgL1xuICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICBhbmNob3I6ICdzdGFydCcsXG4gICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgYnVja2V0SW5kZXg6IGksXG4gICAgICAgICAgICBiYXJJZDogYmFyLmlkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhclN1YnRpdGxlID0gY29uZmlnLmZsb3dDb25maWcuc3VidGl0bGVGb3JtYXRTdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgdmFsdWVQaXBlcy5waXBlLnRyYW5zZm9ybShiYXIuY291bnQpLFxuICAgICAgICApO1xuICAgICAgICBkYXRhTGFiZWxzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICBkYXRhTGFiZWxUeXBlOiAnZmxvdycsXG4gICAgICAgICAgbGFiZWw6IGJhclN1YnRpdGxlLFxuICAgICAgICAgIHhQb3M6IHgsXG4gICAgICAgICAgeVBvczogZGFya2VuZWRZIC0gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyAvIDQsXG4gICAgICAgICAgYW5jaG9yOiAnc3RhcnQnLFxuICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgIGJhcklkOiBiYXIuaWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYmFycy5wdXNoKGJ1Y2tldEJhcnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczoge1xuICAgICAgcmVjdDogRE9NUmVjdDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFg6IG51bWJlcjtcbiAgICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgICB9KTogSG92ZXJSZXR1cm4ge1xuICAgICAgY29uc3QgcmVhbFBvc1ggPSBwb3MueCArIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgcmVhbFBvc1kgPSBwb3MueSArIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCB8fFxuICAgICAgICBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgICAgICAgcG9zLngsXG4gICAgICAgICAgcG9zLnksXG4gICAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgICAgcmVhbFBvc1ksXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidWNrZXRJbmRleEluZm8gPSBnZXRGbG93QnVja2V0SW5kZXhGb3JIb3ZlcihcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIHJlYWxQb3NYLFxuICAgICAgKTtcbiAgICAgIGlmIChidWNrZXRJbmRleEluZm8gPT09IG51bGwgfHwgYnVja2V0SW5kZXhJbmZvLmluZGV4ID49IGJhcnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGJ1Y2tldEluZGV4SW5mby5hcmVhID09PSAnYmFyJykge1xuICAgICAgICBmb3IgKGNvbnN0IGJhciBvZiBiYXJzW2J1Y2tldEluZGV4SW5mby5pbmRleF0pIHtcbiAgICAgICAgICBpZiAocmVhbFBvc1kgPCBiYXIueSkge1xuICAgICAgICAgICAgLy9CYXIgdGl0bGVcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGJhci54IC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJhci53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9XG4gICAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgLyAyICtcbiAgICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemU7XG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBiYXIueSAtIChwb3MuY29udGFpbmVyU2Nyb2xsWSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3ZlclR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgICAgaG92ZXJUYXJnZXQ6ICdiYXJUaXRsZScsXG4gICAgICAgICAgICAgIGJhcklkOiBiYXIuaWQgPz8gJycsXG4gICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBidWNrZXRJbmRleEluZm8uaW5kZXgsXG4gICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IGNvbmZpZy5mbG93Q29uZmlnLnN1YnRpdGxlRm9ybWF0U3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVBpcGVzLnBpcGUudHJhbnNmb3JtKGJhci50b3RhbENvdW50KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgLy8gVGhlIGludmlzaWJsZSBoaWdobGlnaHQgYmFyIHNwYW5zIGJvdGggcG9ydGlvbnMsIHNvIHNraXAgaXQgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIG1pc3JlcG9ydGluZyBhIHBvcnRpb24gYm91bmRhcnkgYXMgdGhlIGVuZGluZyBwb3J0aW9uXG4gICAgICAgICAgICAhYmFyLm5vbkRpc3BsYXkgJiZcbiAgICAgICAgICAgIHJlYWxQb3NZID49IGJhci55ICYmXG4gICAgICAgICAgICByZWFsUG9zWSA8IGJhci55ICsgYmFyLmhlaWdodFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy9CYXJcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGJhci54IC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJhci53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGJhci55IC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBiYXIuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZLCBhbmNob3JXaWR0aCwgYW5jaG9ySGVpZ2h0IH0gPVxuICAgICAgICAgICAgICBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgICAgICAgIGFuY2hvcldpZHRoLFxuICAgICAgICAgICAgICBhbmNob3JIZWlnaHQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG92ZXJUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICAgIGhvdmVyVGFyZ2V0OiAnYmFyJyxcbiAgICAgICAgICAgICAgYmFySWQ6IGJhci5pZCA/PyAnJyxcbiAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IGJ1Y2tldEluZGV4SW5mby5pbmRleCxcbiAgICAgICAgICAgICAgZm9yRGFya2VuOiBiYXIuZGFya2VuID09PSB0cnVlLFxuICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBjb25maWcuZmxvd0NvbmZpZy5zdWJ0aXRsZUZvcm1hdFN0cmluZy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgJ3t2YWx1ZX0nLFxuICAgICAgICAgICAgICAgICAgdmFsdWVQaXBlcy5waXBlLnRyYW5zZm9ybShiYXIuY291bnQpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGZsb3dDb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgZmxvd0NvbiA9PiBmbG93Q29uLnN0ZXAgPT09IGJ1Y2tldEluZGV4SW5mby5pbmRleCxcbiAgICAgICAgKSkge1xuICAgICAgICAgIGlmIChjaGVja0lmUG9pbnRXaXRoaW5Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlYWxQb3NYLCByZWFsUG9zWSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGNvbm5lY3Rpb24udG9wTGluZS54MSAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb25uZWN0aW9uLnRvcExpbmUueDIgLSBjb25uZWN0aW9uLnRvcExpbmUueDE7XG4gICAgICAgICAgICBjb25zdCBjdXJ2ZVRvcCA9IGJlemllcllBdFgoXG4gICAgICAgICAgICAgIChjb25uZWN0aW9uLnRvcExpbmUueDEgKyBjb25uZWN0aW9uLnRvcExpbmUueDIpIC8gMixcbiAgICAgICAgICAgICAgY29ubmVjdGlvbi50b3BMaW5lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnZlQm90dG9tID0gYmV6aWVyWUF0WChcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb24udG9wTGluZS54MSArIGNvbm5lY3Rpb24udG9wTGluZS54MikgLyAyLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uLmJvdHRvbUxpbmUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0gY3VydmVUb3AgLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGN1cnZlQm90dG9tIC0gY3VydmVUb3A7XG4gICAgICAgICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3ZlclR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgICAgaG92ZXJUYXJnZXQ6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgICAgICAgc3RhcnRJZDogY29ubmVjdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgZW5kSWQ6IGNvbm5lY3Rpb24uZW5kLFxuICAgICAgICAgICAgICBzdGFydEJ1Y2tldEluZGV4OiBjb25uZWN0aW9uLnN0ZXAsXG4gICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IGNvbmZpZy5mbG93Q29uZmlnLnN1YnRpdGxlRm9ybWF0U3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAne3ZhbHVlfScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVBpcGVzLnBpcGUudHJhbnNmb3JtKGNvbm5lY3Rpb24uY291bnQpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgeFRpY2tzOiBbXSxcbiAgICAgIHlUaWNrczogW10sXG4gICAgICBjb2xvcnM6IFtdLFxuICAgICAgYmFycyxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgaG92ZXIsXG4gICAgICBhcmNzOiBbXSxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICB3YXRlcmZhbGxMaW5lczogW10sXG4gICAgICBncmFkaWVudHM6IFtdLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICBNaXJyb3JzIHRoZSBidWNrZXRpbmcgaW4gZmxvd3NUcmFuc2Zvcm06IGEgcGF0aCBjb250cmlidXRlcyB2YWx1ZXNbaV0gdG9cbiAgICB0aGUgYmFyIGF0IHN0ZXAgaSwgYW5kIHZhbHVlc1tpICsgMV0gdG8gaXRzIGZvcndhcmQgY29ubmVjdGlvbiAod2hpY2ggaXNcbiAgICBhbHNvIHRoZSBiYXIncyBjb250aW51aW5nIHBvcnRpb24pLlxuICAqL1xuICBmdW5jdGlvbiBmbG93VmFsdWVBdFN0ZXAoeTogRmxvd1ksIHN0ZXA6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB5LnN0ZXBzLmxlbmd0aCA+IHN0ZXAgJiYgeS52YWx1ZXMubGVuZ3RoID4gc3RlcFxuICAgICAgPyB5LnZhbHVlc1tzdGVwXVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc3VtRmxvd1ZhbHVlcyhcbiAgICBkYXRhOiBGbG93RGF0YSxcbiAgICB5SW5kaWNlczogbnVtYmVyW10sXG4gICAgc3RlcDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiB5SW5kaWNlc1xuICAgICAgLm1hcChpbmRleCA9PiBmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApID8/IDApXG4gICAgICAucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9GbG93Q2xpY2tFdmVudChcbiAgICBob3ZlcjogRmxvd0hvdmVyVGFyZ2V0LFxuICAgIGRhdGE6IEZsb3dEYXRhLFxuICApOiBGbG93Q2xpY2tFdmVudCB7XG4gICAgY29uc3QgYWxsWUluZGljZXMgPSBkYXRhLnlzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgICBpZiAoaG92ZXIuaG92ZXJUYXJnZXQgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgY29uc3Qgc3RlcCA9IGhvdmVyLnN0YXJ0QnVja2V0SW5kZXg7XG4gICAgICBjb25zdCB5SW5kaWNlcyA9IGFsbFlJbmRpY2VzLmZpbHRlcihcbiAgICAgICAgaW5kZXggPT5cbiAgICAgICAgICBkYXRhLnlzW2luZGV4XS5zdGVwc1tzdGVwXSA9PT0gaG92ZXIuc3RhcnRJZCAmJlxuICAgICAgICAgIGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCkgIT09IG51bGwgJiZcbiAgICAgICAgICBkYXRhLnlzW2luZGV4XS5zdGVwc1tzdGVwICsgMV0gPT09IGhvdmVyLmVuZElkICYmXG4gICAgICAgICAgZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwICsgMSkgIT09IG51bGwsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFyZ2V0OiAnY29ubmVjdGlvbicsXG4gICAgICAgIHN0YXJ0QnVja2V0SW5kZXg6IHN0ZXAsXG4gICAgICAgIHN0YXJ0SWQ6IGhvdmVyLnN0YXJ0SWQsXG4gICAgICAgIGVuZElkOiBob3Zlci5lbmRJZCxcbiAgICAgICAgY291bnQ6IHN1bUZsb3dWYWx1ZXMoZGF0YSwgeUluZGljZXMsIHN0ZXAgKyAxKSxcbiAgICAgICAgeUluZGljZXMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXAgPSBob3Zlci5idWNrZXRJbmRleDtcbiAgICBjb25zdCBiYXJZSW5kaWNlcyA9IGFsbFlJbmRpY2VzLmZpbHRlcihcbiAgICAgIGluZGV4ID0+XG4gICAgICAgIGRhdGEueXNbaW5kZXhdLnN0ZXBzW3N0ZXBdID09PSBob3Zlci5iYXJJZCAmJlxuICAgICAgICBmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApICE9PSBudWxsLFxuICAgICk7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHN1bUZsb3dWYWx1ZXMoZGF0YSwgYmFyWUluZGljZXMsIHN0ZXApO1xuICAgIGNvbnN0IGJhc2UgPSB7IGJ1Y2tldEluZGV4OiBzdGVwLCBiYXJJZDogaG92ZXIuYmFySWQgfTtcbiAgICBpZiAoaG92ZXIuaG92ZXJUYXJnZXQgPT09ICdiYXJUaXRsZScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHRhcmdldDogJ3RpdGxlJyxcbiAgICAgICAgY291bnQ6IHRvdGFsQ291bnQsXG4gICAgICAgIHlJbmRpY2VzOiBiYXJZSW5kaWNlcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludWluZ0NvdW50ID0gc3VtRmxvd1ZhbHVlcyhkYXRhLCBiYXJZSW5kaWNlcywgc3RlcCArIDEpO1xuICAgIGlmIChob3Zlci5mb3JEYXJrZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHRhcmdldDogJ2NvbnRpbnVpbmcnLFxuICAgICAgICBjb3VudDogY29udGludWluZ0NvdW50LFxuICAgICAgICB0b3RhbENvdW50LFxuICAgICAgICB5SW5kaWNlczogYmFyWUluZGljZXMuZmlsdGVyKFxuICAgICAgICAgIGluZGV4ID0+IChmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXAgKyAxKSA/PyAwKSA+IDAsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHRhcmdldDogJ2VuZGluZycsXG4gICAgICBjb3VudDogdG90YWxDb3VudCAtIGNvbnRpbnVpbmdDb3VudCxcbiAgICAgIHRvdGFsQ291bnQsXG4gICAgICB5SW5kaWNlczogYmFyWUluZGljZXMuZmlsdGVyKFxuICAgICAgICBpbmRleCA9PlxuICAgICAgICAgIChmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApID8/IDApID5cbiAgICAgICAgICAoZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwICsgMSkgPz8gMCksXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBTTUFMTF9QQURESU5HID0gODtcbiAgZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9TSVpFID0gMTI7IC8vdGhlIHdpZHRoIGNvbnN0YW50cyBhcmUgYmFzZWQgb24gZm9udCBzaXplIDEyLCBzbyB0aGlzIHZhcmlhYmxlIGNhbiBoZWxwIHcvIHNjYWxpbmdcbiAgZXhwb3J0IGNvbnN0IFdJRFRIX1BFUl9MRVRURVIgPSA2LjU7XG4gIGNvbnN0IFdJRFRIX1BFUl9OVU1CRVIgPSA3O1xuICBjb25zdCBXSURUSF9QRVJfUEVSSU9EID0gMjtcbiAgY29uc3QgV0lEVEhfUEVSX1NMQVNIID0gNDtcbiAgLy9XaGVuIHRoZSBkYXRhIGF4aXMgZ3Jvd3MsIHRoZSBkYXRhIGlzIGFsd2F5cyBnaXZlbiBhdCBsZWFzdCB0aGlzIHBvcnRpb24gb2YgdGhlIHByb3ZpZGVkIHNpemVcbiAgY29uc3QgR1JPV05fREFUQV9NSU5JTVVNX1JBVElPID0gMC41O1xuICBjb25zdCBERUZBVUxUX0hPUklaT05UQUxfQkFSX0NPUk5FUl9SQURJVVMgPSA0O1xuICBjb25zdCBGTE9XX0NPTk5FQ1RJT05fQ1VSVkVfQ09OU1RBTlQgPSAwLjU7XG5cbiAgZnVuY3Rpb24gZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhcbiAgICBvcmlnaW5hbERhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICApIHtcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gKGRhdGU6IERhdGUpID0+XG4gICAgICBmb3JtYXRlZERhdGUoY29uZmlnLmRhdGVGb3JtYXQgfHwgJ2RheScsIGRhdGUpO1xuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHsgcGlwZTogc2Vjb25kYXJ5UGlwZSwgZnVsbFBpcGU6IHNlY29uZGFyeUZ1bGxQaXBlIH0gPVxuICAgICAgY29uZmlnLnNlY29uZGFyeVZhbHVlVHlwZVxuICAgICAgICA/IGdldFBpcGVzKGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGUpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgcGlwZSxcbiAgICAgICAgICAgIGZ1bGxQaXBlLFxuICAgICAgICAgIH07XG4gICAgY29uc3QgcGlwZVRyYW5zZm9ybSA9IChcbiAgICAgIHZhbHVlOiBudW1iZXIsXG4gICAgICBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICAgIGlzRnVsbD86IGJvb2xlYW4sXG4gICAgKTogc3RyaW5nID0+IHtcbiAgICAgIGlmIChpc0Z1bGwgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKGlzU2Vjb25kYXJ5ID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNlY29uZGFyeVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgfVxuICAgICAgbGV0IHJldFZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoaXNTZWNvbmRhcnkpIHtcbiAgICAgICAgcmV0VmFsID0gc2Vjb25kYXJ5RnVsbFBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldFZhbCA9IGZ1bGxQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0VmFsICE9PSBudWxsID8gcmV0VmFsIDogJy0nO1xuICAgIH07XG5cbiAgICAvLyBQcmUtY2FsY3VsYXRlIGNvbG9yIGluZGljZXMgZm9yIGFsbCBpdGVtcyAodXNlIG9yaWdpbmFsIGRhdGEgZm9yIHN0YWJsZSBjb2xvcnMpXG4gICAgY29uc3QgY29sb3JJbmRpY2VzID0gY2FsY3VsYXRlQ29sb3JJbmRpY2VzKG9yaWdpbmFsRGF0YSk7XG4gICAgY29uc3QgY29sb3JzID0gZGF0YS55cy5tYXAoeSA9PiBnZXRDb2xvcih5LCBjb2xvckluZGljZXMsIGNvbmZpZy5jb2xvcnMpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbG9ySW5kaWNlcyxcbiAgICAgIGNvbG9ycyxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbG9ySW5kaWNlcyhcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgKTogTWFwPERhdGFZIHwgU3VwcGxlbWVudGFyeURhdGFZLCBudW1iZXI+IHtcbiAgICBjb25zdCBjb2xvck1hcCA9IG5ldyBNYXA8RGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVksIG51bWJlcj4oKTtcblxuICAgIC8vIE9yaWdpbmFsIFlzOiB1c2UgdGhlaXIgYXJyYXkgaW5kZXggZGlyZWN0bHlcbiAgICBkYXRhLnlzLmZvckVhY2goKHksIGluZGV4KSA9PiB7XG4gICAgICBjb2xvck1hcC5zZXQoeSwgaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgLy8gU3VwcGxlbWVudGFyeSBZczogZ3JvdXAgYnkgc3VwcGxlbWVudGFsSW5kZXgsIHVzZSBwb3NpdGlvbiB3aXRoaW4gdGhhdCBncm91cFxuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSkge1xuICAgICAgY29uc3Qgc3VwcEdyb3VwcyA9IG5ldyBNYXA8bnVtYmVyLCBTdXBwbGVtZW50YXJ5RGF0YVlbXT4oKTtcblxuICAgICAgZGF0YS5zdXBwbGVtZW50YXJ5WXMuZm9yRWFjaChzdXBwWSA9PiB7XG4gICAgICAgIGlmICghc3VwcEdyb3Vwcy5oYXMoc3VwcFkuc3VwcGxlbWVudGFsSW5kZXgpKSB7XG4gICAgICAgICAgc3VwcEdyb3Vwcy5zZXQoc3VwcFkuc3VwcGxlbWVudGFsSW5kZXgsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBwR3JvdXBzLmdldChzdXBwWS5zdXBwbGVtZW50YWxJbmRleCkhLnB1c2goc3VwcFkpO1xuICAgICAgfSk7XG5cbiAgICAgIHN1cHBHcm91cHMuZm9yRWFjaChpdGVtcyA9PiB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIHBvc2l0aW9uSW5Hcm91cCkgPT4ge1xuICAgICAgICAgIGNvbG9yTWFwLnNldChpdGVtLCBwb3NpdGlvbkluR3JvdXApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb2xvck1hcDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcihcbiAgICBpdGVtOiBEYXRhWSB8IFN1cHBsZW1lbnRhcnlEYXRhWSB8IHVuZGVmaW5lZCxcbiAgICBjb2xvckluZGljZXM6IE1hcDxEYXRhWSB8IFN1cHBsZW1lbnRhcnlEYXRhWSwgbnVtYmVyPixcbiAgICBjb2xvcnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICApOiBzdHJpbmcge1xuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2xvcnNbMF07XG4gICAgfVxuICAgIGlmIChpdGVtLmNvbG9yVG9rZW4pIHJldHVybiBpdGVtLmNvbG9yVG9rZW47XG4gICAgY29uc3QgY29sb3JJbmRleCA9IGNvbG9ySW5kaWNlcy5nZXQoaXRlbSkgPz8gMDtcbiAgICByZXR1cm4gY29sb3JzW2NvbG9ySW5kZXggJSBjb2xvcnMubGVuZ3RoXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJ1Y2tldFRpY2tDb3VudChjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMpOiBudW1iZXIge1xuICAgIGxldCBhdmFpbGFibGVTaXplID0gMDtcbiAgICBsZXQgbWluU3BhY2luZyA9IDE7XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgYXZhaWxhYmxlU2l6ZSA9XG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGggLVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5sZWZ0UGFkZGluZyAtXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnJpZ2h0UGFkZGluZztcbiAgICAgIG1pblNwYWNpbmcgPVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQXhpc0xhYmVsVGV4dFNpemUgKyBTTUFMTF9QQURESU5HO1xuICAgIH1cbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIGF2YWlsYWJsZVNpemUgPVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCAtXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvcFBhZGRpbmcgLVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5ib3R0b21QYWRkaW5nO1xuICAgICAgbWluU3BhY2luZyA9IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQXhpc0xhYmVsVGV4dFNpemUgKyBTTUFMTF9QQURESU5HO1xuICAgIH1cbiAgICBtaW5TcGFjaW5nID0gbWluU3BhY2luZyAqIChjaGFydFNpemluZ1ZhbHVlcy5mb250U2l6ZSAvIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMiwgTWF0aC5mbG9vcihhdmFpbGFibGVTaXplIC8gbWluU3BhY2luZykpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICk6IHtcbiAgICBub3JtQ291bnQ6IG51bWJlcjtcbiAgICBzdXBwQ291bnQ6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIG5vcm1DbHVzdGVySW5kaWNlczogbnVtYmVyW107XG4gICAgc3VwcENsdXN0ZXJJbmRpY2VzOiBudW1iZXJbXTtcbiAgfSB7XG4gICAgLy8gU2xvdCBsYXlvdXQgaXMgdGhlIHNhbWUgZm9yIGV2ZXJ5IGJ1Y2tldCDigJQgemVybyB2YWx1ZXMgc3RpbGwgb2NjdXB5XG4gICAgLy8gdGhlaXIgc2xvdCwgdGhleSBqdXN0IHJlbmRlciB3aXRoIG5vIGhlaWdodC93aWR0aC4gVGhpcyBrZWVwcyBidWNrZXRcbiAgICAvLyBzaXplcywgYmFyIHBvc2l0aW9ucywgYW5kIGhvdmVyIGRldGVjdGlvbiBjb25zaXN0ZW50IGFjcm9zcyBidWNrZXRzXG4gICAgLy8gcmVnYXJkbGVzcyBvZiB3aGljaCBzZXJpZXMgaGFwcGVuIHRvIGJlIHplcm8uXG4gICAgY29uc3Qgbm9ybUNsdXN0ZXJJbmRpY2VzID0gZGF0YS55cy5tYXAoKF8sIHlJbmRleCkgPT4geUluZGV4KTtcbiAgICBjb25zdCBub3JtQ2x1c3RlckNvdW50ID0gbm9ybUNsdXN0ZXJJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBzdXBwQ2x1c3RlckluZGljZXMgPSB1bmlxKFxuICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSlcbiAgICAgICAgPyBkYXRhLnN1cHBsZW1lbnRhcnlZcy5tYXAoeSA9PiB5LnN1cHBsZW1lbnRhbEluZGV4KVxuICAgICAgICA6IFtdLFxuICAgICk7XG4gICAgc3VwcENsdXN0ZXJJbmRpY2VzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgIGNvbnN0IHN1cHBDbHVzdGVyQ291bnQgPSBzdXBwQ2x1c3RlckluZGljZXMubGVuZ3RoO1xuICAgIGNvbnN0IGFjdHVhbE5vcm1DbHVzdGVyQ291bnQgPSBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSlcbiAgICAgID8gbm9ybUNsdXN0ZXJDb3VudFxuICAgICAgOiBNYXRoLm1pbihub3JtQ2x1c3RlckNvdW50LCAxKTtcblxuICAgIHJldHVybiB7XG4gICAgICBub3JtQ291bnQ6IGFjdHVhbE5vcm1DbHVzdGVyQ291bnQsXG4gICAgICBzdXBwQ291bnQ6IHN1cHBDbHVzdGVyQ291bnQsXG4gICAgICB0b3RhbDogYWN0dWFsTm9ybUNsdXN0ZXJDb3VudCArIHN1cHBDbHVzdGVyQ291bnQsXG4gICAgICBub3JtQ2x1c3RlckluZGljZXMsXG4gICAgICBzdXBwQ2x1c3RlckluZGljZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8vVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgdG90YWwgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIGJ1Y2tldCwgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBidWNrZXRcbiAgZnVuY3Rpb24gZ2V0QnVja2V0U2l6ZShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgdG90YWxCYXJOdW1iZXIgPSBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChkYXRhLCBjb25maWcpO1xuICAgIGNvbnN0IGJ1Y2tldFNpemUgPVxuICAgICAgdG90YWxCYXJOdW1iZXIudG90YWwgKiBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICtcbiAgICAgICh0b3RhbEJhck51bWJlci50b3RhbCAtIDEpICogY2hhcnRTaXppbmdWYWx1ZXMuYmFyQ2x1c3RlckdhcDtcblxuICAgIHJldHVybiBidWNrZXRTaXplO1xuICB9XG5cbiAgLy9UaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSB0b3RhbCBkaXN0YW5jZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gYnVja2V0LCB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgYnVja2V0XG4gIGZ1bmN0aW9uIGdldFRvdGFsQnVja2V0R2FwKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBidWNrZXRTaXplID0gZ2V0QnVja2V0U2l6ZShkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgICByZXR1cm4gYnVja2V0U2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcDtcbiAgfVxuXG4gIC8vVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgdG90YWwgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGJ1Y2tldCwgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBidWNrZXRcbiAgZnVuY3Rpb24gZ2V0VG90YWxQcmVCdWNrZXRHYXAoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgbGV0IGN1bXVsYXRpdmVCdWNrZXRHYXAgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0SW5kZXg7IGkrKykge1xuICAgICAgY3VtdWxhdGl2ZUJ1Y2tldEdhcCArPSBnZXRUb3RhbEJ1Y2tldEdhcChkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1bXVsYXRpdmVCdWNrZXRHYXA7XG4gIH1cblxuICBmdW5jdGlvbiBnZW5lcmF0ZVRpbWVzZXJpZXNUaWNrcyhcbiAgICBkYXRhOiBUaW1lc2VyaWVzRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICB0aWNrQ291bnQ6IG51bWJlcixcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgZm9ybWF0OiAoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nLFxuICApOiBHZW5lcmljVGlja1tdIHtcbiAgICBjb25zdCBnZXRMYWJlbCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gZm9ybWF0KG5ldyBEYXRlKGRhdGEueFtpbmRleF0pKTtcbiAgICB9O1xuICAgIHJldHVybiBnZXRUaWNrcyhkYXRhLCBnZXRMYWJlbCwgY29uZmlnLCB0aWNrQ291bnQsIGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlTGFiZWxsZWRUaWNrcyhcbiAgICBkYXRhOiBMYWJlbGVkRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICB0aWNrQ291bnQ6IG51bWJlcixcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICk6IEdlbmVyaWNUaWNrW10ge1xuICAgIGNvbnN0IGdldExhYmVsID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHJldHVybiBkYXRhLnhbaW5kZXhdLmxhYmVsO1xuICAgIH07XG4gICAgcmV0dXJuIGdldFRpY2tzKGRhdGEsIGdldExhYmVsLCBjb25maWcsIHRpY2tDb3VudCwgY2hhcnRTaXppbmdWYWx1ZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGlja3MoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgZ2V0TGFiZWw6IChpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgdGlja0NvdW50OiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiBHZW5lcmljVGlja1tdIHtcbiAgICBpZiAoZGF0YS54Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoZGF0YS54Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgbGFiZWxPZmZzZXQgPSBnZXRUaWNrTGFiZWxPZmZzZXQoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIFt7IHZhbHVlOiBsYWJlbE9mZnNldCwgbGFiZWw6IGdldExhYmVsKDApIH1dO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RJbmRleCA9IGRhdGEueC5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHRpY2tCdWNrZXRTcGFjaW5nID0gTWF0aC5jZWlsKGxhc3RJbmRleCAvIHRpY2tDb3VudCk7XG4gICAgY29uc3QgbnVtVGlja3MgPSBNYXRoLmZsb29yKGxhc3RJbmRleCAvIHRpY2tCdWNrZXRTcGFjaW5nKSArIDE7XG4gICAgY29uc3Qgc3RlcCA9IGxhc3RJbmRleCAvIChudW1UaWNrcyAtIDEpO1xuXG4gICAgLy8gQWx3YXlzIGluY2x1ZGUgZmlyc3QgYW5kIGxhc3QgZGF0YSBwb2ludHMuXG4gICAgLy8gSW5uZXIgdGlja3MgYXJlIGFwcHJveGltYXRlbHkgZXZlbmx5IHNwYWNlZCB1c2luZyByb3VuZGluZy5cbiAgICBjb25zdCBpbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVGlja3M7IGkrKykge1xuICAgICAgaW5kaWNlcy5wdXNoKE1hdGgucm91bmQoaSAqIHN0ZXApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaWNlcy5tYXAoaSA9PiB7XG4gICAgICBjb25zdCBsYWJlbE9mZnNldCA9IGdldFRpY2tMYWJlbE9mZnNldChcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgaSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBnZXRUb3RhbFByZUJ1Y2tldEdhcChkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzLCBpKSArXG4gICAgICAgICAgbGFiZWxPZmZzZXQsXG4gICAgICAgIGxhYmVsOiBnZXRMYWJlbChpKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUaWNrTGFiZWxPZmZzZXQoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGluaGVyZW50T2Zmc2V0ID1cbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXRcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXQ7XG4gICAgLy9UbyBoYXZlIHRoZSBsYWJlbCBiZSBjZW50ZXJlZCBvbiB0aGUgYnVja2V0J3MgY2VudGVyIHBvc2l0aW9uXG4gICAgY29uc3QgYnVja2V0T2Zmc2V0ID0gZ2V0QnVja2V0U2l6ZShkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzKSAvIDI7XG4gICAgbGV0IGhvcml6b250YWxCYXJPZmZzZXQgPSAwO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgLy9UaGlzIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIGluaGVyZW50T2Zmc2V0IGFuZCBidWNrZXRPZmZzZXQgcmVzdWx0IGluIG1hdGNoaW5nIHkgdmFsdWVzIGZvciB0aGUgYmFyIGFuZCB0aGUgbGFiZWxcbiAgICAgIC8vICBIb3dldmVyLCBmb3IgdGhlIGJhciwgdGhhdCB5IHBvc2l0aW9uIGlzIHRoZSB0b3Agb2YgdGhlIGJhciwgd2hpbGUgZm9yIHRoZSBsYWJlbCwgaXQncyB0aGUgYm90dG9tIG9mIHRoZSBsYWJlbFxuICAgICAgLy8gIFdoZW4gZXhhY3RseSBsaW5lZCB1cCBsaWtlIHRoYXQsIHRoZSBsYWJlbCBhY3R1YWxseSBsb29rcyBhIGxpdHRsZSBsb3csIHNvIHRoYXQgLTIgbWFrZXMgaXQgbG9vayBjb3JyZWN0XG4gICAgICBob3Jpem9udGFsQmFyT2Zmc2V0ID0gY2hhcnRTaXppbmdWYWx1ZXMuZm9udFNpemUgLyAyIC0gMjtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5oZXJlbnRPZmZzZXQgKyBidWNrZXRPZmZzZXQgKyBob3Jpem9udGFsQmFyT2Zmc2V0O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgSW5wdXREYXRhID0gTGFiZWxlZERhdGEgfCBUaW1lc2VyaWVzRGF0YSB8IEZsb3dEYXRhO1xuICBleHBvcnQgdHlwZSBQcm9jZXNzRGF0YSA9IExhYmVsZWREYXRhIHwgVGltZXNlcmllc0RhdGEgfCBQcm9jZXNzZWRGbG93RGF0YTtcbiAgZXhwb3J0IHR5cGUgTm9uRmxvd0RhdGEgPSBMYWJlbGVkRGF0YSB8IFRpbWVzZXJpZXNEYXRhO1xuXG4gIHR5cGUgQmFzZURhdGEgPSB7XG4gICAgeXM6IERhdGFZW107XG4gICAgc3VwcGxlbWVudGFyeVlzPzogU3VwcGxlbWVudGFyeURhdGFZW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUGF0dGVybiA9ICdzb2xpZCcgfCAnc3RyaXBlZCcgfCAnZG90cyc7XG5cbiAgZXhwb3J0IHR5cGUgRGF0YVkgPSB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb2xvclRva2VuPzogc3RyaW5nO1xuICAgIGhpZGRlbj86IGJvb2xlYW47XG4gICAgaXNTZWNvbmRhcnk/OiBib29sZWFuO1xuICAgIHBhdHRlcm4/OiBQYXR0ZXJuO1xuICAgIHNob3dMZWdlbmRJdGVtPzogYm9vbGVhbjtcbiAgICBjbGlja2FibGU/OiBib29sZWFuO1xuICAgIHZhbHVlczogbnVtYmVyW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU3VwcGxlbWVudGFyeURhdGFZID0gRGF0YVkgJiB7XG4gICAgc3VwcGxlbWVudGFsSW5kZXg6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGbG93WSA9IHtcbiAgICBzdGVwczogc3RyaW5nW107IC8vU2hvdWxkIGFsd2F5cyBtYXRjaCBpbiBsZW5ndGggdy8gdmFsdWVzXG4gICAgdmFsdWVzOiBudW1iZXJbXTsgLy9GbG93WSB2YWx1ZXMgc2hvdWxkIGFsd2F5cyBiZSB3ZWFrbHkgZGVjcmVhc2luZ1xuICAgIGNsaWNrYWJsZT86IGJvb2xlYW47XG4gIH07XG5cbiAgLy9DdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgZm9yIGhvcml6b250YWwgYmFyIGNoYXJ0c1xuICBleHBvcnQgdHlwZSBMYWJlbGVkRGF0YSA9IEJhc2VEYXRhICYge1xuICAgIHR5cGU6ICdsYWJlbGVkJztcbiAgICB4OiB7IGxhYmVsOiBzdHJpbmc7IGlzU2Vjb25kYXJ5PzogYm9vbGVhbiB9W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgVGltZXNlcmllc0RhdGEgPSBCYXNlRGF0YSAmIHtcbiAgICB0eXBlOiAndGltZXNlcmllcyc7XG4gICAgeDogbnVtYmVyW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd0RhdGEgPSB7XG4gICAgdHlwZTogJ2Zsb3cnO1xuICAgIHlzOiBGbG93WVtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFByb2Nlc3NlZEZsb3dEYXRhID0ge1xuICAgIHR5cGU6ICdmbG93LXByb2Nlc3NlZCc7XG4gICAgeDogRmxvd0J1Y2tldFtdO1xuICB9O1xuXG4gIHR5cGUgRmxvd0J1Y2tldCA9IHtcbiAgICB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgc3ViQnVja2V0czogRmxvd1N1YkJ1Y2tldFtdO1xuICB9O1xuXG4gIHR5cGUgRmxvd1N1YkJ1Y2tldCA9IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgY29ubmVjdGlvbnM6IEZsb3dDb25uZWN0aW9uW107XG4gIH07XG5cbiAgdHlwZSBGbG93Q29ubmVjdGlvbiA9IHtcbiAgICBkaXJlY3Rpb246ICdmb3J3YXJkJyB8ICdiYWNrd2FyZCc7XG4gICAgc3RhcnQ6IHN0cmluZztcbiAgICBlbmQ6IHN0cmluZztcbiAgICBjb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZsb3dDb25uZWN0aW9uUmVuZGVyID0gT21pdDxGbG93Q29ubmVjdGlvbiwgJ2RpcmVjdGlvbic+ICYge1xuICAgIGVsZW1lbnRUeXBlOiAnY29ubmVjdGlvbic7XG4gICAgc3RlcDogbnVtYmVyO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBlbXBoYXNpemU/OiBib29sZWFuO1xuICAgIHRvcExpbmU6IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeDI6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfTtcbiAgICBib3R0b21MaW5lOiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgdHlwZSBEb251dERhdGEgPSB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgaXNTZWNvbmRhcnk/OiBib29sZWFuO1xuICB9O1xuXG4gIHR5cGUgRGltZW5zaW9ucyA9IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9XG4gICAgfCAnbGluZSdcbiAgICB8ICdhcmVhJ1xuICAgIHwgJ2JhcidcbiAgICB8ICdob3Jpem9udGFsLWJhcidcbiAgICB8ICdkb251dCdcbiAgICB8ICd3YXRlcmZhbGwnXG4gICAgfCAnZnVubmVsJ1xuICAgIHwgJ2Zsb3cnO1xuXG4gIHR5cGUgQmFzZUNvbmZpZyA9IHtcbiAgICB0eXBlOiBDaGFydFR5cGU7XG4gICAgZ3JvdXBlZFRvb2x0aXA6IGJvb2xlYW47XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogYm9vbGVhbjtcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgc2l6aW5nRXJyb3JTdGF0ZU1lc3NhZ2U6IHN0cmluZztcbiAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZTtcbiAgICBzZWNvbmRhcnlWYWx1ZVR5cGU/OiBWYWx1ZVR5cGU7XG4gICAgdHJ1bmNhdGVMZWdlbmQ6IGJvb2xlYW47XG4gICAgZGF0ZUZvcm1hdD86IEludGVydmFsO1xuICAgIHNob3dEYXRhTGFiZWxzPzogYm9vbGVhbjtcbiAgfTtcblxuICB0eXBlIERvbnV0U3ViQ29uZmlnID0ge1xuICAgIHNpemU6ICd4c21hbGwnIHwgJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJztcbiAgICBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgICBkaXNwbGF5TGFiZWw/OiBzdHJpbmc7XG4gICAgc2NhbGluZ0NvbmZpZz86IERvbnV0U2l6aW5nQ29uZmlnO1xuICB9O1xuXG4gIHR5cGUgRmxvd1N1YkNvbmZpZyA9IHtcbiAgICBzdWJ0aXRsZUZvcm1hdFN0cmluZzogc3RyaW5nO1xuICAgIHN1YkJ1Y2tldHNDb25maWc6IHtcbiAgICAgIGJ1Y2tldElkOiBzdHJpbmc7XG4gICAgICBidWNrZXROYW1lOiBzdHJpbmc7XG4gICAgICBjb2xvcjogc3RyaW5nO1xuICAgICAgaXNIaWdobGlnaHRlZD86IGJvb2xlYW47XG4gICAgfVtdO1xuICAgIGNvbm5lY3Rpb25Db2xvcj86IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDb25maWcgPSBCYXNlQ29uZmlnICZcbiAgICAoXG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiAnbGluZScgfCAnYXJlYScgfCAnd2F0ZXJmYWxsJyB8ICdmdW5uZWwnO1xuICAgICAgICAgIHNjYWxpbmdDb25maWc/OiBGdWxsU2NhbGluZ0NvbmZpZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2JhcicgfCAnaG9yaXpvbnRhbC1iYXInO1xuICAgICAgICAgIGdyb3VwaW5nVHlwZTogJ3N0YWNrZWQnIHwgJ2NsdXN0ZXJlZCc7XG4gICAgICAgICAgc2NhbGluZ0NvbmZpZz86IEZ1bGxTY2FsaW5nQ29uZmlnO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiAnZG9udXQnO1xuICAgICAgICAgIGRvbnV0RGlzcGxheUluZm86IERvbnV0U3ViQ29uZmlnO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiAnZmxvdyc7XG4gICAgICAgICAgc2hvd0RhdGFMYWJlbHM6IHRydWU7XG4gICAgICAgICAgZmxvd0NvbmZpZzogRmxvd1N1YkNvbmZpZztcbiAgICAgICAgICBzY2FsaW5nQ29uZmlnPzogRnVsbFNjYWxpbmdDb25maWc7XG4gICAgICAgIH1cbiAgICApO1xuXG4gIHR5cGUgRG9udXRDb25maWcgPSBFeHRyYWN0PENvbmZpZywgeyB0eXBlOiAnZG9udXQnIH0+O1xuXG4gIHR5cGUgRmxvd0NvbmZpZyA9IEV4dHJhY3Q8Q29uZmlnLCB7IHR5cGU6ICdmbG93JyB9PjtcblxuICB0eXBlIENvbmZpZ1dpdGhGdWxsU2NhbGluZyA9IEV4dHJhY3Q8XG4gICAgQ29uZmlnLFxuICAgIHtcbiAgICAgIHR5cGU6XG4gICAgICAgIHwgJ2JhcidcbiAgICAgICAgfCAnaG9yaXpvbnRhbC1iYXInXG4gICAgICAgIHwgJ2xpbmUnXG4gICAgICAgIHwgJ2FyZWEnXG4gICAgICAgIHwgJ3dhdGVyZmFsbCdcbiAgICAgICAgfCAnZnVubmVsJ1xuICAgICAgICB8ICdmbG93JztcbiAgICB9XG4gID47XG5cbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWc6IENvbmZpZyA9IHtcbiAgICB0eXBlOiAnbGluZScsXG4gICAgZ3JvdXBlZFRvb2x0aXA6IHRydWUsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JQYWxldHRlLFxuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBmYWxzZSxcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICAgc2l6aW5nRXJyb3JTdGF0ZU1lc3NhZ2U6ICdUaGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhlIGN1cnJlbnQgc2l6ZS4nLFxuICAgIHZhbHVlVHlwZTogJ2N1cnJlbmN5JyxcbiAgICB0cnVuY2F0ZUxlZ2VuZDogdHJ1ZSxcbiAgICBkYXRlRm9ybWF0OiAnZGF5JyxcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZGVmYXVsdERvbnV0Q29uZmlnOiBDb25maWcgPSB7XG4gICAgdHlwZTogJ2RvbnV0JyxcbiAgICBncm91cGVkVG9vbHRpcDogdHJ1ZSxcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvclBhbGV0dGUsXG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGZhbHNlLFxuICAgIHplcm9TdGF0ZU1lc3NhZ2U6ICdObyBkYXRhIHRvIGRpc3BsYXkuJyxcbiAgICBzaXppbmdFcnJvclN0YXRlTWVzc2FnZTogJ1RoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGUgY3VycmVudCBzaXplLicsXG4gICAgdmFsdWVUeXBlOiAnY3VycmVuY3knLFxuICAgIHRydW5jYXRlTGVnZW5kOiB0cnVlLFxuICAgIGRhdGVGb3JtYXQ6ICdkYXknLFxuICAgIGRvbnV0RGlzcGxheUluZm86IHtcbiAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgZGlzcGxheVZhbHVlOiAnJyxcbiAgICB9LFxuICB9O1xuXG4gIHR5cGUgR2VuZXJpY1RpY2sgPSB7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHNlY29uZGFyeUxhYmVsPzogc3RyaW5nO1xuICB9O1xuXG4gIHR5cGUgWFRpY2sgPSBPbWl0PEdlbmVyaWNUaWNrLCAndmFsdWUnPiAmIHtcbiAgICB4OiBudW1iZXI7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9YVGljayh0aWNrOiBHZW5lcmljVGljayk6IFhUaWNrIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogdGljay52YWx1ZSxcbiAgICAgIGxhYmVsOiB0aWNrLmxhYmVsLFxuICAgICAgc2Vjb25kYXJ5TGFiZWw6IHRpY2suc2Vjb25kYXJ5TGFiZWwsXG4gICAgfTtcbiAgfVxuXG4gIHR5cGUgWVRpY2sgPSBPbWl0PEdlbmVyaWNUaWNrLCAndmFsdWUnPiAmIHtcbiAgICB5OiBudW1iZXI7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9ZVGljayh0aWNrOiBHZW5lcmljVGljayk6IFlUaWNrIHtcbiAgICByZXR1cm4ge1xuICAgICAgeTogdGljay52YWx1ZSxcbiAgICAgIGxhYmVsOiB0aWNrLmxhYmVsLFxuICAgICAgc2Vjb25kYXJ5TGFiZWw6IHRpY2suc2Vjb25kYXJ5TGFiZWwsXG4gICAgfTtcbiAgfVxuXG4gIHR5cGUgQmFzaWNSZWN0ID0ge1xuICAgIGVsZW1lbnRUeXBlOiAncmVjdCc7XG4gICAgcmVjdFR5cGU/OiBzdHJpbmc7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBwYXR0ZXJuPzogUGF0dGVybjtcbiAgICByb3VuZGluZz86ICd0b3AnIHwgJ2JvdHRvbScgfCAnYWxsJyB8ICdub25lJztcbiAgICBub25EaXNwbGF5PzogYm9vbGVhbjtcbiAgfTtcblxuICB0eXBlIEZsb3dSZWN0ID0gQmFzaWNSZWN0ICYge1xuICAgIHJlY3RUeXBlOiAnZmxvdyc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIGNvbG9yT3ZlcnJpZGU/OiBzdHJpbmc7XG4gICAgZGFya2VuOiBib29sZWFuO1xuICAgIGRlRW1waGFzaXplOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJlY3QgPSAoQmFzaWNSZWN0ICYgeyByZWN0VHlwZT86IHVuZGVmaW5lZCB9KSB8IEZsb3dSZWN0O1xuXG4gIHR5cGUgQ2lyY2xlID0ge1xuICAgIGN4OiBudW1iZXI7XG4gICAgY3k6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGbG93SG92ZXJUYXJnZXQgPVxuICAgIHwge1xuICAgICAgICBob3ZlclRhcmdldDogJ2JhclRpdGxlJztcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgYmFySWQ6IHN0cmluZztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgaG92ZXJUYXJnZXQ6ICdiYXInO1xuICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBiYXJJZDogc3RyaW5nO1xuICAgICAgICBmb3JEYXJrZW46IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGhvdmVyVGFyZ2V0OiAnY29ubmVjdGlvbic7XG4gICAgICAgIHN0YXJ0SWQ6IHN0cmluZztcbiAgICAgICAgZW5kSWQ6IHN0cmluZztcbiAgICAgICAgc3RhcnRCdWNrZXRJbmRleDogbnVtYmVyO1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBGbG93SG92ZXJSZXR1cm4gPSB7XG4gICAgaG92ZXJUeXBlOiAnZmxvdyc7XG5cbiAgICB0b29sdGlwOiB7XG4gICAgICBhbmNob3I6IERPTVJlY3Q7XG4gICAgICBzdWJ0aXRsZTogc3RyaW5nO1xuICAgICAgc2Vjb25kYXJ5U3VidGl0bGU/OiBzdHJpbmc7XG4gICAgfTtcbiAgfSAmIEZsb3dIb3ZlclRhcmdldDtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgY2xpY2thYmxlIGZsb3cgZWxlbWVudCBpcyBjbGlja2VkLiBgeUluZGljZXNgIGFyZSB0aGVcbiAgICogaW5kaWNlcyBpbnRvIGBGbG93RGF0YS55c2Agb2YgdGhlIHBhdGhzIHRoYXQgbWFrZSB1cCB0aGUgY2xpY2tlZCBlbGVtZW50LlxuICAgKi9cbiAgZXhwb3J0IHR5cGUgRmxvd0NsaWNrRXZlbnQgPSB7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICB5SW5kaWNlczogbnVtYmVyW107XG4gIH0gJiAoXG4gICAgfCAoe1xuICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBiYXJJZDogc3RyaW5nO1xuICAgICAgfSAmIChcbiAgICAgICAgfCB7XG4gICAgICAgICAgICB0YXJnZXQ6ICd0aXRsZSc7XG4gICAgICAgICAgfVxuICAgICAgICB8IHtcbiAgICAgICAgICAgIHRhcmdldDogJ2NvbnRpbnVpbmcnIHwgJ2VuZGluZyc7XG4gICAgICAgICAgICB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgKSlcbiAgICB8IHtcbiAgICAgICAgdGFyZ2V0OiAnY29ubmVjdGlvbic7XG4gICAgICAgIHN0YXJ0QnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc3RhcnRJZDogc3RyaW5nO1xuICAgICAgICBlbmRJZDogc3RyaW5nO1xuICAgICAgfVxuICApO1xuXG4gIGV4cG9ydCB0eXBlIEhvdmVyUmV0dXJuID1cbiAgICB8IHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnO1xuICAgICAgICAvLyB0aGUgaW5kaWNlcyBpbnRvIHRoZSBkYXRhIG9mIHRoZSBjbG9zZXN0IHBvaW50XG4gICAgICAgIHhJbmRleDogbnVtYmVyO1xuICAgICAgICAvLyB3ZSB3YW50IHRvIGtub3cgd2hpY2ggdmlzaWJsZSB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICAgICAgLy8gYW5kIHdoaWNoIGFjdHVhbCB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICAgICAgeUluZGV4OiBudW1iZXI7XG4gICAgICAgIHZpc2libGVZSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaXNTdXBwVmFsdWU/OiBib29sZWFuO1xuICAgICAgICBzdXBwWUluZGV4PzogbnVtYmVyO1xuICAgICAgICAvL0Z1bm5lbCBvbmx5LCBmb3Igd2hlbiBkcm9wT2ZmIHNlY3Rpb24gaXMgaG92ZXJlZFxuICAgICAgICBpc0Ryb3BPZmY/OiBib29sZWFuO1xuXG4gICAgICAgIC8vIHRoZSB2aWV3cG9ydCB4IGFuZCB5cyBvZiB0aGUgaG92ZXJlZCBpdGVtc1xuICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgIHlzOiBudW1iZXJbXTtcblxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yOiBET01SZWN0O1xuICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uPzogQ2FsbG91dENvbXBvbmVudC5BbmNob3JlZFBvc2l0aW9uO1xuICAgICAgICAgIGRhdGU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgbWV0cmljczoge1xuICAgICAgICAgICAgY29sb3I6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgICAgICAgcGF0dGVybj86IFBhdHRlcm47XG4gICAgICAgICAgfVtdO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIHwgRmxvd0hvdmVyUmV0dXJuXG4gICAgfCBudWxsO1xuXG4gIC8vIEhvdmVyIGlzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZpZXdwb3J0IHggYW5kIHkgYW5kIHJldHVybnMgYSByaWNoXG4gIC8vIHNldCBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHZhbHVlcyBhcmUgYmVpbmcgaG92ZXJlZCBhbmQgd2hhdCB0aGUgdG9vbHRpcFxuICAvLyBzaG91bGQgbG9vayBsaWtlXG4gIGV4cG9ydCB0eXBlIEhvdmVyID0gKHBvczoge1xuICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICB9KSA9PiBIb3ZlclJldHVybjtcblxuICBleHBvcnQgdHlwZSBUb29sdGlwQ29udGV4dCA9IHtcbiAgICB4SW5kZXg6IG51bWJlcjtcbiAgICB5SW5kZXg6IG51bWJlcjtcbiAgICBpc1N1cHBWYWx1ZT86IGJvb2xlYW47XG4gICAgc3VwcFlJbmRleD86IG51bWJlcjtcbiAgfTtcblxuICAvLyBSZW5kZXJlZENoYXJ0IHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwYXJ0cyBvZiBhIGNoYXJ0XG4gIC8vIHRoYXQgZW5kIHVwIG9uIHNjcmVlbi4gRXZlcnkgY2hhcnQgaGFzIHggYW5kIHkgdGlja3NcbiAgLy8gYW5kIGhvdmVyIGZ1bmN0aW9uYWxpdHksIGV2ZW4gdGhvdWdoIHRoZXkgbWlnaHQgYmVcbiAgLy8gZGlmZmVyZW50IGZyb20gY2hhcnQgdG8gY2hhcnQuXG4gIGV4cG9ydCB0eXBlIFJlbmRlcmVkQ2hhcnQgPSB7XG4gICAgY2hhcnRXaWR0aDogbnVtYmVyO1xuICAgIGNoYXJ0SGVpZ2h0OiBudW1iZXI7XG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzO1xuICAgIHhUaWNrczogWFRpY2tbXTtcbiAgICB5VGlja3M6IFlUaWNrW107XG4gICAgaG92ZXI/OiBIb3ZlcjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGxpbmVzOiB7IHBhdHRlcm4/OiBQYXR0ZXJuOyBsaW5lOiBzdHJpbmcgfCBudWxsIH1bXTtcbiAgICBjaXJjbGVzOiBDaXJjbGVbXTsgLy9MaW5lIGZhbGxiYWNrIGZvciBhIHNpbmdsZSBwb2ludFxuICAgIGFyZWFzOiB7IHBhdHRlcm4/OiBQYXR0ZXJuOyBhcmVhOiBzdHJpbmcgfCBudWxsIH1bXTtcbiAgICBiYXJzOiBSZWN0W11bXTtcbiAgICBhcmNzOiAoc3RyaW5nIHwgbnVsbClbXTtcbiAgICBob3Jpem9udGFsQmFyczoge1xuICAgICAgcGF0dGVybj86IFBhdHRlcm47XG4gICAgICBob3Jpem9udGFsQmFyOiBzdHJpbmcgfCBudWxsO1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgIH1bXVtdO1xuICAgIGRhdGFMYWJlbHM6IERhdGFMYWJlbFtdO1xuICAgIHdhdGVyZmFsbExpbmVzOiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeDI6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH1bXTtcbiAgICBncmFkaWVudHM6IFJlY3RbXVtdO1xuICAgIGZsb3dDb25uZWN0aW9uczogRmxvd0Nvbm5lY3Rpb25SZW5kZXJbXTtcbiAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IENvbnRhaW5lclNjYWxpbmdUeXBlO1xuICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IENvbnRhaW5lclNjYWxpbmdUeXBlO1xuICAgIGNoYXJ0RXJyb3I6ICdzaXppbmcnIHwgJ2NvbmZpZycgfCBudWxsO1xuICB9O1xuXG4gIHR5cGUgQmFzaWNEYXRhTGFiZWwgPSB7XG4gICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnO1xuICAgIGRhdGFMYWJlbFR5cGU/OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB4UG9zOiBudW1iZXI7XG4gICAgeVBvczogbnVtYmVyO1xuICAgIGFuY2hvcjogJ3N0YXJ0JyB8ICdtaWRkbGUnIHwgJ2VuZCc7XG4gICAgbGluZT86IHtcbiAgICAgIHgxOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeDI6IG51bWJlcjtcbiAgICAgIHkyOiBudW1iZXI7XG4gICAgfTtcbiAgICBib2xkPzogYm9vbGVhbjtcbiAgfTtcblxuICB0eXBlIEZsb3dEYXRhTGFiZWwgPSBCYXNpY0RhdGFMYWJlbCAmIHtcbiAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCc7XG4gICAgZGF0YUxhYmVsVHlwZTogJ2Zsb3cnO1xuICAgIC8vSGVscGVyIGRhdGEgZm9yIGZsb3dzXG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICBiYXJJZDogc3RyaW5nO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIERhdGFMYWJlbCA9XG4gICAgfCAoQmFzaWNEYXRhTGFiZWwgJiB7IGRhdGFMYWJlbFR5cGU/OiB1bmRlZmluZWQgfSlcbiAgICB8IEZsb3dEYXRhTGFiZWw7XG5cbiAgY29uc3QgZW1wdHlDaGFydDogUmVuZGVyZWRDaGFydCA9IHtcbiAgICBjaGFydFdpZHRoOiAwLFxuICAgIGNoYXJ0SGVpZ2h0OiAwLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBlbXB0eUNoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgeFRpY2tzOiBbXSxcbiAgICB5VGlja3M6IFtdLFxuICAgIGNvbG9yczogW10sXG4gICAgbGluZXM6IFtdLFxuICAgIGNpcmNsZXM6IFtdLFxuICAgIGFyZWFzOiBbXSxcbiAgICBiYXJzOiBbXSxcbiAgICBhcmNzOiBbXSxcbiAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgZGF0YUxhYmVsczogW10sXG4gICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgIGdyYWRpZW50czogW10sXG4gICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6ICduby1zY2FsZScsXG4gICAgdmVydGljYWxDb250YWluZXJTY2FsZTogJ25vLXNjYWxlJyxcbiAgICBjaGFydEVycm9yOiBudWxsLFxuICB9O1xuXG4gIC8vJ3knIGluIHRoaXMgZnVuY3Rpb24gcmVmZXJzIHRvIHRoZSBkYXRhIHksIHNpbmNlIHRoaXMgZnVuY3Rpb25cbiAgLy8gaXMgYWxzbyB1c2VkIGJ5IGhvcml6b250YWwtYmFycywgd2hlcmUgdGhlIGRhdGEgeSBpcyB0aGUgY2hhcnQgeFxuICBmdW5jdGlvbiBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBwaXBlVHJhbnNmb3JtSW5wdXQ6XG4gICAgICB8ICgodmFsdWU6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4pID0+IHN0cmluZylcbiAgICAgIHwgbnVsbCxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICk6IHtcbiAgICBzY2FsZTogKGlucHV0OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBudW1iZXI7XG4gICAgdGlja3M6IEdlbmVyaWNUaWNrW107XG4gIH0ge1xuICAgIGNvbnN0IHBpcGVUcmFuc2Zvcm0gPVxuICAgICAgcGlwZVRyYW5zZm9ybUlucHV0ICE9PSBudWxsID8gcGlwZVRyYW5zZm9ybUlucHV0IDogKCkgPT4gJyc7XG4gICAgY29uc3Qge1xuICAgICAgcHJpbWFyeURhdGFNaW4sXG4gICAgICBwcmltYXJ5RGF0YU1heCxcbiAgICAgIHNlY29uZGFyeURhdGFNaW4sXG4gICAgICBzZWNvbmRhcnlEYXRhTWF4LFxuICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcsXG4gICAgfSA9IGNhbGNEYXRhU2NhbGluZ1ZhbHVlcyhkYXRhLCBjb25maWcpO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID1cbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0XG4gICAgICAgIDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxUb3BPZmZzZXQ7XG4gICAgbGV0IG1pblNwYWNpbmcgPVxuICAgICAgKGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbEF4aXNMYWJlbFRleHRTaXplXG4gICAgICAgIDogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxBeGlzTGFiZWxUZXh0U2l6ZSkgKyBTTUFMTF9QQURESU5HO1xuICAgIG1pblNwYWNpbmcgPSBtaW5TcGFjaW5nICogKGNoYXJ0U2l6aW5nVmFsdWVzLmZvbnRTaXplIC8gREVGQVVMVF9GT05UX1NJWkUpO1xuICAgIGNvbnN0IHNwYWNpbmdUaWNrQ291bnQgPSBNYXRoLm1heChcbiAgICAgIDIsXG4gICAgICBNYXRoLmZsb29yKGNoYXJ0U2l6aW5nVmFsdWVzLnNpemVGb3JEYXRhIC8gbWluU3BhY2luZyksXG4gICAgKTtcbiAgICBjb25zdCBhY3R1YWxUYXJnZXRUaWNrQ291bnQgPSBNYXRoLm1pbihcbiAgICAgIHNwYWNpbmdUaWNrQ291bnQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy50YXJnZXRUaWNrQ291bnQsXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc1ByaW1hcnkgPSBwcmltYXJ5RGF0YU1pbiAhPT0gMCB8fCBwcmltYXJ5RGF0YU1heCAhPT0gMDtcbiAgICBjb25zdCBoYXNTZWNvbmRhcnkgPSBzZWNvbmRhcnlEYXRhTWluICE9PSAwIHx8IHNlY29uZGFyeURhdGFNYXggIT09IDA7XG4gICAgY29uc3Qgc2NhbGVSYW5nZSA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fFxuICAgICAgY29uZmlnLnR5cGUgPT09ICdmbG93J1xuICAgICAgICA/IFswLCBjaGFydFNpemluZ1ZhbHVlcy5zaXplRm9yRGF0YV1cbiAgICAgICAgOiBbY2hhcnRTaXppbmdWYWx1ZXMuc2l6ZUZvckRhdGEsIDBdO1xuICAgIC8vVGhlc2UgJ2VmZmVjdGl2ZScgdmFsdWVzIGVuc3VyZSB3ZSBoYXZlIHJvb20gZm9yIHBvdGVudGlhbCBzdGFja2luZyBvZiBzZWNvbmRhcnkgYW5kIG5vbi1zZWNvbmRhcnkgdmFsdWVzXG4gICAgbGV0IGVmZmVjdGl2ZVByaW1hcnlNaW4gPSBwcmltYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgbGV0IGVmZmVjdGl2ZVByaW1hcnlNYXggPSBwcmltYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG5cbiAgICAvL1NpbXBsZXIgcGF0aCBmb3IgZGF0YSB3L28gc2Vjb25kYXJpZXNcbiAgICBpZiAoIWhhc1NlY29uZGFyeSkge1xuICAgICAgY29uc3QgcHJpbWFyeVlEb21haW4gPSBbZWZmZWN0aXZlUHJpbWFyeU1pbiwgZWZmZWN0aXZlUHJpbWFyeU1heF07XG5cbiAgICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHByaW1hcnlZRG9tYWluLCBzY2FsZVJhbmdlKTtcbiAgICAgIGNvbnN0IHRpY2tzOiBHZW5lcmljVGlja1tdID0geVNjYWxlXG4gICAgICAgIC50aWNrcyhhY3R1YWxUYXJnZXRUaWNrQ291bnQpXG4gICAgICAgIC5tYXAodGljayA9PiAoe1xuICAgICAgICAgIHZhbHVlOiB5U2NhbGUodGljaykgKyBzdGFydE9mZnNldCxcbiAgICAgICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh0aWNrLCBmYWxzZSksXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gKGlucHV0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgICByZXR1cm4geVNjYWxlKGlucHV0KSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjYWxlLFxuICAgICAgICB0aWNrcyxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vU2ltcGxlciBwYXRoIGZvciBkYXRhIHcvbyBwcmltYXJpZXNcbiAgICBpZiAoIWhhc1ByaW1hcnkpIHtcbiAgICAgIGNvbnN0IHNlY29uZGFyeVlEb21haW4gPSBbc2Vjb25kYXJ5RGF0YU1pbiwgc2Vjb25kYXJ5RGF0YU1heF07XG5cbiAgICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHNlY29uZGFyeVlEb21haW4sIHNjYWxlUmFuZ2UpO1xuICAgICAgY29uc3QgdGlja3M6IEdlbmVyaWNUaWNrW10gPSB5U2NhbGVcbiAgICAgICAgLnRpY2tzKGFjdHVhbFRhcmdldFRpY2tDb3VudClcbiAgICAgICAgLm1hcCh0aWNrID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHlTY2FsZSh0aWNrKSArIHN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKHRpY2ssIHRydWUpLFxuICAgICAgICB9KSk7XG4gICAgICBjb25zdCBzY2FsZSA9IChpbnB1dDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHlTY2FsZShpbnB1dCkgKyBzdGFydE9mZnNldDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2FsZSxcbiAgICAgICAgdGlja3MsXG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gMDtcbiAgICBsZXQgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID0gMDtcblxuICAgIC8vVGhpcyBibG9jayBzZXRzIHRoZSBlZmZlY3RpdmUgbWF4IGZvciBwcmltYXJ5IGFuZCBzZWNvbmRhcnlcbiAgICAvL1RoaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGVmZmVjdGl2ZSBtYXhlcyBmb3IgYm90aCBkYXRhIHNldHMgYXJlIHByb3Blcmx5IHNldCBzbyB0aGF0XG4gICAgLy8gMCB3aWxsIGZhbGwgYXQgdGhlIHNhbWUgcGxhY2Ugb24gYm90aCBhbmQgZWFjaCB3aWxsIGhhdmUgJ3Jvb20nIGZvciBwb3RlbnRpYWwgc3RhY2tpbmdcbiAgICBpZiAoXG4gICAgICAocHJpbWFyeURhdGFNYXggPD0gMCAmJiBzZWNvbmRhcnlEYXRhTWluID49IDApIHx8XG4gICAgICAocHJpbWFyeURhdGFNaW4gPj0gMCAmJiBzZWNvbmRhcnlEYXRhTWF4IDw9IDApXG4gICAgKSB7XG4gICAgICAvL0luIHRoaXMgc2NlbmFyaW8sIG9uZSBzZXQgb2YgZGF0YSBpcyBjb21wZXRlbHkgcG9zaXRpdmUsIHdoaWxlIHRoZSBvdGhlciBpcyBjb21wbGV0ZWx5IG5lZ2F0aXZlXG4gICAgICAvL1RoZSB0d28gZGF0YSBzZXRzIGNhbiBzY2FsZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50bHlcbiAgICAgIC8vV2UgJ21pcnJvcicgdGhlIHZhbHVlcyBvZiB0aGUgdHdvIGRhdGEgc2V0cywgd2hpY2gnbGwgcHV0IHRoZSAwIGF4aXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgZGF0YVxuICAgICAgaWYgKHByaW1hcnlEYXRhTWF4IDw9IDApIHtcbiAgICAgICAgZWZmZWN0aXZlUHJpbWFyeU1heCA9IE1hdGguYWJzKGVmZmVjdGl2ZVByaW1hcnlNaW4pO1xuICAgICAgfVxuICAgICAgaWYgKHByaW1hcnlEYXRhTWluID49IDApIHtcbiAgICAgICAgZWZmZWN0aXZlUHJpbWFyeU1pbiA9IC1NYXRoLmFicyhlZmZlY3RpdmVQcmltYXJ5TWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWNvbmRhcnlEYXRhTWF4IDw9IDApIHtcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID0gc2Vjb25kYXJ5RGF0YU1pbjtcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gTWF0aC5hYnMoc2Vjb25kYXJ5RGF0YU1pbik7XG4gICAgICB9XG4gICAgICBpZiAoc2Vjb25kYXJ5RGF0YU1pbiA+PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IHNlY29uZGFyeURhdGFNYXg7XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IC1zZWNvbmRhcnlEYXRhTWF4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJpbWFyeURhdGFNYXggPiAwKSB7XG4gICAgICBpZiAocHJpbWFyeURhdGFNaW4gPCAwKSB7XG4gICAgICAgIC8vUHJpbWFyeSBkYXRhIGhhcyBwb3NpdGl2ZSBhbmQgbmVnYXRpdmVcbiAgICAgICAgaWYgKHNlY29uZGFyeURhdGFNYXggPiAwKSB7XG4gICAgICAgICAgLy9TZWNvbmRhcnkgZGF0YSBoYXMgcG9zaXRpdmVcbiAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBzZWNvbmRhcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICAgICAgICBpZiAoc2Vjb25kYXJ5RGF0YU1pbiA8IDApIHtcbiAgICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPVxuICAgICAgICAgICAgICBzZWNvbmRhcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9TZWNvbmRhcnkgZGF0YSBpcyBvbmx5IHBvc2l0aXZlXG4gICAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPVxuICAgICAgICAgICAgICAoc2Vjb25kYXJ5RGF0YU1heCAvIHByaW1hcnlEYXRhTWF4KSAqXG4gICAgICAgICAgICAgIHByaW1hcnlEYXRhTWluICpcbiAgICAgICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9TZWNvbmRhcnkgZGF0YSBoYXMgb25seSBuZWdhdGl2ZVxuICAgICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9XG4gICAgICAgICAgICAoc2Vjb25kYXJ5RGF0YU1pbiAvIHByaW1hcnlEYXRhTWluKSAqXG4gICAgICAgICAgICBwcmltYXJ5RGF0YU1heCAqXG4gICAgICAgICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL1ByaW1hcnkgZGF0YSBpcyBvbmx5IHBvc2l0aXZlXG4gICAgICAgIC8vRHVlIHRvIGVhcmxpZXIgY2hlY2ssIHdlIGtub3cgdGhhdCBzZWNvbmRhcnkgZGF0YSBpcyBlaXRoZXIgYWxzbyBhbGwtcG9zaXRpdmUsIG9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZVxuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBzZWNvbmRhcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID0gc2Vjb25kYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICAgIGVmZmVjdGl2ZVByaW1hcnlNaW4gPVxuICAgICAgICAgIChwcmltYXJ5RGF0YU1heCAvIHNlY29uZGFyeURhdGFNYXgpICpcbiAgICAgICAgICBzZWNvbmRhcnlEYXRhTWluICpcbiAgICAgICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL1ByaW1hcnkgZGF0YSBpcyBvbmx5IG5lZ2F0aXZlXG4gICAgICAvL0R1ZSB0byBlYXJsaWVyIGNoZWNrLCB3ZSBrbm93IHRoYXQgc2Vjb25kYXJ5IGRhdGEgaXMgZWl0aGVyIGFsc28gYWxsLW5lZ2F0aXZlLCBvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmVcbiAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IHNlY29uZGFyeURhdGFNYXggKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID0gc2Vjb25kYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICBlZmZlY3RpdmVQcmltYXJ5TWF4ID1cbiAgICAgICAgKHByaW1hcnlEYXRhTWluIC8gc2Vjb25kYXJ5RGF0YU1pbikgKlxuICAgICAgICBzZWNvbmRhcnlEYXRhTWF4ICpcbiAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICB9XG4gICAgY29uc3QgcHJpbWFyeVlEb21haW4gPSBbZWZmZWN0aXZlUHJpbWFyeU1pbiwgZWZmZWN0aXZlUHJpbWFyeU1heF07XG5cbiAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcihwcmltYXJ5WURvbWFpbiwgc2NhbGVSYW5nZSk7XG5cbiAgICAvL0ZpZ3VyaW5nIG91dCB0aGUgYmVzdCB0aWNrIGNvdW50IHRvIGZpdCB0aGUgdHdvIGRhdGEgc3JvdWNlc1xuICAgIGNvbnN0IHlTY2FsZVByaW1hcnlQcm90byA9IHNjYWxlTGluZWFyKHByaW1hcnlZRG9tYWluLCBzY2FsZVJhbmdlKTtcbiAgICBjb25zdCB5U2NhbGVTZWNvbmRhcnlQcm90byA9IHNjYWxlTGluZWFyKFxuICAgICAgW2VmZmVjdGl2ZVNlY29uZGFyeU1pbiwgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4XSxcbiAgICAgIHNjYWxlUmFuZ2UsXG4gICAgKTtcbiAgICBjb25zdCB0aWNrQ291bnQgPSBNYXRoLm1heChcbiAgICAgIGFjdHVhbFRhcmdldFRpY2tDb3VudCxcbiAgICAgIHlTY2FsZVByaW1hcnlQcm90by50aWNrcyhhY3R1YWxUYXJnZXRUaWNrQ291bnQpLmxlbmd0aCxcbiAgICAgIHlTY2FsZVNlY29uZGFyeVByb3RvLnRpY2tzKGFjdHVhbFRhcmdldFRpY2tDb3VudCkubGVuZ3RoLFxuICAgICk7XG4gICAgY29uc3QgcHJpbWFyeVRpY2tzID0geVNjYWxlLnRpY2tzKHRpY2tDb3VudCkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHZhbHVlOiB5U2NhbGUodGljaykgKyBzdGFydE9mZnNldCxcbiAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKHRpY2ssIGZhbHNlKSxcbiAgICAgIHJhd1k6IHRpY2ssXG4gICAgfSkpO1xuXG4gICAgLy9GaW5kaW5nIGEgZG9tYWluIGZvciB0aGUgc2Vjb25kYXJ5IGRhdGEgc3VjaCB0aGF0IGl0IHdpbGwgcmVzdWx0IGluIHJvdW5kIHRpY2sgdmFsdWVzIHdoZW4gbWF0Y2hlZCB3aXRoIHRoZSBwcmltYXJ5IHRpY2tzXG4gICAgY29uc3Qgc2Vjb25kYXJ5VGlja3NQcm90byA9IHlTY2FsZVNlY29uZGFyeVByb3RvXG4gICAgICAudGlja3ModGlja0NvdW50KVxuICAgICAgLm1hcCh0aWNrID0+ICh7XG4gICAgICAgIHk6IHlTY2FsZVNlY29uZGFyeVByb3RvKHRpY2spLFxuICAgICAgICByYXdZOiB0aWNrLFxuICAgICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh0aWNrLCB0cnVlKSxcbiAgICAgIH0pKTtcbiAgICBjb25zdCBwcmltYXJ5TWluVGljayA9IE1hdGgubWluKC4uLnByaW1hcnlUaWNrcy5tYXAodGljayA9PiB0aWNrLnJhd1kpKTtcbiAgICBjb25zdCBwcmltYXJ5TWF4VGljayA9IE1hdGgubWF4KC4uLnByaW1hcnlUaWNrcy5tYXAodGljayA9PiB0aWNrLnJhd1kpKTtcbiAgICBjb25zdCBwcmltYXJ5RG9tYWluTWF4VGlja1JhdGlvID1cbiAgICAgIHByaW1hcnlNYXhUaWNrICE9PSAwID8gZWZmZWN0aXZlUHJpbWFyeU1heCAvIHByaW1hcnlNYXhUaWNrIDogMDtcbiAgICBjb25zdCBwcmltYXJ5RG9tYWluTWluVGlja1JhdGlvID1cbiAgICAgIHByaW1hcnlNaW5UaWNrICE9PSAwID8gZWZmZWN0aXZlUHJpbWFyeU1pbiAvIHByaW1hcnlNaW5UaWNrIDogMDtcblxuICAgIGNvbnN0IHByaW1hcnlHYXAgPSBwcmltYXJ5VGlja3NbMV0ucmF3WSAtIHByaW1hcnlUaWNrc1swXS5yYXdZO1xuICAgIGNvbnN0IHRpY2tzQmVsb3daZXJvID0gcHJpbWFyeU1pblRpY2sgLyBwcmltYXJ5R2FwO1xuICAgIGNvbnN0IHRpY2tzQWJvdmVaZXJvID0gcHJpbWFyeU1heFRpY2sgLyBwcmltYXJ5R2FwO1xuXG4gICAgY29uc3Qgc2Vjb25kYXJ5R2FwID1cbiAgICAgIHNlY29uZGFyeVRpY2tzUHJvdG9bMV0ucmF3WSAtIHNlY29uZGFyeVRpY2tzUHJvdG9bMF0ucmF3WTtcbiAgICBsZXQgY2FsY1JhbmdlTXVsdCA9IDE7XG4gICAgY29uc3Qgc2Vjb25kYXJ5RG9tYWluTWluTXVsdCA9XG4gICAgICB0aWNrc0JlbG93WmVybyAqIHNlY29uZGFyeUdhcCAqIHByaW1hcnlEb21haW5NaW5UaWNrUmF0aW87XG4gICAgY29uc3Qgc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCA9XG4gICAgICB0aWNrc0Fib3ZlWmVybyAqIHNlY29uZGFyeUdhcCAqIHByaW1hcnlEb21haW5NYXhUaWNrUmF0aW87XG4gICAgLy9GaXJzdCwgd2UgZW5zdXJlIHRoZSBjYWxjUmFuZ2VNdWx0IGlzIGJpZyBlbm91Z2hcbiAgICBsZXQgc2l6ZVVwQ29tcGxldGUgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXNpemVVcENvbXBsZXRlKSB7XG4gICAgICBjb25zdCBjYWxjUmFuZ2VUb29TbWFsbEZvck1pbiA9XG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1pbk11bHQgKiBjYWxjUmFuZ2VNdWx0ID4gZWZmZWN0aXZlU2Vjb25kYXJ5TWluICYmXG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1pbk11bHQgIT09IDA7XG4gICAgICBjb25zdCBjYWxjUmFuZ2VUb29TbWFsbEZvck1heCA9XG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1heE11bHQgKiBjYWxjUmFuZ2VNdWx0IDwgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ICYmXG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1heE11bHQgIT09IDA7XG4gICAgICBpZiAoY2FsY1JhbmdlVG9vU21hbGxGb3JNaW4gfHwgY2FsY1JhbmdlVG9vU21hbGxGb3JNYXgpIHtcbiAgICAgICAgY2FsY1JhbmdlTXVsdCA9IGNhbGNSYW5nZU11bHQgKiAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZVVwQ29tcGxldGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvL1RoZW4sIHdlIGNoZWNrIGlmIHdlIGNhbiBzY2FsZSBkb3duIChmb3IgdGhpcyBvbmUsIGJvdGggY29uZGl0aW9ucyBoYXZlIHRvIGJlIHRydWUsIHNvIGl0IHdvbid0IHVuZG8gYSBwcmV2aW91cyBzY2FsZSB1cClcbiAgICBsZXQgc2l6ZURvd25Db21wbGV0ZSA9IGZhbHNlO1xuICAgIHdoaWxlICghc2l6ZURvd25Db21wbGV0ZSkge1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vQmlnRm9yTWluID1cbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWluTXVsdCAqIGNhbGNSYW5nZU11bHQgPCBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gKiAyICYmXG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1pbk11bHQgIT09IDA7XG4gICAgICBjb25zdCBjYWxjUmFuZ2VUb29CaWdGb3JNYXggPVxuICAgICAgICBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICogY2FsY1JhbmdlTXVsdCA+IGVmZmVjdGl2ZVNlY29uZGFyeU1heCAqIDIgJiZcbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCAhPT0gMDtcbiAgICAgIGlmIChjYWxjUmFuZ2VUb29CaWdGb3JNaW4gJiYgY2FsY1JhbmdlVG9vQmlnRm9yTWF4KSB7XG4gICAgICAgIGNhbGNSYW5nZU11bHQgPSBjYWxjUmFuZ2VNdWx0IC8gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemVEb3duQ29tcGxldGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2Vjb25kYXJ5RG9tYWluTWluID0gc2Vjb25kYXJ5RG9tYWluTWluTXVsdCAqIGNhbGNSYW5nZU11bHQ7XG4gICAgbGV0IHNlY29uZGFyeURvbWFpbk1heCA9IHNlY29uZGFyeURvbWFpbk1heE11bHQgKiBjYWxjUmFuZ2VNdWx0O1xuICAgIC8vSWYgdGhlIGRhdGEgaXMgbG9wc2lkZWQgZW5vdWdoLCBpdCdzIHBvc3NpYmxlIHRoYXQgb25lIG9mIHBvc2l0aXZlL25lZ2F0aXZlIGhhdmUgdmFsdWVzLCBidXQgbm8gdGlja3NcbiAgICBpZiAoc2Vjb25kYXJ5RG9tYWluTWluID09PSAwICYmIGVmZmVjdGl2ZVByaW1hcnlNaW4gPCAwKSB7XG4gICAgICBjb25zdCBwb3NTZWNSYXRpbyA9IHNlY29uZGFyeURvbWFpbk1heCAvIGVmZmVjdGl2ZVByaW1hcnlNYXg7XG4gICAgICBzZWNvbmRhcnlEb21haW5NaW4gPSBwb3NTZWNSYXRpbyAqIGVmZmVjdGl2ZVByaW1hcnlNaW47XG4gICAgfVxuICAgIGlmIChzZWNvbmRhcnlEb21haW5NYXggPT09IDAgJiYgZWZmZWN0aXZlUHJpbWFyeU1heCA+IDApIHtcbiAgICAgIGNvbnN0IHBvc1NlY1JhdGlvID0gc2Vjb25kYXJ5RG9tYWluTWluIC8gZWZmZWN0aXZlUHJpbWFyeU1pbjtcbiAgICAgIHNlY29uZGFyeURvbWFpbk1heCA9IHBvc1NlY1JhdGlvICogZWZmZWN0aXZlUHJpbWFyeU1heDtcbiAgICB9XG4gICAgY29uc3QgeVNjYWxlU2Vjb25kYXJ5ID0gc2NhbGVMaW5lYXIoXG4gICAgICBbc2Vjb25kYXJ5RG9tYWluTWluLCBzZWNvbmRhcnlEb21haW5NYXhdLFxuICAgICAgc2NhbGVSYW5nZSxcbiAgICApO1xuXG4gICAgY29uc3QgdGlja3M6IEdlbmVyaWNUaWNrW10gPSBwcmltYXJ5VGlja3MubWFwKHRpY2sgPT4gKHtcbiAgICAgIC4uLnRpY2ssXG4gICAgICBzZWNvbmRhcnlMYWJlbDogcGlwZVRyYW5zZm9ybShcbiAgICAgICAgeVNjYWxlU2Vjb25kYXJ5LmludmVydCh5U2NhbGUodGljay5yYXdZKSksXG4gICAgICAgIHRydWUsXG4gICAgICApLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHNjYWxlID0gKGlucHV0OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkKTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChpc1NlY29uZGFyeSkge1xuICAgICAgICByZXR1cm4geVNjYWxlU2Vjb25kYXJ5KGlucHV0KSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHlTY2FsZShpbnB1dCkgKyBzdGFydE9mZnNldDtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBzY2FsZSxcbiAgICAgIHRpY2tzLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjRGF0YVNjYWxpbmdWYWx1ZXMoZGF0YTogUHJvY2Vzc0RhdGEsIGNvbmZpZzogQ29uZmlnKSB7XG4gICAgY29uc3QgaXNTdGFja2VkID0gaXNTdGFja2VkRGF0YShjb25maWcpO1xuICAgIGNvbnN0IHByaW1hcnlEb21haW5WYWx1ZXMgPSBjYWxjWVNjYWxlRG9tYWluVmFsdWVzKGRhdGEsIGlzU3RhY2tlZCwgZmFsc2UpO1xuICAgIGNvbnN0IHNlY29uZGFyeURvbWFpblZhbHVlcyA9IGNhbGNZU2NhbGVEb21haW5WYWx1ZXMoZGF0YSwgaXNTdGFja2VkLCB0cnVlKTtcbiAgICBjb25zdCBwcmltYXJ5RGF0YU1heCA9IE1hdGgubWF4KC4uLnByaW1hcnlEb21haW5WYWx1ZXMubWFwKHZhbCA9PiB2YWwubWF4KSk7XG4gICAgY29uc3Qgc2Vjb25kYXJ5RGF0YU1heCA9IE1hdGgubWF4KFxuICAgICAgLi4uc2Vjb25kYXJ5RG9tYWluVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm1heCksXG4gICAgKTtcbiAgICBjb25zdCBwcmltYXJ5RGF0YU1pbiA9IE1hdGgubWluKC4uLnByaW1hcnlEb21haW5WYWx1ZXMubWFwKHZhbCA9PiB2YWwubWluKSk7XG4gICAgY29uc3Qgc2Vjb25kYXJ5RGF0YU1pbiA9IE1hdGgubWluKFxuICAgICAgLi4uc2Vjb25kYXJ5RG9tYWluVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm1pbiksXG4gICAgKTtcbiAgICBsZXQgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCA9IDE7XG4gICAgbGV0IHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcgPSAxO1xuXG4gICAgLy9DYWxjdWxhdGluZyBob3cgbXVjaCB3ZSBuZWVkIHRvIG11bHRpcGxlIHRoZSBkb21haW4gYnkgdG8gJ2ZpdCcgYm90aCBheGVzJyBkYXRhXG4gICAgaWYgKGlzU3RhY2tlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmltYXJ5RG9tYWluVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vQ2hlY2sgcG9zaXRpdmUgbWF4XG4gICAgICAgIGNvbnN0IHByaW1hcnlWYWwgPSBwcmltYXJ5RG9tYWluVmFsdWVzW2ldLm1heDtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VmFsID0gc2Vjb25kYXJ5RG9tYWluVmFsdWVzW2ldLm1heDtcbiAgICAgICAgY29uc3QgcHJpbWFyeVJhdGlvID1cbiAgICAgICAgICBwcmltYXJ5RGF0YU1heCAhPT0gMCA/IHByaW1hcnlWYWwgLyBwcmltYXJ5RGF0YU1heCA6IDA7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVJhdGlvID1cbiAgICAgICAgICBzZWNvbmRhcnlEYXRhTWF4ICE9PSAwID8gc2Vjb25kYXJ5VmFsIC8gc2Vjb25kYXJ5RGF0YU1heCA6IDA7XG4gICAgICAgIGNvbnN0IG11bHRWYWwgPSBwcmltYXJ5UmF0aW8gKyBzZWNvbmRhcnlSYXRpbztcbiAgICAgICAgaWYgKG11bHRWYWwgPiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4KSB7XG4gICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCA9IG11bHRWYWw7XG4gICAgICAgIH1cblxuICAgICAgICAvL0NoZWNrIG5lZ2F0aXZlIG1pblxuICAgICAgICBjb25zdCBwcmltYXJ5TmVnVmFsID1cbiAgICAgICAgICBwcmltYXJ5RG9tYWluVmFsdWVzW2ldLm1pbiA8IDAgPyBwcmltYXJ5RG9tYWluVmFsdWVzW2ldLm1pbiA6IDA7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeU5lZ1ZhbCA9XG4gICAgICAgICAgc2Vjb25kYXJ5RG9tYWluVmFsdWVzW2ldLm1pbiA8IDAgPyBzZWNvbmRhcnlEb21haW5WYWx1ZXNbaV0ubWluIDogMDtcbiAgICAgICAgY29uc3QgcHJpbWFyeU5lZ1JhdGlvID1cbiAgICAgICAgICBwcmltYXJ5RGF0YU1pbiAhPT0gMCA/IHByaW1hcnlOZWdWYWwgLyBwcmltYXJ5RGF0YU1pbiA6IDA7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeU5lZ1JhdGlvID1cbiAgICAgICAgICBzZWNvbmRhcnlEYXRhTWluICE9PSAwID8gc2Vjb25kYXJ5TmVnVmFsIC8gc2Vjb25kYXJ5RGF0YU1pbiA6IDA7XG4gICAgICAgIGNvbnN0IG5lZ011bHRWYWwgPSBwcmltYXJ5TmVnUmF0aW8gKyBzZWNvbmRhcnlOZWdSYXRpbztcbiAgICAgICAgaWYgKG5lZ011bHRWYWwgPiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnKSB7XG4gICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZyA9IG5lZ011bHRWYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJpbWFyeURhdGFNaW4sXG4gICAgICBwcmltYXJ5RGF0YU1heCxcbiAgICAgIHNlY29uZGFyeURhdGFNaW4sXG4gICAgICBzZWNvbmRhcnlEYXRhTWF4LFxuICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGNZU2NhbGVEb21haW5WYWx1ZXMoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgaXNTdGFja2VkOiBib29sZWFuLFxuICAgIGZvclNlY29uZGFyeTogYm9vbGVhbixcbiAgKTogeyBtYXg6IG51bWJlcjsgbWluOiBudW1iZXIgfVtdIHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICBpZiAoZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgIC8vRmxvdyBjaGFydHMgZG9uJ3Qgc3VwcG9ydCBzZWNvbmRhcnkgZGF0YVxuICAgICAgICByZXR1cm4gW3sgbWluOiAwLCBtYXg6IDAgfV07XG4gICAgICB9XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogTWF0aC5tYXgoLi4uZGF0YS54Lm1hcCh4ID0+IHgudG90YWxDb3VudCkpLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgY29uc3QgcG9zc2libHlTdGFja2VkWXMgPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAvL0hhbmRsZSBzdGFja2luZ1xuICAgICAgcmV0dXJuIGlzU3RhY2tlZFxuICAgICAgICA/IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcmV2UnVubmluZ1RvdGFsID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHlJID0gMDsgeUkgPCB5SW5kZXg7IHlJKyspIHtcbiAgICAgICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUksIHhJbmRleCwgZmFsc2UpICE9PSBmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhZGRWYWwgPSBkYXRhLnlzW3lJXS52YWx1ZXNbeEluZGV4XTtcbiAgICAgICAgICAgICAgLy9Pbmx5IHN0YWNrIHZhbHVlcyBvZiB0aGUgc2FtZSBzaWduXG4gICAgICAgICAgICAgIGlmIChhZGRWYWwgPCAwID09PSB2YWwgPCAwKSB7XG4gICAgICAgICAgICAgICAgcHJldlJ1bm5pbmdUb3RhbCArPSBhZGRWYWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWwgKyBwcmV2UnVubmluZ1RvdGFsO1xuICAgICAgICAgIH0pXG4gICAgICAgIDogeS52YWx1ZXM7XG4gICAgfSk7XG4gICAgY29uc3Qgc3VwcFlzID0gaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgPyBkYXRhLnN1cHBsZW1lbnRhcnlZcyA6IG51bGw7XG4gICAgbGV0IHBvc3NpYmx5U3RhY2tlZFN1cFlzOiBudW1iZXJbXVtdID0gW107XG4gICAgaWYgKHN1cHBZcykge1xuICAgICAgcG9zc2libHlTdGFja2VkU3VwWXMgPSBzdXBwWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgLy9IYW5kbGUgc3RhY2tpbmdcbiAgICAgICAgcmV0dXJuIGlzU3RhY2tlZFxuICAgICAgICAgID8geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgcHJldlJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgICAgICAgICAgIGZvciAobGV0IHlJID0gMDsgeUkgPCB5SW5kZXg7IHlJKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJLCB4SW5kZXgsIHRydWUpICE9PSBmb3JTZWNvbmRhcnkgfHxcbiAgICAgICAgICAgICAgICAgIHN1cHBZc1t5SV0uc3VwcGxlbWVudGFsSW5kZXggIT09IHkuc3VwcGxlbWVudGFsSW5kZXhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhZGRWYWwgPSBzdXBwWXNbeUldLnZhbHVlc1t4SW5kZXhdO1xuICAgICAgICAgICAgICAgIC8vT25seSBzdGFjayB2YWx1ZXMgb2YgdGhlIHNhbWUgc2lnblxuICAgICAgICAgICAgICAgIGlmIChhZGRWYWwgPCAwID09PSB2YWwgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBwcmV2UnVubmluZ1RvdGFsICs9IGFkZFZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHZhbCArIHByZXZSdW5uaW5nVG90YWw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogeS52YWx1ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZVJhbmdlOiB7IG1heDogbnVtYmVyOyBtaW46IG51bWJlciB9W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWF4Tm9ybVkgPSBNYXRoLm1heChcbiAgICAgICAgLi4ucG9zc2libHlTdGFja2VkWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIGksIGZhbHNlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHlbaV07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1pbk5vcm1ZID0gTWF0aC5taW4oXG4gICAgICAgIC4uLnBvc3NpYmx5U3RhY2tlZFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCBpLCBmYWxzZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB5W2ldO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtYXhTdXBZID0gc3VwcFlzXG4gICAgICAgID8gTWF0aC5tYXgoXG4gICAgICAgICAgICAuLi5wb3NzaWJseVN0YWNrZWRTdXBZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIGksIHRydWUpICE9PSBmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4geVtpXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgOiAwO1xuICAgICAgY29uc3QgbWluU3VwWSA9IHN1cHBZc1xuICAgICAgICA/IE1hdGgubWluKFxuICAgICAgICAgICAgLi4ucG9zc2libHlTdGFja2VkU3VwWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCBpLCB0cnVlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHlbaV07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgIDogMDtcbiAgICAgIGNvbnN0IG1heCA9XG4gICAgICAgIG1heE5vcm1ZID4gMCAmJiBtYXhOb3JtWSA+IG1heFN1cFlcbiAgICAgICAgICA/IG1heE5vcm1ZXG4gICAgICAgICAgOiBtYXhTdXBZID4gMFxuICAgICAgICAgID8gbWF4U3VwWVxuICAgICAgICAgIDogMDtcbiAgICAgIGNvbnN0IG1pbiA9XG4gICAgICAgIG1pbk5vcm1ZIDwgMCAmJiBtaW5Ob3JtWSA8IG1pblN1cFlcbiAgICAgICAgICA/IG1pbk5vcm1ZXG4gICAgICAgICAgOiBtaW5TdXBZIDwgMFxuICAgICAgICAgID8gbWluU3VwWVxuICAgICAgICAgIDogMDtcbiAgICAgIHNjYWxlUmFuZ2UucHVzaCh7IG1heCwgbWluIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGVSYW5nZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBidWNrZXROdW06IG51bWJlcixcbiAgICBjbHVzdGVyTnVtOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldFxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0O1xuICAgIGNvbnN0IGNsdXN0ZXJPZmZzZXQgPVxuICAgICAgY2x1c3Rlck51bSAqXG4gICAgICAoY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJhckNsdXN0ZXJHYXApO1xuICAgIGNvbnN0IGN1bXVsYXRpdmVCdWNrZXRHYXAgPSBnZXRUb3RhbFByZUJ1Y2tldEdhcChcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIGJ1Y2tldE51bSxcbiAgICApO1xuICAgIHJldHVybiBvZmZzZXQgKyBjdW11bGF0aXZlQnVja2V0R2FwICsgY2x1c3Rlck9mZnNldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZUhvcml6b250YWxCYXJQYXRoKFxuICAgIGxlZnRTaWRlUm91bmQ6IGJvb2xlYW4sXG4gICAgcmlnaHRTaWRlUm91bmQ6IGJvb2xlYW4sXG4gICAgeFZhbHVlOiBudW1iZXIsXG4gICAgeVZhbHVlOiBudW1iZXIsXG4gICAgaG9yUjogbnVtYmVyLFxuICAgIHZlclI6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB3aWR0aDogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGlmIChsZWZ0U2lkZVJvdW5kICYmIHJpZ2h0U2lkZVJvdW5kKSB7XG4gICAgICAvL0JvdGgtc2lkZXMgcm91bmRpbmcgdmFyaWF0aW9uXG4gICAgICBjb25zdCBwYXRoRCA9IGBcbiAgICAgICAgTSAke3hWYWx1ZSArIGhvclJ9LCR7eVZhbHVlfVxuICAgICAgICBoICR7d2lkdGggLSBob3JSICogMn1cbiAgICAgICAgcSR7aG9yUn0sMCAke2hvclJ9LCR7dmVyUn1cbiAgICAgICAgdiAke2hlaWdodCAtIHZlclIgKiAyfVxuICAgICAgICBxMCwke3ZlclJ9IC0ke2hvclJ9LCR7dmVyUn1cbiAgICAgICAgaCAkey0od2lkdGggLSBob3JSICogMil9XG4gICAgICAgIHEtJHtob3JSfSwwIC0ke2hvclJ9LC0ke3ZlclJ9XG4gICAgICAgIHYgLSR7aGVpZ2h0IC0gdmVyUiAqIDJ9XG4gICAgICAgIHEwLC0ke3ZlclJ9ICR7aG9yUn0sLSR7dmVyUn1cbiAgICAgICAgWlxuICAgICAgYDtcbiAgICAgIHJldHVybiBwYXRoRDtcbiAgICB9XG4gICAgaWYgKGxlZnRTaWRlUm91bmQpIHtcbiAgICAgIC8vTGVmdC1zaWRlIHJvdW5kaW5nIHZhcmlhdGlvblxuICAgICAgY29uc3QgcGF0aEQgPSBgXG4gICAgICAgIE0gJHt4VmFsdWUgKyBob3JSfSwke3lWYWx1ZX1cbiAgICAgICAgaCAke3dpZHRoIC0gaG9yUn1cbiAgICAgICAgdiAke2hlaWdodH1cbiAgICAgICAgaCAkey0od2lkdGggLSBob3JSKX1cbiAgICAgICAgcS0ke2hvclJ9LDAgLSR7aG9yUn0sLSR7dmVyUn1cbiAgICAgICAgdiAtJHtoZWlnaHQgLSB2ZXJSICogMn1cbiAgICAgICAgcTAsLSR7dmVyUn0gJHtob3JSfSwtJHt2ZXJSfVxuICAgICAgICBaXG4gICAgICBgO1xuICAgICAgcmV0dXJuIHBhdGhEO1xuICAgIH1cbiAgICBpZiAocmlnaHRTaWRlUm91bmQpIHtcbiAgICAgIC8vUmlnaHQtc2lkZSByb3VuZGluZyB2YXJpYXRpb25cbiAgICAgIGNvbnN0IHBhdGhEID0gYFxuICAgICAgICBNICR7eFZhbHVlfSwke3lWYWx1ZX1cbiAgICAgICAgaCAke3dpZHRoIC0gaG9yUn1cbiAgICAgICAgcSR7aG9yUn0sMCAke2hvclJ9LCR7dmVyUn1cbiAgICAgICAgdiAke2hlaWdodCAtIHZlclIgKiAyfVxuICAgICAgICBxMCwke3ZlclJ9IC0ke2hvclJ9LCR7dmVyUn1cbiAgICAgICAgaCAkey0od2lkdGggLSBob3JSKX1cbiAgICAgICAgWlxuICAgICAgYDtcbiAgICAgIHJldHVybiBwYXRoRDtcbiAgICB9XG4gICAgLy9Oby1yb3VuZGluZyB2YXJpYXRpb25cbiAgICBjb25zdCBwYXRoRCA9IGBcbiAgICAgIE0gJHt4VmFsdWV9LCR7eVZhbHVlfVxuICAgICAgaCAke3dpZHRofVxuICAgICAgdiAke2hlaWdodH1cbiAgICAgIGggJHstd2lkdGh9XG4gICAgICB2IC0ke2hlaWdodH1cbiAgICAgIFpcbiAgICBgO1xuICAgIHJldHVybiBwYXRoRDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICBwb3M6IG51bWJlcixcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYnVja2V0Q291bnQ6IG51bWJlcixcbiAgKToge1xuICAgIGJ1Y2tldE51bTogbnVtYmVyO1xuICAgIGNsdXN0ZXJOdW06IG51bWJlcjtcbiAgICBjbHVzdGVyTm9ybUNvdW50OiBudW1iZXI7XG4gICAgY2x1c3Rlck51bVR5cGU6ICdub3JtJyB8ICdzdXBwJztcbiAgfSB8IG51bGwge1xuICAgIGxldCBidWNrZXRMZWV3YXkgPSBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXAgLyA0O1xuICAgIC8vaWYgdGhlcmUncyBvbmx5IDEgZGF0YSBwb2ludCwgdXNlIHRoZSBvdXRlckdhcCBhcyBsZWV3YXkgaW5zdGVhZFxuICAgIGlmIChkYXRhLngubGVuZ3RoID09PSAxKSB7XG4gICAgICBidWNrZXRMZWV3YXkgPSBjaGFydFNpemluZ1ZhbHVlcy5vdXRlckdhcCAvIDQ7XG4gICAgfVxuICAgIGNvbnN0IGJhckxlZXdheSA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJhckNsdXN0ZXJHYXAgLyAyO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldFxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0O1xuICAgIGNvbnN0IHJlbGF0aXZlUG9zID0gcG9zIC0gb2Zmc2V0O1xuICAgIGxldCBidWNrZXROdW0gPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Y2tldENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGJ1Y2tldFN0YXJ0UG9zID0gZ2V0VG90YWxQcmVCdWNrZXRHYXAoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGksXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBidWNrZXRTdGFydFBvcyAtIGJ1Y2tldExlZXdheSA8IHJlbGF0aXZlUG9zICYmXG4gICAgICAgIGJ1Y2tldFN0YXJ0UG9zICtcbiAgICAgICAgICBnZXRCdWNrZXRTaXplKGRhdGEsIGNvbmZpZywgY2hhcnRTaXppbmdWYWx1ZXMpICtcbiAgICAgICAgICBidWNrZXRMZWV3YXkgPlxuICAgICAgICAgIHJlbGF0aXZlUG9zXG4gICAgICApIHtcbiAgICAgICAgYnVja2V0TnVtID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChidWNrZXROdW0gPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCFpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYnVja2V0TnVtLFxuICAgICAgICBjbHVzdGVyTnVtOiAwLFxuICAgICAgICBjbHVzdGVyTm9ybUNvdW50OiAxLFxuICAgICAgICBjbHVzdGVyTnVtVHlwZTogJ25vcm0nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGl2ZUJ1Y2tldFBvcyA9XG4gICAgICByZWxhdGl2ZVBvcyAtXG4gICAgICBnZXRUb3RhbFByZUJ1Y2tldEdhcChkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzLCBidWNrZXROdW0pO1xuICAgIGNvbnN0IGNsdXN0ZXJDb3VudCA9IGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KGRhdGEsIGNvbmZpZyk7XG4gICAgbGV0IGNsdXN0ZXJOdW0gPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJDb3VudC50b3RhbDsgaSsrKSB7XG4gICAgICBjb25zdCBiYXJTdGFydFBvcyA9XG4gICAgICAgIChjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgY2hhcnRTaXppbmdWYWx1ZXMuYmFyQ2x1c3RlckdhcCkgKiBpO1xuICAgICAgaWYgKFxuICAgICAgICBiYXJTdGFydFBvcyAtIGJhckxlZXdheSA8IHJlbGF0aXZlQnVja2V0UG9zICYmXG4gICAgICAgIGJhclN0YXJ0UG9zICsgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGJhckxlZXdheSA+IHJlbGF0aXZlQnVja2V0UG9zXG4gICAgICApIHtcbiAgICAgICAgY2x1c3Rlck51bSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2x1c3Rlck51bSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgY2x1c3Rlck51bVR5cGU6ICdub3JtJyB8ICdzdXBwJyA9ICdub3JtJztcbiAgICBpZiAoY2x1c3Rlck51bSA+PSBjbHVzdGVyQ291bnQubm9ybUNvdW50KSB7XG4gICAgICBjbHVzdGVyTnVtVHlwZSA9ICdzdXBwJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0TnVtLFxuICAgICAgY2x1c3Rlck51bSxcbiAgICAgIGNsdXN0ZXJOb3JtQ291bnQ6IGNsdXN0ZXJDb3VudC5ub3JtQ291bnQsXG4gICAgICBjbHVzdGVyTnVtVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZE5lYXJlc3RJbmRleFdpdGhTZWNvbmRhcnkoXG4gICAgeUluZm86IHsgdmFsdWU6IG51bWJlcjsgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfVtdLFxuICAgIHlQb3M6IG51bWJlcixcbiAgICBzY2FsZTogKGlucHV0OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIsXG4gICkge1xuICAgIGxldCBmb3VuZEluZGV4ID0gMDtcbiAgICBsZXQgY3Vyck1pbkRpc3RhbmNlID0gTWF0aC5hYnMoXG4gICAgICBzY2FsZSh5SW5mb1swXS52YWx1ZSwgeUluZm9bMF0uaXNTZWNvbmRhcnkpIC0geVBvcyxcbiAgICApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgeUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5ld0Rpc3RhbmNlID0gTWF0aC5hYnMoXG4gICAgICAgIHNjYWxlKHlJbmZvW2ldLnZhbHVlLCB5SW5mb1tpXS5pc1NlY29uZGFyeSkgLSB5UG9zLFxuICAgICAgKTtcbiAgICAgIGlmIChuZXdEaXN0YW5jZSA8IGN1cnJNaW5EaXN0YW5jZSkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaTtcbiAgICAgICAgY3Vyck1pbkRpc3RhbmNlID0gbmV3RGlzdGFuY2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3VuZEluZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmFyWUluZm8oXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICAgIGlzU3VwcGxlbWVudGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICApOiB7IHlWYWx1ZTogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBjb25zdCBpc1N0YWNrZWQgPSBpc1N0YWNrZWREYXRhKGNvbmZpZyk7XG4gICAgY29uc3QgbWluaW11bVNpemUgPSBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZyk7XG4gICAgY29uc3QgemVyb1ZhbCA9IHNjYWxlKDAsIHRydWUpO1xuICAgIGNvbnN0IHlEYXRhID0gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgeUluZGV4LCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgIGNvbnN0IHNjYWxlVmFsdWUgPSBzY2FsZShcbiAgICAgIHlEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgaXNTdXBwbGVtZW50YXJ5KSxcbiAgICApO1xuICAgIGlmIChzY2FsZVZhbHVlID4gemVyb1ZhbCkge1xuICAgICAgbGV0IHByZXZCYXJIZWlnaHRzID0gMDtcbiAgICAgIGlmIChpc1N0YWNrZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5SW5kZXg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoZWNrRGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIGksIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgICAgICAgLy9Cb3RoIHlEYXRhIGFuZCBjaGVja0RhdGEgYXJlIGRlZmluaXRlbHkgU3VwcGxlbWVudGFyeURhdGFZcyBpZiBpc1N1cHBsZW1lbnRhcnkgaXMgdHJ1ZSwgYnV0IHRoZXkgZG9uJ3QgcmVhbGl6ZSBpdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzU3VwcGxlbWVudGFyeSAmJlxuICAgICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiB5RGF0YSAmJlxuICAgICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiBjaGVja0RhdGFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh5RGF0YS5zdXBwbGVtZW50YWxJbmRleCAhPT0gY2hlY2tEYXRhLnN1cHBsZW1lbnRhbEluZGV4KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gc2NhbGUoXG4gICAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIHhJbmRleCwgaXNTdXBwbGVtZW50YXJ5KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vU2tpcCBwb3NpdGl2ZSB2YWx1ZXNcbiAgICAgICAgICBpZiAoY2hlY2tWYWx1ZSA8IHplcm9WYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2QmFySGVpZ2h0cyArPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgICAgICBjaGVja1ZhbHVlIC0gemVyb1ZhbCxcbiAgICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHlWYWx1ZSA9IHplcm9WYWwgKyBwcmV2QmFySGVpZ2h0cztcbiAgICAgIGNvbnN0IGhlaWdodCA9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgc2NhbGVWYWx1ZSAtIHplcm9WYWwsXG4gICAgICAgIHlEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICk7XG4gICAgICByZXR1cm4geyB5VmFsdWUsIGhlaWdodCB9O1xuICAgIH1cbiAgICBsZXQgcHJldkJhckhlaWdodHMgPSAwO1xuICAgIGlmIChpc1N0YWNrZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeUluZGV4OyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hlY2tEYXRhID0gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgaSwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICAgICAgLy9Cb3RoIHlEYXRhIGFuZCBjaGVja0RhdGEgYXJlIGRlZmluaXRlbHkgU3VwcGxlbWVudGFyeURhdGFZcyBpZiBpc1N1cHBsZW1lbnRhcnkgaXMgdHJ1ZSwgYnV0IHRoZXkgZG9uJ3QgcmVhbGl6ZSBpdFxuICAgICAgICBpZiAoXG4gICAgICAgICAgaXNTdXBwbGVtZW50YXJ5ICYmXG4gICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiB5RGF0YSAmJlxuICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4gY2hlY2tEYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh5RGF0YS5zdXBwbGVtZW50YWxJbmRleCAhPT0gY2hlY2tEYXRhLnN1cHBsZW1lbnRhbEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tWYWx1ZSA9IHNjYWxlKFxuICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIHhJbmRleCwgaXNTdXBwbGVtZW50YXJ5KSxcbiAgICAgICAgKTtcbiAgICAgICAgLy9Ta2lwIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAgICBpZiAoY2hlY2tWYWx1ZSA+IHplcm9WYWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2QmFySGVpZ2h0cyArPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgICAgemVyb1ZhbCAtIGNoZWNrVmFsdWUsXG4gICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBoZWlnaHQgPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICB6ZXJvVmFsIC0gc2NhbGVWYWx1ZSxcbiAgICAgIHlEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgbWluaW11bVNpemUsXG4gICAgKTtcbiAgICBjb25zdCB5VmFsdWUgPSB6ZXJvVmFsIC0gaGVpZ2h0IC0gcHJldkJhckhlaWdodHM7XG4gICAgcmV0dXJuIHsgeVZhbHVlLCBoZWlnaHQgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN1cHBCYXJZSW5mb1ZpYVlJbmRleChcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICB5SW5kZXg6IG51bWJlcixcbiAgICBzdXBwSW5kZXg6IG51bWJlcixcbiAgICB4SW5kZXg6IG51bWJlcixcbiAgICBzY2FsZTogKGlucHV0OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIsXG4gICk6IHsgeVZhbHVlOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICAgIGlmICghaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkpIHtcbiAgICAgIHJldHVybiB7IHlWYWx1ZTogMCwgaGVpZ2h0OiAwIH07XG4gICAgfVxuICAgIGNvbnN0IHN1cHBZcyA9IGRhdGEuc3VwcGxlbWVudGFyeVlzO1xuICAgIC8vIEZpbmQgc3VwcGxlbWVudGFyeSBiYXJzIHdpdGggdGhlIGdpdmVuIHN1cHBsZW1lbnRhbEluZGV4XG4gICAgY29uc3QgZ3JvdXBTdXBwcyA9IHN1cHBZcy5maWx0ZXIocyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXgpO1xuICAgIC8vIHlJbmRleCByZWZlcnMgdG8gd2hpY2ggWSBzZXJpZXMgKHdpdGhpbiB0aGUgc3VwcGxlbWVudGFsIGdyb3VwKSB3ZSdyZSBsb29raW5nIGF0XG4gICAgaWYgKHlJbmRleCA+PSAwICYmIHlJbmRleCA8IGdyb3VwU3VwcHMubGVuZ3RoKSB7XG4gICAgICAvLyBGaW5kIHRoaXMgc3VwcCBpbiB0aGUgb3JpZ2luYWwgYXJyYXlcbiAgICAgIGNvbnN0IHN1cHBJbk9yaWdpbmFsQXJyYXkgPSBzdXBwWXMuaW5kZXhPZihncm91cFN1cHBzW3lJbmRleF0pO1xuICAgICAgcmV0dXJuIGdldEJhcllJbmZvKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHN1cHBJbk9yaWdpbmFsQXJyYXksXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4geyB5VmFsdWU6IDAsIGhlaWdodDogMCB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TWFpbk9yU3VwcFkoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgaXNTdXBwbGVtZW50YXJ5OiBib29sZWFuLFxuICApOiBEYXRhWSB8IFN1cHBsZW1lbnRhcnlEYXRhWSB7XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcGxlbWVudGFyeSkge1xuICAgICAgcmV0dXJuIGRhdGEuc3VwcGxlbWVudGFyeVlzW3lJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBkYXRhLnlzW3lJbmRleF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCYXJYSW5mbyhcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICB5SW5kZXg6IG51bWJlcixcbiAgICB4SW5kZXg6IG51bWJlcixcbiAgICBzY2FsZTogKGlucHV0OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIsXG4gICAgaXNTdXBwbGVtZW50YXJ5OiBib29sZWFuID0gZmFsc2UsXG4gICk6IHsgeFZhbHVlOiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfSB7XG4gICAgY29uc3QgaXNTdGFja2VkID0gaXNTdGFja2VkRGF0YShjb25maWcpO1xuICAgIGNvbnN0IG1pbmltdW1TaXplID0gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpO1xuICAgIGNvbnN0IHplcm9WYWwgPSBzY2FsZSgwLCB0cnVlKTtcbiAgICBjb25zdCB5RGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIHlJbmRleCwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICBjb25zdCBzY2FsZVZhbHVlID0gc2NhbGUoXG4gICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgKTtcbiAgICBpZiAoc2NhbGVWYWx1ZSA8IHplcm9WYWwpIHtcbiAgICAgIGxldCBwcmV2QmFyV2lkdGhzID0gMDtcbiAgICAgIGlmIChpc1N0YWNrZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5SW5kZXg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoZWNrRGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIGksIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgICAgICAgLy9Cb3RoIHlEYXRhIGFuZCBjaGVja0RhdGEgYXJlIGRlZmluaXRlbHkgU3VwcGxlbWVudGFyeURhdGFZcyBpZiBpc1N1cHBsZW1lbnRhcnkgaXMgdHJ1ZSwgYnV0IHRoZXkgZG9uJ3QgcmVhbGl6ZSBpdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzU3VwcGxlbWVudGFyeSAmJlxuICAgICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiB5RGF0YSAmJlxuICAgICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiBjaGVja0RhdGFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh5RGF0YS5zdXBwbGVtZW50YWxJbmRleCAhPT0gY2hlY2tEYXRhLnN1cHBsZW1lbnRhbEluZGV4KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjaGVja1ZhbCA9IHNjYWxlKFxuICAgICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvL1NraXAgcG9zaXRpdmUgdmFsdWVzXG4gICAgICAgICAgaWYgKGNoZWNrVmFsID4gemVyb1ZhbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByZXZCYXJXaWR0aHMgKz0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgICAgemVyb1ZhbCAtIGNoZWNrVmFsLFxuICAgICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgd2lkdGggPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgIHplcm9WYWwgLSBzY2FsZVZhbHVlLFxuICAgICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgbWluaW11bVNpemUsXG4gICAgICApO1xuICAgICAgY29uc3QgeFZhbHVlID0gemVyb1ZhbCAtIHdpZHRoIC0gcHJldkJhcldpZHRocztcbiAgICAgIHJldHVybiB7IHhWYWx1ZSwgd2lkdGggfTtcbiAgICB9XG4gICAgbGV0IHByZXZCYXJXaWR0aHMgPSAwO1xuICAgIGlmIChpc1N0YWNrZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeUluZGV4OyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hlY2tEYXRhID0gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgaSwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICAgICAgLy9Cb3RoIHlEYXRhIGFuZCBjaGVja0RhdGEgYXJlIGRlZmluaXRlbHkgU3VwcGxlbWVudGFyeURhdGFZcyBpZiBpc1N1cHBsZW1lbnRhcnkgaXMgdHJ1ZSwgYnV0IHRoZXkgZG9uJ3QgcmVhbGl6ZSBpdFxuICAgICAgICBpZiAoXG4gICAgICAgICAgaXNTdXBwbGVtZW50YXJ5ICYmXG4gICAgICAgICAgJ3N1cHBsZW1lbnRhbEluZGV4JyBpbiB5RGF0YSAmJlxuICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4gY2hlY2tEYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh5RGF0YS5zdXBwbGVtZW50YWxJbmRleCAhPT0gY2hlY2tEYXRhLnN1cHBsZW1lbnRhbEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tWYWwgPSBzY2FsZShcbiAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgICAgICk7XG4gICAgICAgIC8vU2tpcCBuZWdhdGl2ZSB2YWx1ZXNcbiAgICAgICAgaWYgKGNoZWNrVmFsIDwgemVyb1ZhbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHByZXZCYXJXaWR0aHMgKz0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgIGNoZWNrVmFsIC0gemVyb1ZhbCxcbiAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhWYWx1ZSA9IHByZXZCYXJXaWR0aHMgKyB6ZXJvVmFsO1xuICAgIGNvbnN0IHdpZHRoID0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgc2NhbGVWYWx1ZSAtIHplcm9WYWwsXG4gICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgIG1pbmltdW1TaXplLFxuICAgICk7XG4gICAgcmV0dXJuIHsgeFZhbHVlLCB3aWR0aCB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tJZlNlY29uZGFyeShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICB5SW5kZXg6IG51bWJlcixcbiAgICB4SW5kZXg6IG51bWJlcixcbiAgICBpc1N1cHBsZW1lbnRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICBpZiAoZGF0YS54W3hJbmRleF0uaXNTZWNvbmRhcnkgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXRNYWluT3JTdXBwWShkYXRhLCB5SW5kZXgsIGlzU3VwcGxlbWVudGFyeSkuaXNTZWNvbmRhcnkgPT09IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiB3YXJuVW5zdXBwb3J0ZWRQYXR0ZXJucyhcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBzdXBwb3J0ZWRQYXR0ZXJuczogUGF0dGVybltdLFxuICAgIGNoYXJ0VHlwZTogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhbGxZczogRGF0YVlbXSA9IFtcbiAgICAgIC4uLmRhdGEueXMsXG4gICAgICAuLi4oaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgPyBkYXRhLnN1cHBsZW1lbnRhcnlZcyA6IFtdKSxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgeSBvZiBhbGxZcykge1xuICAgICAgaWYgKFxuICAgICAgICB5LnBhdHRlcm4gJiZcbiAgICAgICAgeS5wYXR0ZXJuICE9PSAnc29saWQnICYmXG4gICAgICAgICFzdXBwb3J0ZWRQYXR0ZXJucy5pbmNsdWRlcyh5LnBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBIZWFkcyB1cCEgVGhlICcke3kucGF0dGVybn0nIHBhdHRlcm4gaXNuJ3Qgc3VwcG9ydGVkIGZvciAke2NoYXJ0VHlwZX0gY2hhcnRzLiBGYWxsaW5nIGJhY2sgdG8gc29saWQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3YXJuRmxvd0RhdGEoXG4gICAgZGF0YTogSW5wdXREYXRhLFxuICAgIGNoYXJ0VHlwZTogc3RyaW5nLFxuICApOiBkYXRhIGlzIE5vbkZsb3dEYXRhIHtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnZmxvdycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBIZWFkcyB1cCEgVGhlICdmbG93JyBkYXRhIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkIGZvciAke2NoYXJ0VHlwZX0gY2hhcnRzLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGhpZGUgc3RyaXBzIG91dCBoaWRkZW4geSB2YWx1ZXMgd2hpbGUgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCBpbmRpY2VzXG4gIC8vIGZvciB0aGUgcmVtYWluaW5nIHZpc2libGUgdmFsdWVzXG4gIGZ1bmN0aW9uIGhpZGUoZGF0YTogTm9uRmxvd0RhdGEpOiB7XG4gICAgZGF0YTogTm9uRmxvd0RhdGE7XG4gICAgdmlzaWJsZUluZGljZXM6IG51bWJlcltdO1xuICAgIHZpc2libGVTdXBwSW5kaWNlczogbnVtYmVyW107XG4gIH0ge1xuICAgIGNvbnN0IHZpc2libGVJbmRpY2VzID0gZGF0YS55c1xuICAgICAgLm1hcCgoeSwgaSkgPT4gKHsgeSwgaSB9KSlcbiAgICAgIC5maWx0ZXIoKHsgeSB9KSA9PiAheS5oaWRkZW4pXG4gICAgICAubWFwKCh7IGkgfSkgPT4gaSk7XG4gICAgY29uc3QgdmlzaWJsZVN1cHBJbmRpY2VzID0gaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSlcbiAgICAgID8gZGF0YS5zdXBwbGVtZW50YXJ5WXNcbiAgICAgICAgICAubWFwKCh5LCBpKSA9PiAoeyB5LCBpIH0pKVxuICAgICAgICAgIC5maWx0ZXIoKHsgeSB9KSA9PiAheS5oaWRkZW4pXG4gICAgICAgICAgLm1hcCgoeyBpIH0pID0+IGkpXG4gICAgICA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHlzOiB2aXNpYmxlSW5kaWNlcy5tYXAoaSA9PiBkYXRhLnlzW2ldKSxcbiAgICAgICAgc3VwcGxlbWVudGFyeVlzOiB2aXNpYmxlU3VwcEluZGljZXMubWFwKGkgPT4gZGF0YS5zdXBwbGVtZW50YXJ5WXMhW2ldKSxcbiAgICAgIH0sXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICAgIHZpc2libGVTdXBwSW5kaWNlcyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd2F0ZXJmYWxsVHJhbnNmb3JtKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGlzV2F0ZXJmYWxsOiBib29sZWFuLFxuICApOiB7IGRhdGE6IExhYmVsZWREYXRhOyBtYXA6IE1hcDxEYXRhWSwgRGF0YVk+IH0ge1xuICAgIGNvbnN0IHdhdGVyZmFsbE1hcCA9IG5ldyBNYXA8RGF0YVksIERhdGFZPigpO1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICd0aW1lc2VyaWVzJyB8fCAhaXNXYXRlcmZhbGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB0eXBlOiAnbGFiZWxlZCcsXG4gICAgICAgICAgeDogW10sXG4gICAgICAgICAgeXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgICBtYXA6IHdhdGVyZmFsbE1hcCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5ld0RhdGE6IExhYmVsZWREYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHg6IFsuLi5kYXRhLngsIHsgbGFiZWw6ICdUb3RhbCcgfV0sXG4gICAgICB5czogW1xuICAgICAgICAuLi5kYXRhLnlzLm1hcCh5ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdZOiBEYXRhWSA9IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi55LnZhbHVlcywgeS52YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCldLFxuICAgICAgICAgIH07XG4gICAgICAgICAgd2F0ZXJmYWxsTWFwLnNldChuZXdZLCB5KTtcbiAgICAgICAgICByZXR1cm4gbmV3WTtcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG5ld0RhdGEsXG4gICAgICBtYXA6IHdhdGVyZmFsbE1hcCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmxvd3NUcmFuc2Zvcm0oXG4gICAgY29uZmlnOiBGbG93Q29uZmlnLFxuICAgIGRhdGE6IEZsb3dEYXRhLFxuICApOiBQcm9jZXNzZWRGbG93RGF0YSB7XG4gICAgY29uc3QgcmV0dXJuQnVja2V0czogRmxvd0J1Y2tldFtdID0gW107XG4gICAgY29uc3QgbWF4UGF0aExlbmd0aCA9IE1hdGgubWF4KC4uLmRhdGEueXMubWFwKHkgPT4geS5zdGVwcy5sZW5ndGgpKTtcbiAgICBpZiAobWF4UGF0aExlbmd0aCA+IDAgJiYgbWF4UGF0aExlbmd0aCA8IEluZmluaXR5KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFBhdGhMZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBmbG93QnVja2V0OiBGbG93QnVja2V0ID0ge1xuICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgc3ViQnVja2V0czogW10sXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgeSBvZiBkYXRhLnlzKSB7XG4gICAgICAgICAgaWYgKHkudmFsdWVzLmxlbmd0aCA+IGkgJiYgeS5zdGVwcy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJCdWNrZXRJZCA9IHkuc3RlcHNbaV07XG4gICAgICAgICAgICBjb25zdCBmb3VuZFN1YkJ1Y2tldCA9IGZsb3dCdWNrZXQuc3ViQnVja2V0cy5maW5kKFxuICAgICAgICAgICAgICBzdWJCdWNrZXQgPT4gc3ViQnVja2V0LmlkID09PSBzdWJCdWNrZXRJZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgc3ViQnVja2V0OiBGbG93U3ViQnVja2V0O1xuICAgICAgICAgICAgaWYgKGZvdW5kU3ViQnVja2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgc3ViQnVja2V0ID0gZm91bmRTdWJCdWNrZXQ7XG4gICAgICAgICAgICAgIHN1YkJ1Y2tldC5jb3VudCArPSB5LnZhbHVlc1tpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YkJ1Y2tldCA9IHtcbiAgICAgICAgICAgICAgICBpZDogc3ViQnVja2V0SWQsXG4gICAgICAgICAgICAgICAgY291bnQ6IHkudmFsdWVzW2ldLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZmxvd0J1Y2tldC5zdWJCdWNrZXRzLnB1c2goc3ViQnVja2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsb3dCdWNrZXQudG90YWxDb3VudCArPSB5LnZhbHVlc1tpXTtcblxuICAgICAgICAgICAgLy9GaWxsIGluIGJhY2t3YXJkcyBjb25uZWN0aW9uc1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kQ29ubmVjdGlvbiA9IHN1YkJ1Y2tldC5jb25uZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQgPT09IHkuc3RlcHNbaSAtIDFdICYmXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmVuZCA9PT0gc3ViQnVja2V0SWQgJiZcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZm91bmRDb25uZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZENvbm5lY3Rpb24uY291bnQgKz0geS52YWx1ZXNbaV07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29ubmVjdGlvbjogRmxvd0Nvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICAgICAgICBzdGFydDogeS5zdGVwc1tpIC0gMV0sXG4gICAgICAgICAgICAgICAgICBlbmQ6IHN1YkJ1Y2tldElkLFxuICAgICAgICAgICAgICAgICAgY291bnQ6IHkudmFsdWVzW2ldLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc3ViQnVja2V0LmNvbm5lY3Rpb25zLnB1c2gobmV3Q29ubmVjdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9GaWxsIGluIGZvcndhcmRzIGNvbm5lY3Rpb25zXG4gICAgICAgICAgICBpZiAoaSA8IHkuc3RlcHMubGVuZ3RoIC0gMSAmJiBpIDwgeS52YWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZENvbm5lY3Rpb24gPSBzdWJCdWNrZXQuY29ubmVjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0ID09PSBzdWJCdWNrZXRJZCAmJlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmQgPT09IHkuc3RlcHNbaSArIDFdICYmXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZm91bmRDb25uZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZENvbm5lY3Rpb24uY291bnQgKz0geS52YWx1ZXNbaSArIDFdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Nvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgICAgICAgICAgICBzdGFydDogc3ViQnVja2V0SWQsXG4gICAgICAgICAgICAgICAgICBlbmQ6IHkuc3RlcHNbaSArIDFdLFxuICAgICAgICAgICAgICAgICAgY291bnQ6IHkudmFsdWVzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHN1YkJ1Y2tldC5jb25uZWN0aW9ucy5wdXNoKG5ld0Nvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybkJ1Y2tldHMucHVzaChmbG93QnVja2V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWJCdWNrZXRPcmRlcmluZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdWJCdWNrZXRPcmRlcmluZ01hcC5zZXQoXG4gICAgICAgIGNvbmZpZy5mbG93Q29uZmlnLnN1YkJ1Y2tldHNDb25maWdbaV0uYnVja2V0SWQsXG4gICAgICAgIGksXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBtYXBHZXQgPSAoaWQ6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICBjb25zdCBmb3VuZFJlc3VsdCA9IHN1YkJ1Y2tldE9yZGVyaW5nTWFwLmdldChpZCk7XG4gICAgICBpZiAoZm91bmRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZm91bmRSZXN1bHQ7XG4gICAgICB9XG4gICAgICAvL0lmIHNvbWV0aGluZyBpc24ndCBkZWZpbmVkIGluIHRoZSBjb25maWcsIHB1dCBpdCBhdCB0aGUgZW5kXG4gICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfTtcblxuICAgIC8vRW5zdXJlIHRoZSBkYXRhIGlzIHNvcnRlZCB0aGUgc2FtZSB0aGUgd2F5IHRoZSBjb25maWcgaXMsIGFuZCBkcm9wIGVtcHR5XG4gICAgLy9iYXJzL2Nvbm5lY3Rpb25zIHNvIHRoZXkncmUgbmVpdGhlciBkaXNwbGF5ZWQgbm9yIGZhY3RvcmVkIGludG8gc2l6aW5nXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmbG93LXByb2Nlc3NlZCcsXG4gICAgICB4OiByZXR1cm5CdWNrZXRzLm1hcChidWNrZXQgPT4gKHtcbiAgICAgICAgLi4uYnVja2V0LFxuICAgICAgICBzdWJCdWNrZXRzOiBidWNrZXQuc3ViQnVja2V0c1xuICAgICAgICAgIC5maWx0ZXIoc3ViQnVja2V0ID0+IHN1YkJ1Y2tldC5jb3VudCAhPT0gMClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbWFwR2V0KGEuaWQpIC0gbWFwR2V0KGIuaWQpKVxuICAgICAgICAgIC5tYXAoc3ViQnVja2V0ID0+ICh7XG4gICAgICAgICAgICAuLi5zdWJCdWNrZXQsXG4gICAgICAgICAgICBjb25uZWN0aW9uczogc3ViQnVja2V0LmNvbm5lY3Rpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmNvdW50ICE9PSAwKVxuICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0U29ydCA9IG1hcEdldChhLnN0YXJ0KSAtIG1hcEdldChiLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RTb3J0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RTb3J0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwR2V0KGEuZW5kKSAtIG1hcEdldChiLmVuZCk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pKSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgdHlwZSBWYWx1ZVR5cGUgPSAnY291bnQnIHwgJ2N1cnJlbmN5JyB8ICdwZXJjZW50YWdlJyB8ICdkYXlzJztcblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UGlwZXModmFsdWVUeXBlOiBWYWx1ZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnY291bnQnOiB7XG4gICAgICAgIHJldHVybiB7IHBpcGU6IG5ldyBTbWFsbE51bWJlclBpcGUoKSwgZnVsbFBpcGU6IG5ldyBOdW1iZXJQaXBlKCkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwaXBlOiBuZXcgU21hbGxDdXJyZW5jeVBpcGUoKSxcbiAgICAgICAgICBmdWxsUGlwZTogbmV3IEN1cnJlbmN5UGlwZSgnZW4tdXMnKSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgUGVyY2VudGFnZVBpcGUoKTtcbiAgICAgICAgcmV0dXJuIHsgcGlwZSwgZnVsbFBpcGU6IHBpcGUgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RheXMnOiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgRGF5c1BpcGUoKTtcbiAgICAgICAgcmV0dXJuIHsgcGlwZSwgZnVsbFBpcGU6IHBpcGUgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBpbnRlcnZhbHMgPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheSddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBJbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWxzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBmb3JtYXRlZERhdGUoZGF0ZUZvcm1hdDogSW50ZXJ2YWwsIGRhdGU6IERhdGUpIHtcbiAgICBpZiAoZGF0ZUZvcm1hdCA9PT0gJ3F1YXJ0ZXInKSB7XG4gICAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgICAgY29uc3QgeWVhciA9IHV0Y0Zvcm1hdChnZXRUaW1lSW50ZXJ2YWxGb3JtYXQoJ3llYXInKSkoZGF0ZSk7XG4gICAgICByZXR1cm4gYFEke3F1YXJ0ZXJ9ICR7eWVhcn1gO1xuICAgIH1cbiAgICBjb25zdCBmb3JtYXQgPSBnZXRUaW1lSW50ZXJ2YWxGb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgcmV0dXJuIHV0Y0Zvcm1hdChmb3JtYXQpKGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGltZUludGVydmFsRm9ybWF0KGludGVydmFsOiBJbnRlcnZhbCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4gJyVtLyVkLyVZJztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICByZXR1cm4gJyViICVZJztcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4gJyVZJztcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY29udmVydENoYXJ0RGF0YVRvRG9udXREYXRhKFxuICAgIGNoYXJ0RGF0YTogTm9uRmxvd0RhdGEsXG4gICk6IERvbnV0RGF0YVtdIHtcbiAgICBpZiAoY2hhcnREYXRhLnlzLmZpbmQoeSA9PiB5LnZhbHVlcy5sZW5ndGggPiAxKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgUGllIGNoYXJ0cyBkb24ndCBzdXBwb3J0IG11bHRpcGxlIHZhbHVlcyBwZXIgc2VyaWVzXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRvbnV0RGF0YSA9IGNoYXJ0RGF0YS55cy5tYXAoeSA9PiAoe1xuICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICBoaWRkZW46IHkuaGlkZGVuLFxuICAgICAgdmFsdWU6IHkudmFsdWVzLmxlbmd0aCA+PSAxID8geS52YWx1ZXNbMF0gOiAwLFxuICAgICAgaXNTZWNvbmRhcnk6IHkuaXNTZWNvbmRhcnksXG4gICAgfSkpO1xuICAgIHJldHVybiBkb251dERhdGE7XG4gIH1cblxuICBmdW5jdGlvbiBhcmNUb1BvaW50KGFuZ2xlOiBudW1iZXIsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlIC0gTWF0aC5QSSAvIDIpLFxuICAgICAgeTogcmFkaXVzICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gMiksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvaW50VG9BcmMoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBjb25zdCByYWRpdXMgPSBNYXRoLmh5cG90KHgsIHkpO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoeSwgeCkgKyBNYXRoLlBJIC8gMjtcbiAgICAvL05vcm1hbGl6ZSB0byBiZSB3aXRoaW4gcmFuZ2UgWzAsIDLPgF1cbiAgICBhbmdsZSA9IChhbmdsZSArIDIgKiBNYXRoLlBJKSAlICgyICogTWF0aC5QSSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5nbGUsXG4gICAgICByYWRpdXMsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgcGlwZVRyYW5zZm9ybTogKCh2YWx1ZTogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbikgPT4gc3RyaW5nKSB8IG51bGwsXG4gICAgZGF0ZUZvcm1hdDogKChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgKTogRnVsbENoYXJ0U2NhbGVWYWx1ZXMgfCBudWxsIHtcbiAgICBjb25zdCBjaGFydERhdGFEaXJlY3Rpb24gPSBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnKTtcbiAgICBjb25zdCBkZWZhdWx0U2NhbGluZ0NvbmZpZyA9IGdldERlZmF1bHRTY2FsaW5nQ29uZmlnQnlDaGFydFR5cGUoXG4gICAgICBjb25maWcudHlwZSxcbiAgICAgIGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGUgIT09IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIGNvbnN0IHNjYWxpbmdDb25maWcgPSBjb21iaW5lU2NhbGluZ0luZm8oY29uZmlnLCBkZWZhdWx0U2NhbGluZ0NvbmZpZyk7XG4gICAgY29uc3Qgbm9uRGF0YUF4aXNWYWx1ZXMgPSBjYWxjdWxhdGVOb25EYXRhQXhpc1ZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIHNjYWxpbmdDb25maWcsXG4gICAgICBjb25maWcuc2NhbGluZ0NvbmZpZz8uZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTY2FsaW5nQ29uZmlnLmVsZW1lbnRTY2FsZXMsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIGNvbnN0IGRhdGFBeGlzVmFsdWVzID0gY2FsY3VsYXRlRGF0YUF4aXNWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBzY2FsaW5nQ29uZmlnLFxuICAgICAgY29uZmlnLnNjYWxpbmdDb25maWc/LmVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2NhbGluZ0NvbmZpZy5lbGVtZW50U2NhbGVzLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGRhdGEsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChcbiAgICAgIG5vbkRhdGFBeGlzVmFsdWVzLnNpemluZ0Vycm9yID09PSB0cnVlIHx8XG4gICAgICBkYXRhQXhpc1ZhbHVlcy5zaXppbmdFcnJvciA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFMYWJlbFN0YXJ0UGFkZGluZyA9XG4gICAgICBnZXREYXRhTGFiZWxTaXppbmdDb3VudChkYXRhLCBjb25maWcpLnN0YXJ0ICpcbiAgICAgIChkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nICsgZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemUpO1xuICAgIGNvbnN0IGRhdGFMYWJlbEVuZFBhZGRpbmcgPVxuICAgICAgZ2V0RGF0YUxhYmVsU2l6aW5nQ291bnQoZGF0YSwgY29uZmlnKS5lbmQgKlxuICAgICAgKGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgKyBkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubm9uRGF0YUF4aXNWYWx1ZXMsXG4gICAgICAuLi5kYXRhQXhpc1ZhbHVlcyxcbiAgICAgIGxlZnRQYWRkaW5nOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nXG4gICAgICAgICAgOiBub25EYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcsXG4gICAgICByaWdodFBhZGRpbmc6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nXG4gICAgICAgICAgOiBub25EYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nLFxuICAgICAgdG9wUGFkZGluZzpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IG5vbkRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZ1xuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nLFxuICAgICAgYm90dG9tUGFkZGluZzpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IG5vbkRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmdcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmcsXG4gICAgICB0b3RhbExlZnRPZmZzZXQ6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcgK1xuICAgICAgICAgICAgZGF0YUF4aXNWYWx1ZXMubGVmdEJ1Y2tldExhYmVsICtcbiAgICAgICAgICAgIGRhdGFMYWJlbFN0YXJ0UGFkZGluZ1xuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICsgbm9uRGF0YUF4aXNWYWx1ZXMub3V0ZXJHYXAsXG4gICAgICB0b3RhbFJpZ2h0T2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICsgZGF0YUxhYmVsRW5kUGFkZGluZ1xuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyArIG5vbkRhdGFBeGlzVmFsdWVzLm91dGVyR2FwLFxuICAgICAgdG90YWxUb3BPZmZzZXQ6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmcgKyBub25EYXRhQXhpc1ZhbHVlcy5vdXRlckdhcFxuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICsgZGF0YUxhYmVsU3RhcnRQYWRkaW5nLFxuICAgICAgdG90YWxCb3R0b21PZmZzZXQ6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nICsgbm9uRGF0YUF4aXNWYWx1ZXMub3V0ZXJHYXBcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmcgKyBkYXRhTGFiZWxFbmRQYWRkaW5nLFxuICAgICAgdGFyZ2V0VGlja0NvdW50OiBzY2FsaW5nQ29uZmlnLnRhcmdldFRpY2tDb3VudCxcbiAgICAgIHNpemVGb3JEYXRhOiBkYXRhQXhpc1ZhbHVlcy5zaXplRm9yRGF0YSxcbiAgICAgIHRvdGFsV2lkdGg6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy50b3RhbFNpemVcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLnRvdGFsU2l6ZSxcbiAgICAgIHRvdGFsSGVpZ2h0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMudG90YWxTaXplXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy50b3RhbFNpemUsXG4gICAgICBkYXRhTGFiZWxUZXh0U2l6ZTogY29uZmlnLnNob3dEYXRhTGFiZWxzXG4gICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemVcbiAgICAgICAgOiAwLFxuICAgICAgaG9yaXpvbnRhbEF4aXNMYWJlbFRleHRTaXplOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLmJ1Y2tldExhYmVsVGV4dFNpemVcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplLCAvL1RpY2tzIGFuZCBkYXRhIGxhYmVscyB1c2UgdGhlIHNhbWUgZm9ybWF0dGluZyBvbiB0aGUgc2FtZSBraW5kIG9mIGRhdGFcbiAgICAgIHZlcnRpY2FsQXhpc0xhYmVsVGV4dFNpemU6IGRhdGFBeGlzVmFsdWVzLmZvbnRTaXplLFxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBzY2FsaW5nQ29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IHNjYWxpbmdDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlTm9uRGF0YUF4aXNWYWx1ZXMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgc2NhbGluZ0NvbmZpZzogTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZWxlbWVudFNjYWxlczogUGFydGlhbEVsZW1lbnRTY2FsaW5nQ29uZmlnIHwgdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRTaXppbmc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICApOiB7XG4gICAgYmFyU2l6ZTogbnVtYmVyO1xuICAgIGJhckNsdXN0ZXJHYXA6IG51bWJlcjtcbiAgICBidWNrZXRHYXA6IG51bWJlcjtcbiAgICBvdXRlckdhcDogbnVtYmVyO1xuICAgIHN0YXJ0UGFkZGluZzogbnVtYmVyO1xuICAgIGVuZFBhZGRpbmc6IG51bWJlcjtcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcbiAgICBzaXppbmdFcnJvcj86IGJvb2xlYW47XG4gIH0ge1xuICAgIGNvbnN0IGNoYXJ0RGF0YURpcmVjdGlvbiA9IGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWcpO1xuICAgIGNvbnN0IGJvdW5kaW5nRGltZW5zaW9uID1cbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gZGltZW5zaW9ucy5oZWlnaHRcbiAgICAgICAgOiBkaW1lbnNpb25zLndpZHRoO1xuICAgIGNvbnN0IGF4aXNTY2FsZSA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHNjYWxpbmdDb25maWc/LnZlcnRpY2FsQXhpc1NjYWxlXG4gICAgICAgIDogc2NhbGluZ0NvbmZpZz8uaG9yaXpvbnRhbEF4aXNTY2FsZTtcblxuICAgIGNvbnN0IGJhclNpemVDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdiYXJTaXplJyxcbiAgICApO1xuICAgIGNvbnN0IGJhckNsdXN0ZXJHYXBDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdiYXJDbHVzdGVyR2FwJyxcbiAgICApO1xuICAgIGNvbnN0IGJ1Y2tldEdhcENvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ2J1Y2tldEdhcCcsXG4gICAgKTtcbiAgICBjb25zdCBvdXRlckdhcENvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ291dGVyR2FwJyxcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0UGFkZGluZ0NvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndG9wUGFkZGluZycgOiAnbGVmdFBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgZW5kUGFkZGluZ0NvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYm90dG9tUGFkZGluZycgOiAncmlnaHRQYWRkaW5nJyxcbiAgICApO1xuXG4gICAgY29uc3QgYnVja2V0Q291bnQgPSBkYXRhLngubGVuZ3RoO1xuICAgIGxldCBiYXJDb3VudCA9IDA7XG4gICAgbGV0IGJhckNsdXN0ZXJHYXBDb3VudCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXRDb3VudDsgaSsrKSB7XG4gICAgICBpZiAoZGF0YS50eXBlID09PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICAgIGJhckNvdW50ICs9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBidWNrZXRDbHVzdGVyQ291bnQgPSBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChkYXRhLCBjb25maWcpO1xuICAgICAgICBiYXJDb3VudCArPSBidWNrZXRDbHVzdGVyQ291bnQudG90YWw7XG4gICAgICAgIGJhckNsdXN0ZXJHYXBDb3VudCArPSBidWNrZXRDbHVzdGVyQ291bnQudG90YWwgLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidWNrZXRHYXBDb3VudCA9IGJ1Y2tldENvdW50IC0gMTtcblxuICAgIGNvbnN0IGJhclRvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBiYXJTaXplQ29uZmlnLFxuICAgICAgYmFyQ291bnQsXG4gICAgKTtcbiAgICBjb25zdCBjbHVzdGVyR2FwVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGJhckNsdXN0ZXJHYXBDb25maWcsXG4gICAgICBiYXJDbHVzdGVyR2FwQ291bnQsXG4gICAgKTtcbiAgICBjb25zdCBidWNrZXRHYXBUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgYnVja2V0R2FwQ29uZmlnLFxuICAgICAgYnVja2V0R2FwQ291bnQsXG4gICAgKTtcbiAgICBjb25zdCBvdXRlckdhcFRvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBvdXRlckdhcENvbmZpZyxcbiAgICAgIDIsXG4gICAgKTtcbiAgICBjb25zdCBzdGFydFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgc3RhcnRQYWRkaW5nQ29uZmlnLFxuICAgICAgMSxcbiAgICApO1xuICAgIGNvbnN0IGVuZFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgZW5kUGFkZGluZ0NvbmZpZyxcbiAgICAgIDEsXG4gICAgKTtcblxuICAgIGNvbnN0IGNhbGNUYXJnZXRTaXplID1cbiAgICAgIGJhclRvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgY2x1c3RlckdhcFRvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgYnVja2V0R2FwVG90YWxTaXplLnRhcmdldCArXG4gICAgICBvdXRlckdhcFRvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLnRhcmdldCArXG4gICAgICBlbmRQYWRkaW5nVG90YWxTaXplLnRhcmdldDtcblxuICAgIGlmIChcbiAgICAgIGF4aXNTY2FsZSA9PT0gJ25vLXNjYWxlJyB8fFxuICAgICAgY2FsY1RhcmdldFNpemUgPT09IGJvdW5kaW5nRGltZW5zaW9uIHx8XG4gICAgICAoYXhpc1NjYWxlID09PSAnZ3JvdycgJiYgY2FsY1RhcmdldFNpemUgPiBib3VuZGluZ0RpbWVuc2lvbikgfHxcbiAgICAgIChheGlzU2NhbGUgPT09ICdzaHJpbmsnICYmIGNhbGNUYXJnZXRTaXplIDwgYm91bmRpbmdEaW1lbnNpb24pXG4gICAgKSB7XG4gICAgICAvL05vIGVsZW1lbnQgc2NhbGluZyBuZWNlc3NhcnksIHJldHVybiBldmVyeXRoaW5nIGFzIGl0J3MgdGFyZ2V0IHZhbHVlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXJTaXplOiBiYXJTaXplQ29uZmlnLnRhcmdldCxcbiAgICAgICAgYmFyQ2x1c3RlckdhcDogYmFyQ2x1c3RlckdhcENvbmZpZy50YXJnZXQsXG4gICAgICAgIGJ1Y2tldEdhcDogYnVja2V0R2FwQ29uZmlnLnRhcmdldCxcbiAgICAgICAgb3V0ZXJHYXA6IG91dGVyR2FwQ29uZmlnLnRhcmdldCxcbiAgICAgICAgc3RhcnRQYWRkaW5nOiBzdGFydFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBlbmRQYWRkaW5nOiBlbmRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgdG90YWxTaXplOiBjYWxjVGFyZ2V0U2l6ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY2FsY01pblNpemUgPVxuICAgICAgYmFyVG90YWxTaXplLm1pbiArXG4gICAgICBjbHVzdGVyR2FwVG90YWxTaXplLm1pbiArXG4gICAgICBidWNrZXRHYXBUb3RhbFNpemUubWluICtcbiAgICAgIG91dGVyR2FwVG90YWxTaXplLm1pbiArXG4gICAgICBzdGFydFBhZGRpbmdUb3RhbFNpemUubWluICtcbiAgICAgIGVuZFBhZGRpbmdUb3RhbFNpemUubWluO1xuXG4gICAgLy9Ob3RlOiBUaGlzIGlzIG9ubHkgYWN0dWFsbHkgYSBtYXggc2l6ZSBpZiBhbGwgZWxlbWVudHMgaGF2ZSBhIGRlZmluZWQgbWF4XG4gICAgY29uc3QgY2FsY01heFNpemUgPVxuICAgICAgYmFyVG90YWxTaXplLm1heCArXG4gICAgICBjbHVzdGVyR2FwVG90YWxTaXplLm1heCArXG4gICAgICBidWNrZXRHYXBUb3RhbFNpemUubWF4ICtcbiAgICAgIG91dGVyR2FwVG90YWxTaXplLm1heCArXG4gICAgICBzdGFydFBhZGRpbmdUb3RhbFNpemUubWF4ICtcbiAgICAgIGVuZFBhZGRpbmdUb3RhbFNpemUubWF4O1xuXG4gICAgaWYgKGNhbGNNaW5TaXplID4gYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdUaGUgcHJvdmlkZWQgbWluaW11bSBlbGVtZW50IHNpemVzIG1lYW4gdGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoaXMgc21hbGwgb2YgYSBzaXplJyxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXJTaXplOiAwLFxuICAgICAgICBiYXJDbHVzdGVyR2FwOiAwLFxuICAgICAgICBidWNrZXRHYXA6IDAsXG4gICAgICAgIG91dGVyR2FwOiAwLFxuICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgIGVuZFBhZGRpbmc6IDAsXG4gICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgc2l6aW5nRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDaGVja3MgPSBbXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGJhclNpemVDb25maWcsIGJhckNvdW50KSxcbiAgICAgIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcoYmFyQ2x1c3RlckdhcENvbmZpZywgYmFyQ2x1c3RlckdhcENvdW50KSxcbiAgICAgIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcoYnVja2V0R2FwQ29uZmlnLCBidWNrZXRHYXBDb3VudCksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKG91dGVyR2FwQ29uZmlnLCAyKSxcbiAgICAgIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcoc3RhcnRQYWRkaW5nQ29uZmlnLCAxKSxcbiAgICAgIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcoZW5kUGFkZGluZ0NvbmZpZywgMSksXG4gICAgXTtcbiAgICBsZXQgY3VyclNjYWxpbmdGYWN0b3IgPSAxO1xuICAgIGlmIChjYWxjVGFyZ2V0U2l6ZSA+IGJvdW5kaW5nRGltZW5zaW9uKSB7XG4gICAgICAvL1NjYWxpbmcgZG93blxuICAgICAgbGV0IGZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoIWZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kKSB7XG4gICAgICAgIGNvbnN0IG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQgPSBNYXRoLm1heChcbiAgICAgICAgICAuLi5jb25maWdDaGVja3NcbiAgICAgICAgICAgIC5tYXAoY2hlY2sgPT4gY2hlY2subWluU2NhbGVGYWN0b3IpXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsKTogdmFsIGlzIG51bWJlciA9PlxuICAgICAgICAgICAgICAgIHZhbCAhPT0gdW5kZWZpbmVkICYmICEodmFsID49IGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgMCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3U2NhbGVGYWN0b3JTaXplID0gZ2V0U3VtRm9yU2NhbGVWYWx1ZShcbiAgICAgICAgICBjb25maWdDaGVja3MsXG4gICAgICAgICAgbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobmV3U2NhbGVGYWN0b3JTaXplIDw9IGJvdW5kaW5nRGltZW5zaW9uKSB7XG4gICAgICAgICAgLy9UaGVyZSdzIGEgc2NhbGUgdmFsdWUgdGhhdCdsbCB3b3JrIGJldHdlZW4gdGhlIGN1cnIgYW5kIG5ldyB2YWx1ZXNcbiAgICAgICAgICAvL1RoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQnbGwganVzdCBiZSBhdCB0aGVpciBtaW5cbiAgICAgICAgICBjb25zdCBub25TY2FsZWFibGVWYWx1ZXMgPSBjb25maWdDaGVja3MuZmlsdGVyKFxuICAgICAgICAgICAgY2hlY2sgPT5cbiAgICAgICAgICAgICAgY2hlY2subWluU2NhbGVGYWN0b3IgJiYgY2hlY2subWluU2NhbGVGYWN0b3IgPj0gY3VyclNjYWxpbmdGYWN0b3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvL1RoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQgY2FuIHN0aWxsIGJlIHNjYWxlZCBkb3duXG4gICAgICAgICAgY29uc3Qgc2NhbGVhYmxlVmFsdWVzID0gY29uZmlnQ2hlY2tzLmZpbHRlcihcbiAgICAgICAgICAgIGNoZWNrID0+XG4gICAgICAgICAgICAgICFjaGVjay5taW5TY2FsZUZhY3RvciB8fCBjaGVjay5taW5TY2FsZUZhY3RvciA8IGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ1NwYWNlID1cbiAgICAgICAgICAgIGJvdW5kaW5nRGltZW5zaW9uIC1cbiAgICAgICAgICAgIGdldFN1bUZvclNjYWxlVmFsdWUobm9uU2NhbGVhYmxlVmFsdWVzLCBjdXJyU2NhbGluZ0ZhY3Rvcik7XG4gICAgICAgICAgY3VyclNjYWxpbmdGYWN0b3IgPVxuICAgICAgICAgICAgd29ya2luZ1NwYWNlIC8gZ2V0U3VtRm9yU2NhbGVWYWx1ZShzY2FsZWFibGVWYWx1ZXMsIDEpO1xuICAgICAgICAgIGZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL09uZSBvZiB0aGUgZWxlbWVudHMgaXMgaGl0dGluZyB0aGVpciBtaW5TY2FsZUZhY3Rvciwgc28gZm9yIHNpbXBsaWNpdHkgd2UnbGwganVzdCBnbyBhZ2FpblxuICAgICAgICAgIGN1cnJTY2FsaW5nRmFjdG9yID0gbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludDtcblxuICAgICAgICAgIC8vSnVzdCBpbiBjYXNlLCB0aG91Z2ggcHJldmlvdXMgY2hlY2tzIHNob3VsZCBtYWtlIHRoaXMgaW1wb3NzaWJsZVxuICAgICAgICAgIGlmIChjdXJyU2NhbGluZ0ZhY3RvciA9PT0gMCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgJ1RoZSBnaXZlbiBzaXplIGNhbm5vdCBjb250YWluIHRoZSBmaXhlZCBzaXplcyBnaXZlbiBmb3IgdGhlIGVsZW1lbnRzJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBiYXJTaXplOiAwLFxuICAgICAgICAgICAgICBiYXJDbHVzdGVyR2FwOiAwLFxuICAgICAgICAgICAgICBidWNrZXRHYXA6IDAsXG4gICAgICAgICAgICAgIG91dGVyR2FwOiAwLFxuICAgICAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgIGVuZFBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgICAgICAgc2l6aW5nRXJyb3I6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL0NoZWNraW5nIHRvIHNlZSBpZiBhbGwgZWxlbWVudHMgaGF2ZSBhIGRlZmluZWQgbWF4XG4gICAgICBjb25zdCBtYXhpbXVtU2l6ZVBvc3NpYmxlID1cbiAgICAgICAgY29uZmlnQ2hlY2tzLmZpbHRlcihjaGVjayA9PiBjaGVjay5tYXhTY2FsZUZhY3RvciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5sZW5ndGggPT09IDA7XG4gICAgICAvL0lmIGFsbCBlbGVtZW50cyBoYXZlIGEgZGVmaW5lZCBtYXgsIGFuZCB0aGF0IG1heCBpcyBsZXNzIHRoYW4gdGhlIHNpemUgd2UncmUgdHJ5aW5nIHRvIGdyb3cgdG8sIGl0J3MgaW1wb3NzaWJsZVxuICAgICAgaWYgKG1heGltdW1TaXplUG9zc2libGUgJiYgY2FsY01heFNpemUgPCBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBwcm92aWRlZCBtYXhpbXVtIGVsZW1lbnQgd2lkdGhzIG1lYW4gdGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoaXMgbGFyZ2Ugb2YgYSBzaXplJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBiYXJTaXplOiAwLFxuICAgICAgICAgIGJhckNsdXN0ZXJHYXA6IDAsXG4gICAgICAgICAgYnVja2V0R2FwOiAwLFxuICAgICAgICAgIG91dGVyR2FwOiAwLFxuICAgICAgICAgIHN0YXJ0UGFkZGluZzogMCxcbiAgICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vU2NhbGluZyB1cFxuICAgICAgbGV0IGZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kID0gZmFsc2U7XG4gICAgICB3aGlsZSAoIWZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kKSB7XG4gICAgICAgIGNvbnN0IG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQgPSBNYXRoLm1pbihcbiAgICAgICAgICAuLi5jb25maWdDaGVja3NcbiAgICAgICAgICAgIC5tYXAoY2hlY2sgPT4gY2hlY2subWF4U2NhbGVGYWN0b3IpXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsKTogdmFsIGlzIG51bWJlciA9PlxuICAgICAgICAgICAgICAgIHZhbCAhPT0gdW5kZWZpbmVkICYmICEodmFsIDw9IGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1NjYWxlRmFjdG9yU2l6ZSA9IGdldFN1bUZvclNjYWxlVmFsdWUoXG4gICAgICAgICAgY29uZmlnQ2hlY2tzLFxuICAgICAgICAgIG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld1NjYWxlRmFjdG9yU2l6ZSA+PSBib3VuZGluZ0RpbWVuc2lvbiB8fFxuICAgICAgICAgIG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQgPT09IEluZmluaXR5XG4gICAgICAgICkge1xuICAgICAgICAgIC8vVGhlcmUncyBhIHNjYWxlIHZhbHVlIHRoYXQnbGwgd29yayBiZXR3ZWVuIHRoZSBjdXJyIGFuZCBuZXcgdmFsdWVzXG4gICAgICAgICAgLy9UaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0J2xsIGp1c3QgYmUgYXQgdGhlaXIgbWF4XG4gICAgICAgICAgY29uc3Qgbm9uU2NhbGVhYmxlVmFsdWVzID0gY29uZmlnQ2hlY2tzLmZpbHRlcihcbiAgICAgICAgICAgIGNoZWNrID0+XG4gICAgICAgICAgICAgIGNoZWNrLm1heFNjYWxlRmFjdG9yICYmIGNoZWNrLm1heFNjYWxlRmFjdG9yIDw9IGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy9UaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IGNhbiBzdGlsbCBiZSBzY2FsZWQgdXBcbiAgICAgICAgICBjb25zdCBzY2FsZWFibGVWYWx1ZXMgPSBjb25maWdDaGVja3MuZmlsdGVyKFxuICAgICAgICAgICAgY2hlY2sgPT5cbiAgICAgICAgICAgICAgIWNoZWNrLm1heFNjYWxlRmFjdG9yIHx8IGNoZWNrLm1heFNjYWxlRmFjdG9yID4gY3VyclNjYWxpbmdGYWN0b3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB3b3JraW5nU3BhY2UgPVxuICAgICAgICAgICAgYm91bmRpbmdEaW1lbnNpb24gLVxuICAgICAgICAgICAgZ2V0U3VtRm9yU2NhbGVWYWx1ZShub25TY2FsZWFibGVWYWx1ZXMsIGN1cnJTY2FsaW5nRmFjdG9yKTtcbiAgICAgICAgICBjdXJyU2NhbGluZ0ZhY3RvciA9XG4gICAgICAgICAgICB3b3JraW5nU3BhY2UgLyBnZXRTdW1Gb3JTY2FsZVZhbHVlKHNjYWxlYWJsZVZhbHVlcywgMSk7XG4gICAgICAgICAgZmluYWxTY2FsaW5nRmFjdG9yRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vT25lIG9mIHRoZSBlbGVtZW50cyBpcyBoaXR0aW5nIHRoZWlyIG1heFNjYWxlRmFjdG9yLCBzbyBmb3Igc2ltcGxpY2l0eSB3ZSdsbCBqdXN0IGdvIGFnYWluXG4gICAgICAgICAgY3VyclNjYWxpbmdGYWN0b3IgPSBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJhclNpemUgPSBnZXRTY2FsZWRFbGVtZW50U2l6ZShiYXJTaXplQ29uZmlnLCBjdXJyU2NhbGluZ0ZhY3Rvcik7XG4gICAgY29uc3QgYmFyQ2x1c3RlckdhcCA9IGdldFNjYWxlZEVsZW1lbnRTaXplKFxuICAgICAgYmFyQ2x1c3RlckdhcENvbmZpZyxcbiAgICAgIGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICk7XG4gICAgY29uc3QgYnVja2V0R2FwID0gZ2V0U2NhbGVkRWxlbWVudFNpemUoYnVja2V0R2FwQ29uZmlnLCBjdXJyU2NhbGluZ0ZhY3Rvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhclNpemUsXG4gICAgICBiYXJDbHVzdGVyR2FwLFxuICAgICAgYnVja2V0R2FwLFxuICAgICAgb3V0ZXJHYXA6IGdldFNjYWxlZEVsZW1lbnRTaXplKG91dGVyR2FwQ29uZmlnLCBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICBzdGFydFBhZGRpbmc6IGdldFNjYWxlZEVsZW1lbnRTaXplKHN0YXJ0UGFkZGluZ0NvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpLFxuICAgICAgZW5kUGFkZGluZzogZ2V0U2NhbGVkRWxlbWVudFNpemUoZW5kUGFkZGluZ0NvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpLFxuICAgICAgdG90YWxTaXplOiBib3VuZGluZ0RpbWVuc2lvbixcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlRGF0YUF4aXNWYWx1ZXMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgc2NhbGluZ0NvbmZpZzogTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZWxlbWVudFNjYWxlczogUGFydGlhbEVsZW1lbnRTY2FsaW5nQ29uZmlnIHwgdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRTaXppbmc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIHBpcGVUcmFuc2Zvcm06ICgodmFsdWU6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4pID0+IHN0cmluZykgfCBudWxsLFxuICAgIGRhdGVGb3JtYXQ6ICgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKSB8IG51bGwsXG4gICk6IHtcbiAgICBzdGFydFBhZGRpbmc6IG51bWJlcjtcbiAgICBlbmRQYWRkaW5nOiBudW1iZXI7XG4gICAgbGVmdEJ1Y2tldExhYmVsOiBudW1iZXI7XG4gICAgZGF0YUxhYmVsVGV4dFNpemU6IG51bWJlcjtcbiAgICBkYXRhTGFiZWxQYWRkaW5nOiBudW1iZXI7XG4gICAgZm9udFNpemU6IG51bWJlcjtcbiAgICBzaXplRm9yRGF0YTogbnVtYmVyO1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIGJ1Y2tldExhYmVsVGV4dFNpemU6IG51bWJlcjtcbiAgICBzaXppbmdFcnJvcj86IGJvb2xlYW47XG4gIH0ge1xuICAgIGNvbnN0IGNoYXJ0RGF0YURpcmVjdGlvbiA9IGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWcpO1xuICAgIGNvbnN0IGJvdW5kaW5nRGltZW5zaW9uID1cbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gZGltZW5zaW9ucy53aWR0aFxuICAgICAgICA6IGRpbWVuc2lvbnMuaGVpZ2h0O1xuICAgIGNvbnN0IGF4aXNTY2FsZSA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHNjYWxpbmdDb25maWcuaG9yaXpvbnRhbEF4aXNTY2FsZVxuICAgICAgICA6IHNjYWxpbmdDb25maWcudmVydGljYWxBeGlzU2NhbGU7XG5cbiAgICBjb25zdCBzdGFydFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnRQYWRkaW5nJyA6ICd0b3BQYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGVuZFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3JpZ2h0UGFkZGluZycgOiAnYm90dG9tUGFkZGluZycsXG4gICAgKTtcbiAgICBjb25zdCBsZWZ0TGFiZWxDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdsZWZ0QnVja2V0TGFiZWwnLFxuICAgICk7XG4gICAgY29uc3QgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2l6aW5nLFxuICAgICAgJ2RhdGFMYWJlbFBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgZm9udFNpemVDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdmb250U2l6ZScsXG4gICAgKTtcbiAgICBjb25zdCBmb250U2l6ZSA9IGZvbnRTaXplQ29uZmlnLnRhcmdldDtcbiAgICBjb25zdCBkYXRhTGFiZWxUZXh0U2l6aW5nID0gZ2V0RGF0YUxhYmVsU2l6ZShkYXRhLCBwaXBlVHJhbnNmb3JtLCBmb250U2l6ZSk7XG4gICAgLy9XZSBhbHdheXMgY2FsY3VsYXRlIGFuZCByZXR1cm4gZGF0YUxhYmVsVGV4dFNpemUsIHNpbmNlIGl0J3MgYWxzbyB1c2VkIGZvciBkZXRlcm1pbmcgYXhpcyBsYWJlbCBzaXplXG4gICAgY29uc3QgZGF0YUxhYmVsVGV4dFNpemUgPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBkYXRhTGFiZWxUZXh0U2l6aW5nLmhvcml6b250YWxcbiAgICAgICAgOiBkYXRhTGFiZWxUZXh0U2l6aW5nLnZlcnRpY2FsO1xuICAgIGNvbnN0IGRhdGFMYWJlbEZpeGVkU2l6ZSA9XG4gICAgICBkYXRhTGFiZWxUZXh0U2l6ZSAqIGdldERhdGFMYWJlbFNpemluZ0NvdW50KGRhdGEsIGNvbmZpZykudG90YWw7XG4gICAgY29uc3QgYnVja2V0TGFiZWxUZXh0U2l6ZSA9IGdldEJ1Y2tldExhYmVsU2l6ZShkYXRhLCBmb250U2l6ZSwgZGF0ZUZvcm1hdCk7XG4gICAgLy9GbG93IGNoYXJ0cyBoYXZlIGEgZGF0YSBsYWJlbCBhYm92ZSBlYWNoIHN1Yi1idWNrZXRcbiAgICBjb25zdCBmbG93TGFiZWxTaXplID0gZGF0YUxhYmVsVGV4dFNpemUgKyBkYXRhTGFiZWxQYWRkaW5nQ29uZmlnLnRhcmdldDtcblxuICAgIGNvbnN0IHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBzdGFydFBhZGRpbmdDb25maWcsXG4gICAgICAxLFxuICAgICk7XG4gICAgY29uc3QgZW5kUGFkZGluZ1RvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBlbmRQYWRkaW5nQ29uZmlnLFxuICAgICAgMSxcbiAgICApO1xuICAgIGNvbnN0IGRhdGFMYWJlbFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZyxcbiAgICAgIGdldERhdGFMYWJlbFNpemluZ0NvdW50KGRhdGEsIGNvbmZpZykudG90YWwsXG4gICAgKTtcblxuICAgIGxldCBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplID0gbGVmdExhYmVsQ29uZmlnLnRhcmdldDtcbiAgICBpZiAoY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgZGF0YS50eXBlID09PSAnbGFiZWxlZCcpIHtcbiAgICAgIC8vRm9yIGhvcml6b250YWwgYmFycywgdGhlIHN0YXJ0IHBhZGRpbmcgd2lsbCBzY2FsZSBiYXNlZCBvbiB0aGUgYnVja2V0IGxhYmVsc1xuICAgICAgY29uc3QgbG9uZ2VzdExhYmVsTGVuZ3RoID1cbiAgICAgICAgTWF0aC5tYXgoLi4uZGF0YS54Lm1hcCh4ID0+IHgubGFiZWwubGVuZ3RoKSkgKlxuICAgICAgICAoV0lEVEhfUEVSX0xFVFRFUiAqIChmb250U2l6ZSAvIERFRkFVTFRfRk9OVF9TSVpFKSk7XG4gICAgICBjb25zdCBtaW5MZW5ndGggPSBsZWZ0TGFiZWxDb25maWcubWluXG4gICAgICAgID8gTWF0aC5tYXgobG9uZ2VzdExhYmVsTGVuZ3RoLCBsZWZ0TGFiZWxDb25maWcubWluKVxuICAgICAgICA6IGxvbmdlc3RMYWJlbExlbmd0aDtcbiAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgPSBsZWZ0TGFiZWxDb25maWcubWF4XG4gICAgICAgID8gTWF0aC5taW4obWluTGVuZ3RoLCBsZWZ0TGFiZWxDb25maWcubWF4KVxuICAgICAgICA6IGxvbmdlc3RMYWJlbExlbmd0aDtcbiAgICB9XG5cbiAgICBsZXQgZml4ZWRTaXplVmFsdWUgPVxuICAgICAgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSArXG4gICAgICBkYXRhTGFiZWxGaXhlZFNpemUgK1xuICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLnRhcmdldCArXG4gICAgICBlbmRQYWRkaW5nVG90YWxTaXplLnRhcmdldCArXG4gICAgICBkYXRhTGFiZWxQYWRkaW5nVG90YWxTaXplLnRhcmdldDtcbiAgICBpZiAoZml4ZWRTaXplVmFsdWUgPiBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgLy9TZWUgaWYgZnVydGhlciB0cnVuY2F0aW5nIHRoZSBsYWJlbCBjYW4gaGVscFxuICAgICAgaWYgKFxuICAgICAgICBsZWZ0TGFiZWxDb25maWcubWluICYmXG4gICAgICAgIGZpeGVkU2l6ZVZhbHVlIC0gYm91bmRpbmdEaW1lbnNpb24gPFxuICAgICAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgLSBsZWZ0TGFiZWxDb25maWcubWluXG4gICAgICApIHtcbiAgICAgICAgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSA9XG4gICAgICAgICAgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSAtIChmaXhlZFNpemVWYWx1ZSAtIGJvdW5kaW5nRGltZW5zaW9uKTtcbiAgICAgICAgZml4ZWRTaXplVmFsdWUgPVxuICAgICAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgK1xuICAgICAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgICAgIGVuZFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgICAgICBkYXRhTGFiZWxQYWRkaW5nVG90YWxTaXplLnRhcmdldDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGF4aXNTY2FsZSAhPT0gJ2dyb3cnICYmXG4gICAgICAgIChheGlzU2NhbGUgIT09ICduby1zY2FsZScgfHwgc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUudHlwZSA9PT0gJ2ZpdCcpXG4gICAgICApIHtcbiAgICAgICAgLy9Hcm93aW5nIGFuZCBub24tZml0dGluZyBkYXRhIGF4ZXMgY2FuIHNjcm9sbCBpbnN0ZWFkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIHByb3ZpZGVkIGVsZW1lbnQgc2l6ZXMgbWVhbiB0aGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhpcyBzbWFsbCBvZiBhIHNpemUnLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0UGFkZGluZzogMCxcbiAgICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICAgIGxlZnRCdWNrZXRMYWJlbDogMCxcbiAgICAgICAgICBkYXRhTGFiZWxUZXh0U2l6ZTogMCxcbiAgICAgICAgICBkYXRhTGFiZWxQYWRkaW5nOiAwLFxuICAgICAgICAgIGZvbnRTaXplOiAwLFxuICAgICAgICAgIHNpemVGb3JEYXRhOiAwLFxuICAgICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgICBidWNrZXRMYWJlbFRleHRTaXplOiAwLFxuICAgICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBheGlzU2NhbGUgPT09ICdzY2FsZS10by1maXQnIHx8XG4gICAgICBheGlzU2NhbGUgPT09ICdncm93JyB8fFxuICAgICAgYXhpc1NjYWxlID09PSAnc2hyaW5rJyB8fFxuICAgICAgc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUudHlwZSA9PT0gJ2ZpdCdcbiAgICApIHtcbiAgICAgIC8vQSBncm93aW5nIGRhdGEgYXhpcyBzY3JvbGxzIHJhdGhlciB0aGFuIHNxdWVlemluZyB0aGUgZGF0YSBiZWxvdyBpdHMgbWluaW11bSBzaXplXG4gICAgICBjb25zdCBhdmFpbGFibGVTaXplID1cbiAgICAgICAgYXhpc1NjYWxlID09PSAnZ3JvdydcbiAgICAgICAgICA/IE1hdGgubWF4KFxuICAgICAgICAgICAgICBib3VuZGluZ0RpbWVuc2lvbiAtIGZpeGVkU2l6ZVZhbHVlLFxuICAgICAgICAgICAgICBnZXRNaW5pbXVtR3Jvd25EYXRhU2l6ZShcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBib3VuZGluZ0RpbWVuc2lvbixcbiAgICAgICAgICAgICAgICBmbG93TGFiZWxTaXplLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogYm91bmRpbmdEaW1lbnNpb24gLSBmaXhlZFNpemVWYWx1ZTtcbiAgICAgIGNvbnN0IHNpemVGb3JEYXRhID0gZ2V0Rml0dGVkRGF0YVNpemUoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXZhaWxhYmxlU2l6ZSxcbiAgICAgICAgZmxvd0xhYmVsU2l6ZSxcbiAgICAgICk7XG4gICAgICBpZiAoc2l6ZUZvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgcHJvdmlkZWQgbWluaW11bSBkYXRhIGVsZW1lbnQgc2l6ZSBtZWFucyB0aGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhpcyBzbWFsbCBvZiBhIHNpemUnLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0UGFkZGluZzogMCxcbiAgICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICAgIGxlZnRCdWNrZXRMYWJlbDogMCxcbiAgICAgICAgICBkYXRhTGFiZWxUZXh0U2l6ZTogMCxcbiAgICAgICAgICBkYXRhTGFiZWxQYWRkaW5nOiAwLFxuICAgICAgICAgIGZvbnRTaXplOiAwLFxuICAgICAgICAgIHNpemVGb3JEYXRhOiAwLFxuICAgICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgICBidWNrZXRMYWJlbFRleHRTaXplOiAwLFxuICAgICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRQYWRkaW5nOiBzdGFydFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBlbmRQYWRkaW5nOiBlbmRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgbGVmdEJ1Y2tldExhYmVsOiBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplLFxuICAgICAgICBkYXRhTGFiZWxUZXh0U2l6ZSxcbiAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICAgIHNpemVGb3JEYXRhLFxuICAgICAgICB0b3RhbFNpemU6IGZpeGVkU2l6ZVZhbHVlICsgYXZhaWxhYmxlU2l6ZSxcbiAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJpbWFyeURhdGFNaW4sXG4gICAgICBwcmltYXJ5RGF0YU1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnLFxuICAgIH0gPSBjYWxjRGF0YVNjYWxpbmdWYWx1ZXMoZGF0YSwgY29uZmlnKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZVByaW1hcnlNYXhGb3JTY2FsaW5nID1cbiAgICAgIHByaW1hcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICBjb25zdCBlZmZlY3RpdmVQcmltYXJ5TWluRm9yU2NhbGluZyA9XG4gICAgICBwcmltYXJ5RGF0YU1pbiA8IDAgPyBwcmltYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcgOiAwO1xuXG4gICAgaWYgKHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnR5cGUgPT09ICdtYXgnKSB7XG4gICAgICBjb25zdCBkYXRhU2l6ZSA9XG4gICAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnZhbHVlICpcbiAgICAgICAgKChlZmZlY3RpdmVQcmltYXJ5TWF4Rm9yU2NhbGluZyAtIGVmZmVjdGl2ZVByaW1hcnlNaW5Gb3JTY2FsaW5nKSAvXG4gICAgICAgICAgZWZmZWN0aXZlUHJpbWFyeU1heEZvclNjYWxpbmcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnRQYWRkaW5nOiBzdGFydFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBlbmRQYWRkaW5nOiBlbmRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgbGVmdEJ1Y2tldExhYmVsOiBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplLFxuICAgICAgICBkYXRhTGFiZWxUZXh0U2l6ZSxcbiAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICAgIHNpemVGb3JEYXRhOiBkYXRhU2l6ZSxcbiAgICAgICAgdG90YWxTaXplOlxuICAgICAgICAgIGdldFNjYWxlZERhdGFUb3RhbFNpemUoZGF0YSwgY29uZmlnLCBkYXRhU2l6ZSwgZmxvd0xhYmVsU2l6ZSkgK1xuICAgICAgICAgIGZpeGVkU2l6ZVZhbHVlLFxuICAgICAgICBidWNrZXRMYWJlbFRleHRTaXplLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhU2l6ZSA9XG4gICAgICAoKGVmZmVjdGl2ZVByaW1hcnlNYXhGb3JTY2FsaW5nIC0gZWZmZWN0aXZlUHJpbWFyeU1pbkZvclNjYWxpbmcpIC9cbiAgICAgICAgc2NhbGluZ0NvbmZpZy5kYXRhU2NhbGUucmF0aW8udmFsdWUpICpcbiAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnJhdGlvLnB4O1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydFBhZGRpbmc6IHN0YXJ0UGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICBlbmRQYWRkaW5nOiBlbmRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgIGxlZnRCdWNrZXRMYWJlbDogbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSxcbiAgICAgIGRhdGFMYWJlbFRleHRTaXplLFxuICAgICAgZGF0YUxhYmVsUGFkZGluZzogZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICBmb250U2l6ZTogZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICAgc2l6ZUZvckRhdGE6IGRhdGFTaXplLFxuICAgICAgdG90YWxTaXplOlxuICAgICAgICBnZXRTY2FsZWREYXRhVG90YWxTaXplKGRhdGEsIGNvbmZpZywgZGF0YVNpemUsIGZsb3dMYWJlbFNpemUpICtcbiAgICAgICAgZml4ZWRTaXplVmFsdWUsXG4gICAgICBidWNrZXRMYWJlbFRleHRTaXplLFxuICAgIH07XG4gIH1cblxuICAvL1RoZSBsZWFzdCBzcGFjZSBhIGdyb3dpbmcgZGF0YSBheGlzIGdpdmVzIHRoZSBkYXRhOiBhIHBvcnRpb24gb2YgdGhlIHByb3ZpZGVkIHNpemUsIG9uIHRvcCBvZiB0aGUgc3BhY2UgdGhhdFxuICAvLyBlbGVtZW50cyBlbmxhcmdlZCB0byB0aGUgbWluaW11bSBzaXplIG5lZWQgKHNvIHRoZSBkYXRhIHN0YXlzIHByb3BvcnRpb25hbCByYXRoZXIgdGhhbiBhbGwgYmVpbmcgdGhlIG1pbmltdW0pXG4gIGZ1bmN0aW9uIGdldE1pbmltdW1Hcm93bkRhdGFTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGJvdW5kaW5nRGltZW5zaW9uOiBudW1iZXIsXG4gICAgbGFiZWxTaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgbWluaW11bUVsZW1lbnRzU2l6ZSA9XG4gICAgICBkYXRhLnR5cGUgPT09ICdmbG93LXByb2Nlc3NlZCdcbiAgICAgICAgPyBnZXRNYXhGbG93QnVja2V0U2l6ZShcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpLFxuICAgICAgICAgICAgbGFiZWxTaXplLFxuICAgICAgICAgICkgLSBnZXRGbG93TWlkTGFiZWxTaXplKGRhdGEsIGxhYmVsU2l6ZSlcbiAgICAgICAgOiAwO1xuICAgIHJldHVybiBib3VuZGluZ0RpbWVuc2lvbiAqIEdST1dOX0RBVEFfTUlOSU1VTV9SQVRJTyArIG1pbmltdW1FbGVtZW50c1NpemU7XG4gIH1cblxuICAvL0ZvciBmbG93IGNoYXJ0cywgZmluZHMgdGhlIHNpemUgdGhlIGRhdGEgc2NhbGUgc2hvdWxkIG1hcCB0byBzbyB0aGF0IGV2ZXJ5IGJ1Y2tldCAoaW5jbHVkaW5nIGl0cyBvd24gZGF0YSBsYWJlbHMsXG4gIC8vIGFuZCBhbnkgZWxlbWVudHMgZW5sYXJnZWQgdG8gdGhlIG1pbmltdW0gc2l6ZSkgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHNpemVcbiAgLy9SZXR1cm5zIG51bGwgaWYgdGhlIG1pbmltdW0gc2l6ZXMgYWxvbmUgY2FuJ3QgZml0XG4gIGZ1bmN0aW9uIGdldEZpdHRlZERhdGFTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGF2YWlsYWJsZVNpemU6IG51bWJlcixcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNpemU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFNYXggPSBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC50b3RhbENvdW50KSk7XG4gICAgaWYgKGRhdGFNYXggPD0gMCkge1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNpemU7XG4gICAgfVxuICAgIGNvbnN0IG1pbmltdW1TaXplID0gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpO1xuICAgIGNvbnN0IGJ1Y2tldEF2YWlsYWJsZVNpemUgPVxuICAgICAgYXZhaWxhYmxlU2l6ZSArIGdldEZsb3dNaWRMYWJlbFNpemUoZGF0YSwgbGFiZWxTaXplKTtcbiAgICAvL0NhbGN1bGF0ZSB3aGF0IHRoZSBzaXppbmcgd291bGQgbmVlZCB0byBiZSBmb3IgZWFjaCBpbmRpdmlkdWFsIGNvbHVtbixcbiAgICAvLyAgdGFraW5nIHRoZSB2YWx1ZSB0aGF0IGlzIG1vc3QgcmVzdHJpY3RpdmUuIE5vdCBhcHBseWluZyBtaW5pbXVtIHNpemUgeWV0XG4gICAgY29uc3QgdW5lbmxhcmdlZFJhdGlvID0gTWF0aC5taW4oXG4gICAgICAuLi5kYXRhLnhcbiAgICAgICAgLmZpbHRlcihidWNrZXQgPT4gYnVja2V0LnRvdGFsQ291bnQgPiAwKVxuICAgICAgICAubWFwKFxuICAgICAgICAgIGJ1Y2tldCA9PlxuICAgICAgICAgICAgKGJ1Y2tldEF2YWlsYWJsZVNpemUgLSAoYnVja2V0LnN1YkJ1Y2tldHMubGVuZ3RoIC0gMSkgKiBsYWJlbFNpemUpIC9cbiAgICAgICAgICAgIGJ1Y2tldC50b3RhbENvdW50LFxuICAgICAgICApLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgbWluaW11bVNpemUgPT09IDAgfHxcbiAgICAgIGdldE1heEZsb3dCdWNrZXRTaXplKGRhdGEsIHVuZW5sYXJnZWRSYXRpbywgbWluaW11bVNpemUsIGxhYmVsU2l6ZSkgPD1cbiAgICAgICAgYnVja2V0QXZhaWxhYmxlU2l6ZVxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZW5sYXJnZWRSYXRpbyAqIGRhdGFNYXg7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGdldE1heEZsb3dCdWNrZXRTaXplKGRhdGEsIDAsIG1pbmltdW1TaXplLCBsYWJlbFNpemUpID5cbiAgICAgIGJ1Y2tldEF2YWlsYWJsZVNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvL05vdywgd2UgYXBwbHkgbWluaW11bSBzaXplIHRvIHRoZSBiYXJzIHRvIGNhbGN1bGF0ZSBvdXIgdHJ1ZSByYXRpbyAoZm91bmQgdGhyb3VnaCBiaW5hcnkgc2VhcmNoKVxuICAgIGxldCBsb3cgPSAwO1xuICAgIGxldCBoaWdoID0gdW5lbmxhcmdlZFJhdGlvO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7IGkrKykge1xuICAgICAgY29uc3QgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjtcbiAgICAgIGlmIChcbiAgICAgICAgZ2V0TWF4Rmxvd0J1Y2tldFNpemUoZGF0YSwgbWlkLCBtaW5pbXVtU2l6ZSwgbGFiZWxTaXplKSA+XG4gICAgICAgIGJ1Y2tldEF2YWlsYWJsZVNpemVcbiAgICAgICkge1xuICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG93ID0gbWlkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG93ICogZGF0YU1heDtcbiAgfVxuXG4gIC8vVGhlIHNpemUgbmVlZGVkIGFsb25nIHRoZSBkYXRhIGF4aXMgYmV5b25kIHRoZSBmaXhlZCBzaXplXG4gIC8vRm9yIGZsb3cgY2hhcnRzLCB0aGlzIGlzIGJhc2VkIG9uIHRoZSB0YWxsZXN0IGJ1Y2tldCAoaW5jbHVkaW5nIGl0cyBvd24gZGF0YSBsYWJlbHMgYW5kIGFueSBlbmxhcmdlZCBlbGVtZW50cyksXG4gIC8vIHJhdGhlciB0aGFuIGFzc3VtaW5nIHRoZSBidWNrZXQgd2l0aCB0aGUgbW9zdCBkYXRhIGFsc28gaGFzIHRoZSBtb3N0IHN1Yi1idWNrZXRzXG4gIGZ1bmN0aW9uIGdldFNjYWxlZERhdGFUb3RhbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgZGF0YVNpemU6IG51bWJlcixcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICByZXR1cm4gZGF0YVNpemU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFNYXggPSBNYXRoLm1heCguLi5kYXRhLngubWFwKHggPT4geC50b3RhbENvdW50KSk7XG4gICAgaWYgKGRhdGFNYXggPD0gMCkge1xuICAgICAgcmV0dXJuIGRhdGFTaXplO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgZ2V0TWF4Rmxvd0J1Y2tldFNpemUoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFTaXplIC8gZGF0YU1heCxcbiAgICAgICAgZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpLFxuICAgICAgICBsYWJlbFNpemUsXG4gICAgICApIC0gZ2V0Rmxvd01pZExhYmVsU2l6ZShkYXRhLCBsYWJlbFNpemUpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERhdGFMYWJlbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgcGlwZVRyYW5zZm9ybTogKCh2YWx1ZTogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbikgPT4gc3RyaW5nKSB8IG51bGwsXG4gICAgZm9udFNpemU6IG51bWJlcixcbiAgKTogeyBob3Jpem9udGFsOiBudW1iZXI7IHZlcnRpY2FsOiBudW1iZXIgfSB7XG4gICAgbGV0IG5vcm1Ib3Jpem9udGFsTWF4TGVuZ3RoID0gMDtcbiAgICBsZXQgbm9ybVN1cHBNYXhMZW5ndGggPSAwO1xuICAgIGlmIChkYXRhLnR5cGUgIT09ICdmbG93LXByb2Nlc3NlZCcgJiYgcGlwZVRyYW5zZm9ybSAhPT0gbnVsbCkge1xuICAgICAgbm9ybUhvcml6b250YWxNYXhMZW5ndGggPSBNYXRoLm1heChcbiAgICAgICAgLi4uZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT5cbiAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgIC4uLnkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+XG4gICAgICAgICAgICAgIGNoZWNrTGFiZWxMZW5ndGgoXG4gICAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG5vcm1TdXBwTWF4TGVuZ3RoID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLihkYXRhLnN1cHBsZW1lbnRhcnlZcyA/PyBbXSkubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAuLi55LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PlxuICAgICAgICAgICAgICBjaGVja0xhYmVsTGVuZ3RoKFxuICAgICAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCB0cnVlKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG9yaXpvbnRhbDogTWF0aC5tYXgobm9ybUhvcml6b250YWxNYXhMZW5ndGgsIG5vcm1TdXBwTWF4TGVuZ3RoKSxcbiAgICAgICAgdmVydGljYWw6IGZvbnRTaXplICogMixcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBob3Jpem9udGFsOiBNYXRoLm1heChub3JtSG9yaXpvbnRhbE1heExlbmd0aCwgbm9ybVN1cHBNYXhMZW5ndGgpLFxuICAgICAgdmVydGljYWw6IGZvbnRTaXplLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCdWNrZXRMYWJlbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgZm9udFNpemU6IG51bWJlcixcbiAgICBkYXRlRm9ybWF0OiAoKGRhdGU6IERhdGUpID0+IHN0cmluZykgfCBudWxsLFxuICApIHtcbiAgICBpZiAoZGF0ZUZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgICAuLi5kYXRhLngubWFwKHggPT4gY2hlY2tMYWJlbExlbmd0aCh4LmxhYmVsLCBmb250U2l6ZSkpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICd0aW1lc2VyaWVzJykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgICAgLi4uZGF0YS54Lm1hcCh4ID0+XG4gICAgICAgICAgICBjaGVja0xhYmVsTGVuZ3RoKGRhdGVGb3JtYXQobmV3IERhdGUoeCkpLCBmb250U2l6ZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0xhYmVsTGVuZ3RoKHZhbHVlOiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBlcmlvZENvdW50ID0gKHZhbHVlLm1hdGNoKC9cXC4vZykgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBzbGFzaENvdW50ID0gKHZhbHVlLm1hdGNoKC9cXC8vZykgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBmb250U2NhbGVGYWN0b3IgPSBmb250U2l6ZSAvIERFRkFVTFRfRk9OVF9TSVpFO1xuICAgIHJldHVybiAoXG4gICAgICAodmFsdWUubGVuZ3RoIC0gKHBlcmlvZENvdW50ICsgc2xhc2hDb3VudCkpICpcbiAgICAgICAgKFdJRFRIX1BFUl9OVU1CRVIgKiBmb250U2NhbGVGYWN0b3IpICtcbiAgICAgIHBlcmlvZENvdW50ICogKFdJRFRIX1BFUl9QRVJJT0QgKiBmb250U2NhbGVGYWN0b3IpICtcbiAgICAgIHNsYXNoQ291bnQgKiAoV0lEVEhfUEVSX1NMQVNIICogZm9udFNjYWxlRmFjdG9yKVxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNCYXJUeXBlKHR5cGU6IENoYXJ0LkNoYXJ0VHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHR5cGUgPT09ICdiYXInIHx8XG4gICAgICB0eXBlID09PSAnaG9yaXpvbnRhbC1iYXInIHx8XG4gICAgICB0eXBlID09PSAnd2F0ZXJmYWxsJyB8fFxuICAgICAgdHlwZSA9PT0gJ2Z1bm5lbCdcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvL09ubHkgYmFyLXR5cGUgYW5kIGZsb3cgY2hhcnRzIGhhdmUgZGlzY3JldGUgZGF0YSBlbGVtZW50cyB0aGF0IHRoZSBtaW5pbXVtIHNpemUgYXBwbGllcyB0b1xuICBmdW5jdGlvbiBnZXRNaW5pbXVtRGF0YUVsZW1lbnRTaXplKGNvbmZpZzogQ29uZmlnKTogbnVtYmVyIHtcbiAgICBpZiAoXG4gICAgICBjb25maWcudHlwZSA9PT0gJ2RvbnV0JyB8fFxuICAgICAgY29uZmlnLnR5cGUgPT09ICdsaW5lJyB8fFxuICAgICAgY29uZmlnLnR5cGUgPT09ICdhcmVhJ1xuICAgICkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuc2NhbGluZ0NvbmZpZz8uZGF0YVNjYWxlPy5taW5pbXVtRGF0YUVsZW1lbnRTaXplID8/IDA7XG4gIH1cblxuICAvL0FueSBkYXRhIGVsZW1lbnQgd2l0aCBhIG5vbi16ZXJvIHZhbHVlIGlzIGtlcHQgYXQgb3IgYWJvdmUgdGhlIG1pbmltdW0gc2l6ZVxuICBmdW5jdGlvbiBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgbWluaW11bVNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IDAgPyBNYXRoLm1heChzaXplLCBtaW5pbXVtU2l6ZSkgOiBzaXplO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rmxvd1N1YkJ1Y2tldFNpemVzKFxuICAgIHN1YkJ1Y2tldDogRmxvd1N1YkJ1Y2tldCxcbiAgICB2YWx1ZVRvU2l6ZTogKHZhbHVlOiBudW1iZXIpID0+IG51bWJlcixcbiAgICBtaW5pbXVtU2l6ZTogbnVtYmVyLFxuICApOiB7XG4gICAgdG90YWxTaXplOiBudW1iZXI7XG4gICAgY29udGludWluZ1NpemU6IG51bWJlcjtcbiAgICBjb25uZWN0aW9uU2l6ZXM6IG51bWJlcltdO1xuICB9IHtcbiAgICBjb25zdCBjb25uZWN0aW9uU2l6ZXMgPSBzdWJCdWNrZXQuY29ubmVjdGlvbnMubWFwKGNvbm5lY3Rpb24gPT5cbiAgICAgIGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgdmFsdWVUb1NpemUoY29ubmVjdGlvbi5jb3VudCksXG4gICAgICAgIGNvbm5lY3Rpb24uY291bnQsXG4gICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgKSxcbiAgICApO1xuICAgIGNvbnN0IHN1bVNpemVzID0gKGRpcmVjdGlvbjogRmxvd0Nvbm5lY3Rpb25bJ2RpcmVjdGlvbiddKTogbnVtYmVyID0+XG4gICAgICBzdW0oXG4gICAgICAgIGNvbm5lY3Rpb25TaXplcy5maWx0ZXIoXG4gICAgICAgICAgKF8sIGkpID0+IHN1YkJ1Y2tldC5jb25uZWN0aW9uc1tpXS5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgY29uc3QgY29udGludWluZ1NpemUgPSBzdW1TaXplcygnZm9yd2FyZCcpO1xuICAgIGNvbnN0IGJhY2t3YXJkU2l6ZSA9IHN1bVNpemVzKCdiYWNrd2FyZCcpO1xuICAgIGNvbnN0IG5vbkNvbnRpbnVpbmdDb3VudCA9XG4gICAgICBzdWJCdWNrZXQuY291bnQgLVxuICAgICAgc3VtKFxuICAgICAgICBzdWJCdWNrZXQuY29ubmVjdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJylcbiAgICAgICAgICAubWFwKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5jb3VudCksXG4gICAgICApO1xuICAgIC8vVGhlIHN1Yi1idWNrZXQgbXVzdCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIGl0cyAocG9zc2libHkgZW5sYXJnZWQpIGNvbm5lY3Rpb25zIG9uIGVpdGhlciBzaWRlXG4gICAgY29uc3QgdG90YWxTaXplID0gTWF0aC5tYXgoXG4gICAgICBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgIHZhbHVlVG9TaXplKHN1YkJ1Y2tldC5jb3VudCksXG4gICAgICAgIHN1YkJ1Y2tldC5jb3VudCxcbiAgICAgICAgbWluaW11bVNpemUsXG4gICAgICApLFxuICAgICAgY29udGludWluZ1NpemUgK1xuICAgICAgICBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgICAgdmFsdWVUb1NpemUobm9uQ29udGludWluZ0NvdW50KSxcbiAgICAgICAgICBub25Db250aW51aW5nQ291bnQsXG4gICAgICAgICAgbWluaW11bVNpemUsXG4gICAgICAgICksXG4gICAgICBiYWNrd2FyZFNpemUsXG4gICAgKTtcbiAgICAvL0V2ZXJ5IHVuaXQgaW4gYSBzdWItYnVja2V0IGFycml2ZXMgdGhyb3VnaCBpdHMgYmFja3dhcmQgY29ubmVjdGlvbnMsIHNvIHRoZXkncmUgc3RyZXRjaGVkIHRvIGZpbGwgdGhlXG4gICAgLy8gc3ViLWJ1Y2tldCB3aGVuIGl0IGhhcyBiZWVuIGVubGFyZ2VkIGJleW9uZCB0aGVtXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsU2l6ZSxcbiAgICAgIGNvbnRpbnVpbmdTaXplLFxuICAgICAgY29ubmVjdGlvblNpemVzOiBjb25uZWN0aW9uU2l6ZXMubWFwKChzaXplLCBpKSA9PlxuICAgICAgICBzdWJCdWNrZXQuY29ubmVjdGlvbnNbaV0uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnICYmIGJhY2t3YXJkU2l6ZSA+IDBcbiAgICAgICAgICA/IChzaXplICogdG90YWxTaXplKSAvIGJhY2t3YXJkU2l6ZVxuICAgICAgICAgIDogc2l6ZSxcbiAgICAgICksXG4gICAgfTtcbiAgfVxuXG4gIC8vVGhlIHNpemUgb2YgdGhlIHRhbGxlc3QgZmxvdyBidWNrZXQgZm9yIHRoZSBnaXZlbiBzY2FsaW5nIHJhdGlvLCBpbmNsdWRpbmcgdGhlIGRhdGEgbGFiZWxzIGJldHdlZW4gaXRzIHN1Yi1idWNrZXRzXG4gIC8vICBUaGUgbGFiZWwgYWJvdmUgdGhlIGZpcnN0IHN1Yi1idWNrZXQgaXMgZXhjbHVkZWQsIHNpbmNlIGl0J3MgcGFydCBvZiB0aGUgdG9wIG9mZnNldFxuICBmdW5jdGlvbiBnZXRNYXhGbG93QnVja2V0U2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzZWRGbG93RGF0YSxcbiAgICBweFBlclZhbHVlOiBudW1iZXIsXG4gICAgbWluaW11bVNpemU6IG51bWJlcixcbiAgICBsYWJlbFNpemU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAuLi5kYXRhLngubWFwKFxuICAgICAgICBidWNrZXQgPT5cbiAgICAgICAgICBzdW0oXG4gICAgICAgICAgICBidWNrZXQuc3ViQnVja2V0cy5tYXAoXG4gICAgICAgICAgICAgIHN1YkJ1Y2tldCA9PlxuICAgICAgICAgICAgICAgIGdldEZsb3dTdWJCdWNrZXRTaXplcyhcbiAgICAgICAgICAgICAgICAgIHN1YkJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0+IHZhbHVlICogcHhQZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICAgICAgICAgICkudG90YWxTaXplLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApICtcbiAgICAgICAgICAoYnVja2V0LnN1YkJ1Y2tldHMubGVuZ3RoIC0gMSkgKiBsYWJlbFNpemUsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvL1RoZSBmaXhlZCBzaXplIHJlc2VydmVzIHJvb20gZm9yIHRoZSBsYWJlbHMgYmV0d2VlbiBzdWItYnVja2V0cyBhcyBpZiBldmVyeSBidWNrZXQgaGFkIGFzIG1hbnkgc3ViLWJ1Y2tldHMgYXMgdGhlXG4gIC8vIGJ1Y2tldCB3aXRoIHRoZSBtb3N0LCBzbyB0aGlzIGlzIHRoZSBwb3J0aW9uIG9mIHRoZSBmaXhlZCBzaXplIHRoYXQgZWFjaCBidWNrZXQgY2FuIGluc3RlYWQgdXNlIGJhc2VkIG9uIGl0cyBvd24gbGFiZWxzXG4gIGZ1bmN0aW9uIGdldEZsb3dNaWRMYWJlbFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc2VkRmxvd0RhdGEsXG4gICAgbGFiZWxTaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIChNYXRoLm1heCguLi5kYXRhLngubWFwKGJ1Y2tldCA9PiBidWNrZXQuc3ViQnVja2V0cy5sZW5ndGgpKSAtIDEpICpcbiAgICAgIGxhYmVsU2l6ZVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1N0YWNrZWREYXRhKGNvbmZpZzogQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnYmFyJyB8fCBjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJykge1xuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ1R5cGUgPT09ICdzdGFja2VkJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnYXJlYScgfHwgY29uZmlnLnR5cGUgPT09ICd3YXRlcmZhbGwnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDbHVzdGVyZWREYXRhKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGluY2x1ZGVTdXBwbGVtZW50YXJ5OiBib29sZWFuLFxuICApOiBib29sZWFuIHtcbiAgICAvL0l0IHZhcmllcyB3aGV0aGVyIHdlIHdhbnQgdG8gaW5jbHVkZSBzdXBwbGVtZW50YXJ5IGRhdGEgaW4gdGhpcyBjaGVja1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpbmNsdWRlU3VwcGxlbWVudGFyeSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChjb25maWcudHlwZSA9PT0gJ2JhcicgfHwgY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpICYmXG4gICAgICBjb25maWcuZ3JvdXBpbmdUeXBlID09PSAnY2x1c3RlcmVkJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2Z1bm5lbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvL0luIHNvbWUgY2FzZXMsIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGNsdXN0ZXJlZCBhbmQgc3RhY2tlZCBkb2Vzbid0IG1hdHRlclxuICBmdW5jdGlvbiBpc0dyb3VwaW5nVHlwZUV4Y2VwdGlvbihkYXRhOiBOb25GbG93RGF0YSwgY29uZmlnOiBDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoZGF0YS55cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvL0NoZWNraW5nIGZvciBhICdtZXRyaWMnIGNoYXJ0cywgd2hpY2ggaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGhvcml6b250YWwgYmFyIGNoYXJ0cyxcbiAgICAvLyB3aGVyZSBlYWNoIHNlcmllcyBpcyBhbHNvIGEgYnVja2V0IChhbmQgdmljZSB2ZXJzYSlcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZGF0YS54Lmxlbmd0aCA9PT0gZGF0YS55cy5sZW5ndGggJiZcbiAgICAgICAgZGF0YS55cy5sZW5ndGggPT09XG4gICAgICAgICAgZGF0YS55cy5maWx0ZXIoeSA9PiB5LnZhbHVlcy5maWx0ZXIodmFsID0+IHZhbCAhPT0gMCkubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhOiBJbnB1dERhdGEpOiBkYXRhIGlzIE5vbkZsb3dEYXRhICYge1xuICAgIHN1cHBsZW1lbnRhcnlZczogTm9uTnVsbGFibGU8Tm9uRmxvd0RhdGFbJ3N1cHBsZW1lbnRhcnlZcyddPjtcbiAgfSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3cnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkYXRhLnN1cHBsZW1lbnRhcnlZcyAmJiBkYXRhLnN1cHBsZW1lbnRhcnlZcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgIGVsZW1lbnRTY2FsZXM6IFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0U2NhbGluZ0NvbmZpZzogRnVsbEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGVsZW1lbnQ6IENoYXJ0U2NhbGVFbGVtZW50LFxuICApOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGRlZmF1bHRFbGVtZW50Q29uZmlnID0gZGVmYXVsdFNjYWxpbmdDb25maWdbZWxlbWVudF07XG4gICAgbGV0IGlucHV0Q29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24gfCBudWxsO1xuICAgIGlmIChlbGVtZW50U2NhbGVzKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZUNvbmZpZyA9IGVsZW1lbnRTY2FsZXNbZWxlbWVudF07XG4gICAgICBpZiAocG9zc2libGVDb25maWcpIHtcbiAgICAgICAgaW5wdXRDb25maWcgPSBwb3NzaWJsZUNvbmZpZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0Q29uZmlnID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRDb25maWcgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChpbnB1dENvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmV0dXJuQ29uZmlnID0gaW5wdXRDb25maWcgYXMgRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uO1xuICAgICAgcmV0dXJuIHJldHVybkNvbmZpZztcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRFbGVtZW50Q29uZmlnLnRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXR1cm5Db25maWcgPSBkZWZhdWx0RWxlbWVudENvbmZpZyBhcyBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb247XG4gICAgICByZXR1cm4gcmV0dXJuQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiAwLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgIGVsZW1lbnRDb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgICBlbGVtZW50Q291bnQ6IG51bWJlcixcbiAgKTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXI7IHRhcmdldDogbnVtYmVyIH0ge1xuICAgIGNvbnN0IGluZE1pbiA9IGVsZW1lbnRDb25maWcubWluICE9PSB1bmRlZmluZWQgPyBlbGVtZW50Q29uZmlnLm1pbiA6IDA7XG4gICAgY29uc3QgaW5kTWF4ID0gZWxlbWVudENvbmZpZy5tYXggIT09IHVuZGVmaW5lZCA/IGVsZW1lbnRDb25maWcubWF4IDogMDtcbiAgICBjb25zdCBpbmRUYXJnZXQgPSBlbGVtZW50Q29uZmlnLnRhcmdldDtcbiAgICByZXR1cm4ge1xuICAgICAgbWluOiBpbmRNaW4gKiBlbGVtZW50Q291bnQsXG4gICAgICBtYXg6IGluZE1heCAqIGVsZW1lbnRDb3VudCxcbiAgICAgIHRhcmdldDogaW5kVGFyZ2V0ICogZWxlbWVudENvdW50LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXRlcm1pbmVUb3RhbFNjYWxlZFNpemVPZkVsZW1lbnQoXG4gICAgZWxlbWVudENvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICAgIGVsZW1lbnRDb3VudDogbnVtYmVyLFxuICAgIHNjYWxlVmFsdWU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBzY2FsZWRWYWwgPSBnZXRTY2FsZWRFbGVtZW50U2l6ZShlbGVtZW50Q29uZmlnLCBzY2FsZVZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGVkVmFsICogZWxlbWVudENvdW50O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2NhbGVkRWxlbWVudFNpemUoXG4gICAgZWxlbWVudENvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICAgIHNjYWxlVmFsdWU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBzY2FsZWRUYXJnZXQgPSBlbGVtZW50Q29uZmlnLnRhcmdldCAqIHNjYWxlVmFsdWU7XG4gICAgaWYgKHNjYWxlVmFsdWUgPCAxKSB7XG4gICAgICBpZiAoZWxlbWVudENvbmZpZy5taW4gJiYgZWxlbWVudENvbmZpZy5taW4gPiBzY2FsZWRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRDb25maWcubWluO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNjYWxlZFRhcmdldDtcbiAgICB9XG4gICAgaWYgKHNjYWxlVmFsdWUgPiAxKSB7XG4gICAgICBpZiAoZWxlbWVudENvbmZpZy5tYXggJiYgZWxlbWVudENvbmZpZy5tYXggPCBzY2FsZWRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRDb25maWcubWF4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNjYWxlZFRhcmdldDtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlZFRhcmdldDtcbiAgfVxuXG4gIHR5cGUgRWxlbWVudFNjYWxlQ2hlY2tJbmZvID0ge1xuICAgIGNvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uO1xuICAgIG1pblNjYWxlRmFjdG9yPzogbnVtYmVyO1xuICAgIG1heFNjYWxlRmFjdG9yPzogbnVtYmVyO1xuICAgIGVsZW1lbnRDb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGdldENoZWNraW5nSW5mb0ZvckVsZW1lbnRDb25maWcoXG4gICAgY29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24sXG4gICAgZWxlbWVudENvdW50OiBudW1iZXIsXG4gICk6IEVsZW1lbnRTY2FsZUNoZWNrSW5mbyB7XG4gICAgbGV0IG1pblNjYWxlRmFjdG9yOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5taW4pIHtcbiAgICAgIG1pblNjYWxlRmFjdG9yID1cbiAgICAgICAgY29uZmlnLnRhcmdldCAhPT0gMCA/IGNvbmZpZy5taW4gLyBjb25maWcudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgbWF4U2NhbGVGYWN0b3I6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLm1heCkge1xuICAgICAgbWF4U2NhbGVGYWN0b3IgPVxuICAgICAgICBjb25maWcudGFyZ2V0ICE9PSAwID8gY29uZmlnLm1heCAvIGNvbmZpZy50YXJnZXQgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb25maWcsXG4gICAgICBtaW5TY2FsZUZhY3RvcixcbiAgICAgIG1heFNjYWxlRmFjdG9yLFxuICAgICAgZWxlbWVudENvdW50LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdW1Gb3JTY2FsZVZhbHVlKFxuICAgIGNoZWNrSW5mb3M6IEVsZW1lbnRTY2FsZUNoZWNrSW5mb1tdLFxuICAgIHNjYWxlVmFsdWU6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrSW5mb3MpIHtcbiAgICAgIHN1bSArPSBkZXRlcm1pbmVUb3RhbFNjYWxlZFNpemVPZkVsZW1lbnQoXG4gICAgICAgIGNoZWNrLmNvbmZpZyxcbiAgICAgICAgY2hlY2suZWxlbWVudENvdW50LFxuICAgICAgICBzY2FsZVZhbHVlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERhdGFMYWJlbFNpemluZ0NvdW50KFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICApOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyB0b3RhbDogbnVtYmVyIH0ge1xuICAgIGlmIChjb25maWcuc2hvd0RhdGFMYWJlbHMgIT09IHRydWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBlbmQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy9EYXRhIGxhYmVscyBhcmUgYWx3YXlzIHNob3duIGFib3ZlIHRoZSBkYXRhIGZvciBhbGwgYnV0IHRoZXNlIDMgdHlwZXNcbiAgICBpZiAoXG4gICAgICBjb25maWcudHlwZSAhPT0gJ2JhcicgJiZcbiAgICAgIGNvbmZpZy50eXBlICE9PSAnaG9yaXpvbnRhbC1iYXInICYmXG4gICAgICBjb25maWcudHlwZSAhPT0gJ3dhdGVyZmFsbCcgJiZcbiAgICAgIGNvbmZpZy50eXBlICE9PSAnZmxvdydcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiAxLFxuICAgICAgICBlbmQ6IDAsXG4gICAgICAgIHRvdGFsOiAxLFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0Q291bnQgPSAwO1xuICAgIGxldCBtaWRDb3VudCA9IDA7XG4gICAgbGV0IGVuZENvdW50ID0gMDtcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmxvdy1wcm9jZXNzZWQnKSB7XG4gICAgICBpZiAoZGF0YS55cy5maW5kKHkgPT4geS52YWx1ZXMuZmluZCh2YWwgPT4gdmFsID49IDApKSkge1xuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpIHtcbiAgICAgICAgICBlbmRDb3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0Q291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA8IDApKSkge1xuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpIHtcbiAgICAgICAgICBzdGFydENvdW50ICs9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kQ291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvdW50ID0gMTtcbiAgICAgIG1pZENvdW50ID0gTWF0aC5tYXgoLi4uZGF0YS54Lm1hcCh4ID0+IHguc3ViQnVja2V0cy5sZW5ndGgpKSAtIDE7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnRDb3VudCxcbiAgICAgIGVuZDogZW5kQ291bnQsXG4gICAgICB0b3RhbDogc3RhcnRDb3VudCArIG1pZENvdW50ICsgZW5kQ291bnQsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAvL1Bvc2l0aW9uIG5vdCBhY2NvdW50aW5nIGZvciBzY3JvbGxpbmdcbiAgICByZWxQb3NYOiBudW1iZXIsXG4gICAgcmVsUG9zWTogbnVtYmVyLFxuICAgIC8vUG9zaXRpb24gYWNjb3VudGluZyBmb3Igc2Nyb2xsaW5nXG4gICAgcmVhbFBvc1g6IG51bWJlcixcbiAgICByZWFsUG9zWTogbnVtYmVyLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyB8IG51bGwsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogYm9vbGVhbiB7XG4gICAgLy9DaGVjayBpZiB3ZSdyZSBvbiB0b3Agb2Ygb25lIG9mIHRoZSBzY3JvbGxiYXJzXG4gICAgaWYgKHJlbFBvc1ggPiBkaW1lbnNpb25zLndpZHRoIHx8IHJlbFBvc1kgPiBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgLy9JZiBjaGFydFNpemluZ1ZhbHVlcyBhcmVuJ3QgcHJvdmlkZWQsIG5vIG1vcmUgY2hlY2tzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vQ2hlY2sgaWYgd2UncmUgaW4gb25lIG9mIHRoZSBwYWRkaW5nIGFyZWFzXG4gICAgaWYgKFxuICAgICAgcmVhbFBvc1ggPCBjaGFydFNpemluZ1ZhbHVlcy5sZWZ0UGFkZGluZyB8fFxuICAgICAgcmVhbFBvc1ggPlxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoIC0gY2hhcnRTaXppbmdWYWx1ZXMucmlnaHRQYWRkaW5nIHx8XG4gICAgICByZWFsUG9zWSA8IGNoYXJ0U2l6aW5nVmFsdWVzLnRvcFBhZGRpbmcgfHxcbiAgICAgIHJlYWxQb3NZID4gY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQgLSBjaGFydFNpemluZ1ZhbHVlcy5ib3R0b21QYWRkaW5nXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2hhcnREYXRhRGlyZWN0aW9uKGNvbmZpZzogQ29uZmlnKTogQ2hhcnREYXRhRGlyZWN0aW9uIHtcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpIHtcbiAgICAgIHJldHVybiAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIHJldHVybiAndmVydGljYWwnO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tYmluZVNjYWxpbmdJbmZvKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGRlZmF1bHRDb25maWc6IERlZmF1bHRTY2FsaW5nQ29uZmlnLFxuICApOiBOb25FbGVtZW50U2NhbGluZ0NvbmZpZyB7XG4gICAgY29uc3QgcHJvdmlkZWRTY2FsaW5nQ29uZmlnID0gY29uZmlnLnNjYWxpbmdDb25maWc7XG4gICAgY29uc3QgY2hhcnREYXRhRGlyZWN0aW9uID0gZ2V0Q2hhcnREYXRhRGlyZWN0aW9uKGNvbmZpZyk7XG5cbiAgICAvL0lmIHRoZSB1c2VyIHByb3ZpZGVzIGEgZGF0YSBzY2FsZSwgd2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSB0aGF0IHVubGVzcyB0aGV5IGFsc28gcHJvdmlkZWQgYSBzcGVjaWZpYyBzY2FsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYXhpc1xuICAgIGNvbnN0IGRhdGFTY2FsZSA9XG4gICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiYgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmRhdGFTY2FsZVxuICAgICAgICA/IHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5kYXRhU2NhbGVcbiAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMuZGF0YVNjYWxlO1xuICAgIGxldCB2ZXJ0aWNhbEF4aXNTY2FsZSA9IHByb3ZpZGVkU2NhbGluZ0NvbmZpZz8udmVydGljYWxBeGlzU2NhbGU7XG4gICAgaWYgKHZlcnRpY2FsQXhpc1NjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBkYXRhU2NhbGUudHlwZSA9PT0gJ2ZpdCcpIHtcbiAgICAgICAgdmVydGljYWxBeGlzU2NhbGUgPSBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMudmVydGljYWxBeGlzU2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL1RoZSB2ZXJ0aWNhbCBheGlzIGlzIHRoZSBkYXRhIGF4aXMsIHRoZSBkYXRhU2NhbGUgaGFzIGEgdXNlci1pbnB1dHRlZCB2YWx1ZSwgYW5kIHRoZXJlIGlzbid0IGEgdXNlci1pbnB1dHRlZCB2ZXJ0aWNhbEF4aXNTY2FsZVxuICAgICAgICAvLyBTbywgd2UnbGwgcHJldmVudCB0aGUgYXhpcyBzY2FsaW5nIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgZGF0YVNjYWxlXG4gICAgICAgIHZlcnRpY2FsQXhpc1NjYWxlID0gJ25vLXNjYWxlJztcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGhvcml6b250YWxBeGlzU2NhbGUgPSBwcm92aWRlZFNjYWxpbmdDb25maWc/Lmhvcml6b250YWxBeGlzU2NhbGU7XG4gICAgaWYgKGhvcml6b250YWxBeGlzU2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyB8fCBkYXRhU2NhbGUudHlwZSA9PT0gJ2ZpdCcpIHtcbiAgICAgICAgaG9yaXpvbnRhbEF4aXNTY2FsZSA9XG4gICAgICAgICAgZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLmhvcml6b250YWxBeGlzU2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL1RoZSBob3Jpem9udGFsIGF4aXMgaXMgdGhlIGRhdGEgYXhpcywgdGhlIGRhdGFTY2FsZSBoYXMgYSB1c2VyLWlucHV0dGVkIHZhbHVlLCBhbmQgdGhlcmUgaXNuJ3QgYSB1c2VyLWlucHV0dGVkIGhvcml6b250YWxBeGlzU2NhbGVcbiAgICAgICAgLy8gU28sIHdlJ2xsIHByZXZlbnQgdGhlIGF4aXMgc2NhbGluZyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIGRhdGFTY2FsZVxuICAgICAgICBob3Jpem9udGFsQXhpc1NjYWxlID0gJ25vLXNjYWxlJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFTY2FsZTpcbiAgICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnICYmIHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5kYXRhU2NhbGVcbiAgICAgICAgICA/IHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5kYXRhU2NhbGVcbiAgICAgICAgICA6IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy5kYXRhU2NhbGUsXG4gICAgICBob3Jpem9udGFsQXhpc1NjYWxlLFxuICAgICAgdmVydGljYWxBeGlzU2NhbGUsXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6XG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJiBwcm92aWRlZFNjYWxpbmdDb25maWcuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlXG4gICAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlXG4gICAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTpcbiAgICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnICYmIHByb3ZpZGVkU2NhbGluZ0NvbmZpZy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlXG4gICAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZVxuICAgICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICB0YXJnZXRUaWNrQ291bnQ6XG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcudGFyZ2V0VGlja0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3ZpZGVkU2NhbGluZ0NvbmZpZy50YXJnZXRUaWNrQ291bnRcbiAgICAgICAgICA6IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy50YXJnZXRUaWNrQ291bnQsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRGVFbXBoYXNpemVkKFxuICAgIGNvbmZpZzogRmxvd0NvbmZpZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIGlzRGFya2VuZWQ6IGJvb2xlYW4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhpZ2hsaWdodGVkQnVja2V0cyA9IGNvbmZpZy5mbG93Q29uZmlnLnN1YkJ1Y2tldHNDb25maWdcbiAgICAgIC5maWx0ZXIoc2JjID0+IHNiYy5pc0hpZ2hsaWdodGVkID09PSB0cnVlKVxuICAgICAgLm1hcChzYmMgPT4gc2JjLmJ1Y2tldElkKTtcbiAgICBpZiAoaGlnaGxpZ2h0ZWRCdWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNEYXJrZW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChoaWdobGlnaHRlZEJ1Y2tldHMuc29tZShoYiA9PiBoYiA9PT0gaWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlRmxvd0Nvbm5lY3Rpb25QYXRoKFxuICAgIGNvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uUmVuZGVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGR4ID0gY29ubmVjdGlvbi50b3BMaW5lLngyIC0gY29ubmVjdGlvbi50b3BMaW5lLngxO1xuICAgIGNvbnN0IGN1cnZlID0gTWF0aC5hYnMoZHgpICogRkxPV19DT05ORUNUSU9OX0NVUlZFX0NPTlNUQU5UO1xuXG4gICAgY29uc3QgcGF0aCA9IGBcbiAgICAgIE0gJHtjb25uZWN0aW9uLnRvcExpbmUueDF9LCR7Y29ubmVjdGlvbi50b3BMaW5lLnkxfVxuXG4gICAgICBDICR7Y29ubmVjdGlvbi50b3BMaW5lLngxICsgY3VydmV9LCR7Y29ubmVjdGlvbi50b3BMaW5lLnkxfVxuICAgICAgICAke2Nvbm5lY3Rpb24udG9wTGluZS54MiAtIGN1cnZlfSwke2Nvbm5lY3Rpb24udG9wTGluZS55Mn1cbiAgICAgICAgJHtjb25uZWN0aW9uLnRvcExpbmUueDJ9LCR7Y29ubmVjdGlvbi50b3BMaW5lLnkyfVxuXG4gICAgICBMICR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLngyfSwke2Nvbm5lY3Rpb24uYm90dG9tTGluZS55Mn1cblxuICAgICAgQyAke2Nvbm5lY3Rpb24uYm90dG9tTGluZS54MiAtIGN1cnZlfSwke2Nvbm5lY3Rpb24uYm90dG9tTGluZS55Mn1cbiAgICAgICAgJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueDEgKyBjdXJ2ZX0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTF9XG4gICAgICAgICR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLngxfSwke2Nvbm5lY3Rpb24uYm90dG9tTGluZS55MX1cblxuICAgICAgWlxuICAgIGA7XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGN1YmljKFxuICAgIGE6IG51bWJlcixcbiAgICBiOiBudW1iZXIsXG4gICAgYzogbnVtYmVyLFxuICAgIGQ6IG51bWJlcixcbiAgICB0OiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgbXQgPSAxIC0gdDtcbiAgICByZXR1cm4gbXQgKiogMyAqIGEgKyAzICogbXQgKiogMiAqIHQgKiBiICsgMyAqIG10ICogdCAqKiAyICogYyArIHQgKiogMyAqIGQ7XG4gIH1cblxuICBmdW5jdGlvbiBiZXppZXJZQXRYKFxuICAgIHg6IG51bWJlcixcbiAgICBsaW5lOiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH0sXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgY3VydmUgPSBNYXRoLmFicyhsaW5lLngyIC0gbGluZS54MSkgKiBGTE9XX0NPTk5FQ1RJT05fQ1VSVkVfQ09OU1RBTlQ7XG4gICAgY29uc3QgcDAgPSB7IHg6IGxpbmUueDEsIHk6IGxpbmUueTEgfTtcbiAgICBjb25zdCBwMSA9IHsgeDogbGluZS54MSArIGN1cnZlLCB5OiBsaW5lLnkxIH07XG4gICAgY29uc3QgcDIgPSB7IHg6IGxpbmUueDIgLSBjdXJ2ZSwgeTogbGluZS55MiB9O1xuICAgIGNvbnN0IHAzID0geyB4OiBsaW5lLngyLCB5OiBsaW5lLnkyIH07XG5cbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IDE7XG5cbiAgICAvLyBCaW5hcnkgc2VhcmNoIGZvciB0IHdoZXJlIGJlemllclgodCkgfj0geFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xuICAgICAgY29uc3QgdCA9IChsbyArIGhpKSAvIDI7XG4gICAgICBjb25zdCBieCA9IGN1YmljKHAwLngsIHAxLngsIHAyLngsIHAzLngsIHQpO1xuXG4gICAgICBpZiAoYnggPCB4KSBsbyA9IHQ7XG4gICAgICBlbHNlIGhpID0gdDtcbiAgICB9XG5cbiAgICBjb25zdCB0ID0gKGxvICsgaGkpIC8gMjtcbiAgICByZXR1cm4gY3ViaWMocDAueSwgcDEueSwgcDIueSwgcDMueSwgdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0lmUG9pbnRXaXRoaW5Db25uZWN0aW9uKFxuICAgIGNvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uUmVuZGVyLFxuICAgIHBvaW50WDogbnVtYmVyLFxuICAgIHBvaW50WTogbnVtYmVyLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCB0b3BZID0gYmV6aWVyWUF0WChwb2ludFgsIGNvbm5lY3Rpb24udG9wTGluZSk7XG5cbiAgICBjb25zdCBib3R0b21ZID0gYmV6aWVyWUF0WChwb2ludFgsIGNvbm5lY3Rpb24uYm90dG9tTGluZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcG9pbnRYID49IGNvbm5lY3Rpb24udG9wTGluZS54MSAmJlxuICAgICAgcG9pbnRYIDw9IGNvbm5lY3Rpb24udG9wTGluZS54MiAmJlxuICAgICAgcG9pbnRZID49IE1hdGgubWluKHRvcFksIGJvdHRvbVkpICYmXG4gICAgICBwb2ludFkgPD0gTWF0aC5tYXgodG9wWSwgYm90dG9tWSlcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rmxvd0J1Y2tldEluZGV4Rm9ySG92ZXIoXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIHhQb3M6IG51bWJlcixcbiAgKTogeyBpbmRleDogbnVtYmVyOyBhcmVhOiAnYmFyJyB8ICdjb25uZWN0aW9uJyB9IHwgbnVsbCB7XG4gICAgbGV0IGJ1Y2tldEluZGV4ID0gMDtcbiAgICBjb25zdCBidWNrZXRMZWZ0RWRnZSA9IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldDtcbiAgICBjb25zdCB0b3RhbEJ1Y2tldEdhcCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwO1xuICAgIGlmIChidWNrZXRMZWZ0RWRnZSA+IHhQb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB3aGlsZSAoYnVja2V0TGVmdEVkZ2UgKyBidWNrZXRJbmRleCAqIHRvdGFsQnVja2V0R2FwIDwgeFBvcykge1xuICAgICAgaWYgKGJ1Y2tldExlZnRFZGdlICsgKGJ1Y2tldEluZGV4ICsgMSkgKiB0b3RhbEJ1Y2tldEdhcCA+IHhQb3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGJ1Y2tldExlZnRFZGdlICtcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4ICogdG90YWxCdWNrZXRHYXAgK1xuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSA+XG4gICAgICAgICAgeFBvc1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXg6IGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgYXJlYTogJ2JhcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXg6IGJ1Y2tldEluZGV4LFxuICAgICAgICAgICAgYXJlYTogJ2Nvbm5lY3Rpb24nLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1Y2tldEluZGV4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy9UaGVzZSBvdmVybG9hZHMgZW5zdXJlIHRoZSBmdW5jdGlvbiBrbm93cyB0aGF0LCBpZiB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBkZWZpbmVkIG9uIGlucHV0LCB0aGV5J2xsIGJlIGRlZmluZWQgb24gb3V0cHV0XG4gIGZ1bmN0aW9uIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICBhbmNob3JYOiBudW1iZXIsXG4gICAgYW5jaG9yWTogbnVtYmVyLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IHsgYW5jaG9yWDogbnVtYmVyOyBhbmNob3JZOiBudW1iZXIgfTtcblxuICBmdW5jdGlvbiBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgYW5jaG9yWDogbnVtYmVyLFxuICAgIGFuY2hvclk6IG51bWJlcixcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICk6IHtcbiAgICBhbmNob3JYOiBudW1iZXI7XG4gICAgYW5jaG9yWTogbnVtYmVyO1xuICAgIGFuY2hvcldpZHRoOiBudW1iZXI7XG4gICAgYW5jaG9ySGVpZ2h0OiBudW1iZXI7XG4gIH07XG5cbiAgZnVuY3Rpb24gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgIGFuY2hvclg6IG51bWJlcixcbiAgICBhbmNob3JZOiBudW1iZXIsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICB3aWR0aD86IG51bWJlcixcbiAgICBoZWlnaHQ/OiBudW1iZXIsXG4gICk6IHtcbiAgICBhbmNob3JYOiBudW1iZXI7XG4gICAgYW5jaG9yWTogbnVtYmVyO1xuICAgIGFuY2hvcldpZHRoPzogbnVtYmVyO1xuICAgIGFuY2hvckhlaWdodD86IG51bWJlcjtcbiAgfSB7XG4gICAgbGV0IHJldEFuY2hvclggPSBhbmNob3JYO1xuICAgIGxldCByZXRBbmNob3JZID0gYW5jaG9yWTtcbiAgICBsZXQgcmV0V2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHdpZHRoO1xuICAgIGxldCByZXRIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IGhlaWdodDtcbiAgICBpZiAocmV0QW5jaG9yWCA+IGRpbWVuc2lvbnMud2lkdGgpIHtcbiAgICAgIHJldEFuY2hvclggPSBkaW1lbnNpb25zLndpZHRoO1xuICAgICAgaWYgKHJldFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0V2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmV0QW5jaG9yWCA8IDApIHtcbiAgICAgIHJldEFuY2hvclggPSAwO1xuICAgICAgaWYgKHJldFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0V2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmV0QW5jaG9yWSA+IGRpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICByZXRBbmNob3JZID0gZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgICBpZiAocmV0SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0SGVpZ2h0ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldEFuY2hvclkgPCAwKSB7XG4gICAgICByZXRBbmNob3JZID0gMDtcbiAgICAgIGlmIChyZXRIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXRIZWlnaHQgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JYOiByZXRBbmNob3JYLFxuICAgICAgYW5jaG9yWTogcmV0QW5jaG9yWSxcbiAgICAgIGFuY2hvcldpZHRoOiByZXRXaWR0aCxcbiAgICAgIGFuY2hvckhlaWdodDogcmV0SGVpZ2h0LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
3768
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV2RSxPQUFPLEVBSUwsd0JBQXdCLEVBSXhCLHFCQUFxQixFQUlyQixrQ0FBa0MsR0FHbkMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLEtBQVcsS0FBSyxDQTAxTHJCO0FBMTFMRCxXQUFpQixLQUFLO0lBQ1AseUJBQW1CLEdBQUc7UUFDakMsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLGdDQUFnQztRQUNoQyxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztR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TUFBTSxJQUFJLEdBQUc7VUFDUCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7O1VBRTlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0RCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7O1VBRTlDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTs7VUFFcEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtVQUM1RCxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1VBQzVELFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTs7O0tBR3pELENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLEtBQUssQ0FDWixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTLEVBQ1QsQ0FBUztRQUVULE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFNBQVMsVUFBVSxDQUNqQixDQUFTLEVBQ1QsSUFLQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsOEJBQThCLENBQUM7UUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVgsNENBQTRDO1FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFNUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztnQkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDOztnQkFDZCxFQUFFLEdBQUcsQ0FB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LENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQy9CLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxVQUFVO1lBQ25CLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxFQTExTGdCLEtBQUssS0FBTCxLQUFLLFFBMDFMckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBhcmMsIGFyZWEsIGxpbmUsIHBpZSB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IHV0Y0Zvcm1hdCB9IGZyb20gJ2QzLXRpbWUtZm9ybWF0JztcbmltcG9ydCB7IHN1bSwgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEYXlzUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9kYXlzLnBpcGUnO1xuaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBQZXJjZW50YWdlUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9wZXJjZW50YWdlLnBpcGUnO1xuaW1wb3J0IHsgU21hbGxDdXJyZW5jeVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvc21hbGwtY3VycmVuY3kucGlwZSc7XG5pbXBvcnQgeyBTbWFsbE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvc21hbGwtbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgQ2FsbG91dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL292ZXJsYXkvY2FsbG91dC9jYWxsb3V0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDaGFydERhdGFEaXJlY3Rpb24sXG4gIENoYXJ0U2NhbGVFbGVtZW50LFxuICBDb250YWluZXJTY2FsaW5nVHlwZSxcbiAgRGVmYXVsdERvbnV0U2l6aW5nQ29uZmlnLFxuICBEZWZhdWx0U2NhbGluZ0NvbmZpZyxcbiAgRG9udXRTaXppbmdDb25maWcsXG4gIEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgZW1wdHlDaGFydFNjYWxlVmFsdWVzLFxuICBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgRnVsbEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICBGdWxsU2NhbGluZ0NvbmZpZyxcbiAgZ2V0RGVmYXVsdFNjYWxpbmdDb25maWdCeUNoYXJ0VHlwZSxcbiAgTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gIFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyxcbn0gZnJvbSAnLi9jaGFydC1zY2FsaW5nJztcblxuZXhwb3J0IG5hbWVzcGFjZSBDaGFydCB7XG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0Q29sb3JQYWxldHRlID0gW1xuICAgIC8vQmFzZSBjb2xvcnNcbiAgICAnLS1iYWphLWJsYXN0LTUwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNTAnLFxuICAgICctLWZ5cmUtNTAnLFxuICAgICctLXRhbmctNTAnLFxuICAgICctLXB1cnAtNjAnLFxuICAgICctLXJvc2ktNzAnLFxuICAgIC8vU2hpZnQgbGlnaHRlciBmcm9tIGJhc2UgYnkgLTIwXG4gICAgJy0tYmFqYS1ibGFzdC0zMCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTMwJyxcbiAgICAnLS1meXJlLTMwJyxcbiAgICAnLS10YW5nLTMwJyxcbiAgICAnLS1wdXJwLTQwJyxcbiAgICAnLS1yb3NpLTUwJyxcbiAgICAvL1NoaWZ0IGRhcmtlciBmcm9tIGJhc2UgYnkgKzIwXG4gICAgJy0tYmFqYS1ibGFzdC03MCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTcwJyxcbiAgICAnLS1meXJlLTcwJyxcbiAgICAnLS10YW5nLTcwJyxcbiAgICAnLS1wdXJwLTgwJyxcbiAgICAnLS1yb3NpLTkwJyxcbiAgXTtcblxuICBleHBvcnQgZnVuY3Rpb24gY2hhcnQoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgZGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIHJldHVybiBjb25maWcudHlwZSA9PT0gJ2xpbmUnXG4gICAgICA/IGxpbmVzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICdhcmVhJ1xuICAgICAgPyBhcmVhcyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnZG9udXQnXG4gICAgICA/IGFyY3MoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJ1xuICAgICAgPyBob3Jpem9udGFsQmFycyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnYmFyJ1xuICAgICAgPyBiYXJzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT09ICd3YXRlcmZhbGwnXG4gICAgICA/IHdhdGVyZmFsbChjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpXG4gICAgICA6IGNvbmZpZy50eXBlID09PSAnZnVubmVsJ1xuICAgICAgPyBmdW5uZWwoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PT0gJ2Zsb3cnXG4gICAgICA/IGZsb3dzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogZW1wdHlDaGFydDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVzKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnbGluZScpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IGhpZGRlbkRhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGlmIChoaWRkZW5EYXRhLnR5cGUgPT09ICdsYWJlbGVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgTGFiZWxlZCBzZXJpZXMgYXJlbid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIGxpbmUgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShoaWRkZW5EYXRhKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgU3VwcGxlbWVudGFyeSB5IHZhbHVlcyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBub24tYmFyIGNoYXJ0c1wiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICB3YXJuVW5zdXBwb3J0ZWRQYXR0ZXJucyhoaWRkZW5EYXRhLCBbJ3N0cmlwZWQnLCAnZG90cyddLCAnbGluZScpO1xuICAgIC8vVGhpcyBhc3NpZ25tZW50IG1ha2VzIHR5cGVzY3JpcHQgcmVjb2duaXplIHRoZSBhY3R1YWwgdHlwZSAoVGltZXNlcmllc0RhdGEpXG4gICAgY29uc3QgZGF0YSA9IGhpZGRlbkRhdGE7XG5cbiAgICBjb25zdCB7IGRhdGVGb3JtYXQsIHBpcGVUcmFuc2Zvcm0sIGNvbG9ycyB9ID0gZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhcbiAgICAgIGFsbERhdGEsXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICk7XG5cbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrQ291bnQgPSBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIGNvbnN0IHhUaWNrcyA9IGdlbmVyYXRlVGltZXNlcmllc1RpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIHRpY2tDb3VudCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApLm1hcCh0aWNrID0+IHRvWFRpY2sodGljaykpO1xuICAgIGNvbnN0IHhTY2FsZSA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldCArIGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcCAqIGluZGV4XG4gICAgICApO1xuICAgIH07XG4gICAgY29uc3QgeyBzY2FsZSwgdGlja3M6IGRhdGFUaWNrcyB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgeVRpY2tzID0gZGF0YVRpY2tzLm1hcCh0aWNrID0+IHRvWVRpY2sodGljaykpO1xuXG4gICAgY29uc3QgaW5kaWNlcyA9IGRhdGEueC5tYXAoKF8sIGkpID0+IGkpO1xuICAgIGNvbnN0IGxpbmVzID1cbiAgICAgIGRhdGEueC5sZW5ndGggPiAxXG4gICAgICAgID8gZGF0YS55cy5tYXAoeSA9PiAoe1xuICAgICAgICAgICAgbGluZTogbGluZTxudW1iZXI+KFxuICAgICAgICAgICAgICBpID0+IHhTY2FsZShpKSxcbiAgICAgICAgICAgICAgaSA9PiBzY2FsZSh5LnZhbHVlc1tpXSwgeS5pc1NlY29uZGFyeSksXG4gICAgICAgICAgICApKGluZGljZXMpLFxuICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IGNpcmNsZXMgPVxuICAgICAgZGF0YS54Lmxlbmd0aCA9PT0gMVxuICAgICAgICA/IGRhdGEueXMubWFwKCh5U2VyaWVzLCBpKSA9PiAoe1xuICAgICAgICAgICAgY3g6IHhTY2FsZSgwKSxcbiAgICAgICAgICAgIGN5OiBzY2FsZSh5U2VyaWVzLnZhbHVlc1swXSwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCAwKSksXG4gICAgICAgICAgfSkpXG4gICAgICAgIDogW107XG5cbiAgICBjb25zdCB5T2Zmc2V0ID0gY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZztcbiAgICBjb25zdCBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IGRhdGEueXMuZmxhdE1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4gKHtcbiAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh2YWwsIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgpKSxcbiAgICAgICAgeVBvczogc2NhbGUodmFsLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4KSkgLSB5T2Zmc2V0LFxuICAgICAgICB4UG9zOiB4U2NhbGUoeEluZGV4KSxcbiAgICAgICAgYW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwgfHxcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeEhvdmVySW5kaWNlcyA9IGdldEJ1Y2tldEFuZENsdXN0ZXJOdW1Gb3JIb3ZlcihcbiAgICAgICAgcmVhbFBvc1gsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGEueC5sZW5ndGgsXG4gICAgICApO1xuICAgICAgaWYgKCF4SG92ZXJJbmRpY2VzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBidWNrZXROdW06IHhJbmRleCB9ID0geEhvdmVySW5kaWNlcztcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoeEluZGV4KTtcbiAgICAgIGNvbnN0IHZpc2libGVZSW5kZXggPSBmaW5kTmVhcmVzdEluZGV4V2l0aFNlY29uZGFyeShcbiAgICAgICAgZGF0YS55cy5tYXAoKHksIGkpID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHkudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgaXNTZWNvbmRhcnk6IGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4KSxcbiAgICAgICAgfSkpLFxuICAgICAgICBwb3MueSxcbiAgICAgICAgc2NhbGUsXG4gICAgICApO1xuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKCh5LCBpKSA9PlxuICAgICAgICBzY2FsZSh5LnZhbHVlc1t4SW5kZXhdLCBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGksIHhJbmRleCkpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZm9ybWF0ID0gKGRhdGU6IERhdGUpID0+XG4gICAgICAgIGZvcm1hdGVkRGF0ZShjb25maWcuZGF0ZUZvcm1hdCB8fCAnZGF5JywgZGF0ZSk7XG5cbiAgICAgIC8vIENsYW1wIGluIGNoYXJ0LWxvY2FsIGNvb3JkaW5hdGVzIGZpcnN0IHNvIHRoZSB0b29sdGlwIHN0YXlzIHdpdGhpbiB0aGVcbiAgICAgIC8vIHZpc2libGUgY2hhcnQgYXJlYSwgdGhlbiB0cmFuc2xhdGUgdG8gdmlld3BvcnQgY29vcmRpbmF0ZXMgYnkgYWRkaW5nXG4gICAgICAvLyBwb3MucmVjdC54L3kgKHdoaWNoIGFyZSB2aWV3cG9ydC1yZWxhdGl2ZSBmcm9tIGdldEJvdW5kaW5nQ2xpZW50UmVjdCkuXG4gICAgICBjb25zdCBsb2NhbEFuY2hvclggPSB4IC0gcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSB5c1t2aXNpYmxlWUluZGV4XSAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZIH0gPSBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgIFNNQUxMX1BBRERJTkcsXG4gICAgICAgIDAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG92ZXJUeXBlOiAnc3RhbmRhcmQnLFxuICAgICAgICB4LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHlzLFxuICAgICAgICB5SW5kZXgsXG4gICAgICAgIHZpc2libGVZSW5kZXgsXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTogZm9ybWF0KG5ldyBEYXRlKGRhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogZGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgIHkudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIGluZGV4LCB4SW5kZXgpLFxuICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICApID8/ICctJyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgeFRpY2tzLFxuICAgICAgeVRpY2tzLFxuICAgICAgY29sb3JzLFxuICAgICAgbGluZXMsXG4gICAgICBjaXJjbGVzLFxuICAgICAgaG92ZXIsXG4gICAgICBiYXJzOiBbXSxcbiAgICAgIGFyZWFzOiBbXSxcbiAgICAgIGFyY3M6IFtdLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgICAgZGF0YUxhYmVscyxcbiAgICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICAgIGdyYWRpZW50czogW10sXG4gICAgICBmbG93Q29ubmVjdGlvbnM6IFtdLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlYXMoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdhcmVhJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YTogdW5jaGVja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgaWYgKHVuY2hlY2tlZERhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBMYWJlbGVkIHNlcmllcyBhcmVuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBmb3IgYXJlYSBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zaG93RGF0YUxhYmVscyA9PT0gdHJ1ZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJIZWFkcyB1cCEgRGF0YSBsYWJlbHMgYXJlbid0IHN1cHBvcnRlZCBmb3IgYW55IHN0YWNrZWQgY2hhcnQgdHlwZVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEodW5jaGVja2VkRGF0YSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3Igbm9uLWJhciBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgd2FyblVuc3VwcG9ydGVkUGF0dGVybnModW5jaGVja2VkRGF0YSwgWydzdHJpcGVkJ10sICdhcmVhJyk7XG4gICAgLy9UaGlzIGFzc2lnbm1lbnQgbWFrZXMgdHlwZXNjcmlwdCByZWNvZ25pemUgdGhlIGFjdHVhbCB0eXBlIChUaW1lc2VyaWVzRGF0YSlcbiAgICBjb25zdCBkYXRhID0gdW5jaGVja2VkRGF0YTtcblxuICAgIGNvbnN0IHsgZGF0ZUZvcm1hdCwgcGlwZVRyYW5zZm9ybSwgY29sb3JzIH0gPSBnZXRGb3JtYXR0aW5nQW5kQ29sb3JzKFxuICAgICAgYWxsRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBjb25maWcsXG4gICAgKTtcbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBwaXBlVHJhbnNmb3JtLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrQ291bnQgPSBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXMpO1xuICAgIGNvbnN0IHhUaWNrcyA9IGdlbmVyYXRlVGltZXNlcmllc1RpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIHRpY2tDb3VudCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICApLm1hcCh0aWNrID0+IHRvWFRpY2sodGljaykpO1xuICAgIGNvbnN0IHhTY2FsZSA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldCArIGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcCAqIGluZGV4XG4gICAgICApO1xuICAgIH07XG4gICAgY29uc3QgeyBzY2FsZSwgdGlja3M6IGRhdGFUaWNrcyB9ID0gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICk7XG4gICAgY29uc3QgeVRpY2tzID0gZGF0YVRpY2tzLm1hcCh0aWNrID0+IHRvWVRpY2sodGljaykpO1xuICAgIGNvbnN0IHplcm9BeGlzUG9zVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgYXJlYXMgPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PiAoe1xuICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgYXJlYTogYXJlYTxudW1iZXI+KFxuICAgICAgICBpID0+IHhTY2FsZShpKSxcbiAgICAgICAgaSA9PiBnZXRCYXJZSW5mbyhkYXRhLCBjb25maWcsIHlJbmRleCwgaSwgc2NhbGUpLnlWYWx1ZSxcbiAgICAgICAgaSA9PlxuICAgICAgICAgIGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgeUluZGV4LCBpLCBzY2FsZSkueVZhbHVlICtcbiAgICAgICAgICBnZXRCYXJZSW5mbyhkYXRhLCBjb25maWcsIHlJbmRleCwgaSwgc2NhbGUpLmhlaWdodCxcbiAgICAgICkoaW5kaWNlcyksXG4gICAgfSkpO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7XG4gICAgICByZWN0OiBET01SZWN0O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgICAgY29udGFpbmVyU2Nyb2xsWTogbnVtYmVyO1xuICAgIH0pOiBIb3ZlclJldHVybiB7XG4gICAgICBjb25zdCByZWFsUG9zWCA9IHBvcy54ICsgcG9zLmNvbnRhaW5lclNjcm9sbFg7XG4gICAgICBjb25zdCByZWFsUG9zWSA9IHBvcy55ICsgcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzID09PSBudWxsIHx8XG4gICAgICAgIGdldElmSG92ZXJPdXRPZkJvdW5kcyhcbiAgICAgICAgICBwb3MueCxcbiAgICAgICAgICBwb3MueSxcbiAgICAgICAgICByZWFsUG9zWCxcbiAgICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHhIb3ZlckluZGljZXMgPSBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgICAgIHJlYWxQb3NYLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhLngubGVuZ3RoLFxuICAgICAgKTtcbiAgICAgIGlmICgheEhvdmVySW5kaWNlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYnVja2V0TnVtOiB4SW5kZXggfSA9IHhIb3ZlckluZGljZXM7XG4gICAgICBjb25zdCB4ID0geFNjYWxlKHhJbmRleCk7XG4gICAgICBjb25zdCBmdWxsWXMgPSBkYXRhLnlzLm1hcCgoXywgbWFwWUluZGV4KSA9PlxuICAgICAgICBnZXRCYXJZSW5mbyhkYXRhLCBjb25maWcsIG1hcFlJbmRleCwgeEluZGV4LCBzY2FsZSksXG4gICAgICApO1xuICAgICAgY29uc3QgeXMgPSBmdWxsWXMubWFwKHkgPT4geS55VmFsdWUpO1xuICAgICAgLy9UaGlzIGlzIHRoZSB5cyBhcnJheSwgYnV0IHNoaWZ0ZWQgc28gdGhhdCB0aGUgeSBwb3NpdGlvbiBmb3IgbmVnYXRpdmUgdmFsdWVzIGlzIGF3YXkgZnJvbSB0aGUgYXhpcyAoZm9yIHRoZSBob3ZlciBjaXJjbGVzKVxuICAgICAgY29uc3Qgc2hpZnRlZFlzID0gZnVsbFlzLm1hcCh5ID0+IHtcbiAgICAgICAgaWYgKHkueVZhbHVlID49IHplcm9BeGlzUG9zVmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHkueVZhbHVlICsgeS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHkueVZhbHVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB5UG9zU2lnbiA9IHplcm9BeGlzUG9zVmFsIC0gcG9zLnk7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IC0xO1xuICAgICAgaWYgKHlQb3NTaWduIDwgMCAmJiBkYXRhLnlzLmZpbmQoeSA9PiB5LnZhbHVlcy5maW5kKHZhbCA9PiB2YWwgPCAwKSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKHlzW2ldID49IHplcm9BeGlzUG9zVmFsICYmIHlzW2ldIDwgcG9zLnkpIHtcbiAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHlzW2ldIDw9IHplcm9BeGlzUG9zVmFsICYmIHlzW2ldIDwgcG9zLnkpIHtcbiAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodmlzaWJsZVlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHBvcy55IDw9IHplcm9BeGlzUG9zVmFsKSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5taW4oLi4ueXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0geXMuaW5kZXhPZihNYXRoLm1heCguLi55cykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IHggLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IHlzW3Zpc2libGVZSW5kZXhdIC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclkgfSA9IGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgU01BTExfUEFERElORyxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCcsXG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXM6IHNoaWZ0ZWRZcyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGRhdGU6IHV0Y0Zvcm1hdCgnJUIgJWQsICVZJykobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiBkYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB2YWx1ZTogcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB5LnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaW5kZXgsIHhJbmRleCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgeFRpY2tzLFxuICAgICAgeVRpY2tzLFxuICAgICAgY29sb3JzLFxuICAgICAgYXJlYXMsXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGhvdmVyLFxuICAgICAgYmFyczogW10sXG4gICAgICBhcmNzOiBbXSxcbiAgICAgIGhvcml6b250YWxCYXJzOiBbXSxcbiAgICAgIGRhdGFMYWJlbHM6IFtdLFxuICAgICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgICAgZ3JhZGllbnRzOiBbXSxcbiAgICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBiYXJzKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnYmFyJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YSwgdmlzaWJsZUluZGljZXMsIHZpc2libGVTdXBwSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAoXG4gICAgICBjb25maWcuc2hvd0RhdGFMYWJlbHMgPT09IHRydWUgJiZcbiAgICAgIGlzU3RhY2tlZERhdGEoY29uZmlnKSAmJlxuICAgICAgIWlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGEsIGNvbmZpZylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIERhdGEgbGFiZWxzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGFueSBzdGFja2VkIGNoYXJ0IHR5cGVcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiZcbiAgICAgIGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSAmJlxuICAgICAgIWlzR3JvdXBpbmdUeXBlRXhjZXB0aW9uKGRhdGEsIGNvbmZpZylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3IgY2x1c3RlcmVkIGRhdGEgKGp1c3QgdXNlIGFub3RoZXIgbm9ybWFsIHkgc2VyaWVzKVwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBlbXB0eUNoYXJ0O1xuICAgIH1cbiAgICByZXR1cm4gYmFyc0hlbHBlcihcbiAgICAgIGNvbmZpZyxcbiAgICAgIGFsbERhdGEsXG4gICAgICBkYXRhLFxuICAgICAgdmlzaWJsZUluZGljZXMsXG4gICAgICB2aXNpYmxlU3VwcEluZGljZXMsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZnVubmVsKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnZnVubmVsJykpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdjb25maWcnIH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGF0YSwgdmlzaWJsZUluZGljZXMsIHZpc2libGVTdXBwSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICByZXR1cm4gYmFyc0hlbHBlcihcbiAgICAgIGNvbmZpZyxcbiAgICAgIGFsbERhdGEsXG4gICAgICBkYXRhLFxuICAgICAgdmlzaWJsZUluZGljZXMsXG4gICAgICB2aXNpYmxlU3VwcEluZGljZXMsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgdHJ1ZSxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiB3YXRlcmZhbGwoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICd3YXRlcmZhbGwnKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiB1bmNoZWNrZWREYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEodW5jaGVja2VkRGF0YSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFN1cHBsZW1lbnRhcnkgeSB2YWx1ZXMgYXJlbid0IHN1cHBvcnRlZCBmb3Igbm9uLWJhciBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgV2F0ZXJmYWxsIGNoYXJ0cyBkbyBub3QgY3VycmVudGx5IGhhdmUgdHdvLWF4aXMgc3VwcG9ydCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHdhcm5VbnN1cHBvcnRlZFBhdHRlcm5zKHVuY2hlY2tlZERhdGEsIFtdLCAnd2F0ZXJmYWxsJyk7XG5cbiAgICByZXR1cm4gYmFyc0hlbHBlcihcbiAgICAgIGNvbmZpZyxcbiAgICAgIGFsbERhdGEsXG4gICAgICB1bmNoZWNrZWREYXRhLFxuICAgICAgdmlzaWJsZUluZGljZXMsXG4gICAgICBbXSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhcnNIZWxwZXIoXG4gICAgY29uZmlnOiBDb25maWdXaXRoRnVsbFNjYWxpbmcsXG4gICAgYWxsRGF0YTogTm9uRmxvd0RhdGEsXG4gICAgdW5jaGVja2VkRGF0YTogTm9uRmxvd0RhdGEsXG4gICAgdmlzaWJsZUluZGljZXM6IG51bWJlcltdLFxuICAgIHZpc2libGVTdXBwSW5kaWNlczogbnVtYmVyW10sXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICBpc0Z1bm5lbDogYm9vbGVhbixcbiAgICBpc1dhdGVyZmFsbDogYm9vbGVhbixcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgY29uc3QgeyBkYXRlRm9ybWF0LCBwaXBlVHJhbnNmb3JtLCBjb2xvckluZGljZXMsIGNvbG9ycyB9ID1cbiAgICAgIGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoYWxsRGF0YSwgdW5jaGVja2VkRGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCB3YXRlcmZhbGxEYXRhID0gd2F0ZXJmYWxsVHJhbnNmb3JtKHVuY2hlY2tlZERhdGEsIGlzV2F0ZXJmYWxsKTtcbiAgICBjb25zdCBkYXRhID0gaXNXYXRlcmZhbGwgPyB3YXRlcmZhbGxEYXRhLmRhdGEgOiB1bmNoZWNrZWREYXRhO1xuXG4gICAgY29uc3QgY2hhcnRTaXppbmdWYWx1ZXMgPSBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRhdGEsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKTtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdzaXppbmcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgdGlja0NvdW50ID0gZ2V0QnVja2V0VGlja0NvdW50KGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgICBjb25zdCB4VGlja3MgPSAoXG4gICAgICBkYXRhLnR5cGUgPT09ICdsYWJlbGVkJ1xuICAgICAgICA/IGdlbmVyYXRlTGFiZWxsZWRUaWNrcyhkYXRhLCBjb25maWcsIHRpY2tDb3VudCwgY2hhcnRTaXppbmdWYWx1ZXMpXG4gICAgICAgIDogZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgdGlja0NvdW50LFxuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgIClcbiAgICApLm1hcCh0aWNrID0+IHRvWFRpY2sodGljaykpO1xuICAgIGNvbnN0IHsgc2NhbGUsIHRpY2tzOiBkYXRhVGlja3MgfSA9IGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICApO1xuICAgIGNvbnN0IHlUaWNrcyA9IGRhdGFUaWNrcy5tYXAodGljayA9PiB0b1lUaWNrKHRpY2spKTtcbiAgICBjb25zdCB6ZXJvQXhpc1Bvc1ZhbCA9IHNjYWxlKDAsIHRydWUpO1xuXG4gICAgY29uc3QgZ3JhZGllbnRzOiBSZWN0W11bXSA9IFtdO1xuICAgIGNvbnN0IGJhcnM6IFJlY3RbXVtdID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5kU2VyaWVzR3JhZGllbnRzOiBSZWN0W10gPSBbXTtcbiAgICAgIGNvbnN0IGluZFNlcmllc0JhcnMgPSB5LnZhbHVlcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgeVZhbHVlLCBoZWlnaHQgfSA9IGdldEJhcllJbmZvKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBzY2FsZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeFZhbHVlID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpID8geUluZGV4IDogMCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzRnVubmVsKSB7XG4gICAgICAgICAgLy9UaGUgZW1wdHkgZ3JhZGllbnQgc3RpbGwgbmVlZHMgdG8gYmUgaW5zZXJ0ZWQgdG8ga2VlcCBkYXRhIGFsaWduZWRcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGluZFNlcmllc0dyYWRpZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IHlWYWx1ZTogcHJldkJhcllWYWwgfSA9IGdldEJhcllJbmZvKFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICAgICAgaW5kZXggLSAxLFxuICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGluZFNlcmllc0dyYWRpZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdyZWN0JyxcbiAgICAgICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgICAgICB5OiBwcmV2QmFyWVZhbCxcbiAgICAgICAgICAgICAgd2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUsXG4gICAgICAgICAgICAgIGhlaWdodDogTWF0aC5tYXgoeVZhbHVlIC0gcHJldkJhcllWYWwsIDApLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFyOiBSZWN0ID0ge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB3aWR0aDogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGJhcjtcbiAgICAgIH0pO1xuICAgICAgZ3JhZGllbnRzLnB1c2goaW5kU2VyaWVzR3JhZGllbnRzKTtcbiAgICAgIHJldHVybiBpbmRTZXJpZXNCYXJzO1xuICAgIH0pO1xuICAgIGxldCBzdXBwQmFyczogUmVjdFtdW10gPSBbXTtcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkpIHtcbiAgICAgIHN1cHBCYXJzID0gZGF0YS5zdXBwbGVtZW50YXJ5WXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICAgIHkudmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHlWYWx1ZSwgaGVpZ2h0IH0gPSBnZXRCYXJZSW5mbyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB5SW5kZXgsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhWYWx1ZSA9IGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB5LnN1cHBsZW1lbnRhbEluZGV4ICsgMSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgICAgeTogeVZhbHVlLFxuICAgICAgICAgICAgd2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYmFycy5wdXNoKC4uLnN1cHBCYXJzKTtcbiAgICAgIGNvbG9ycy5wdXNoKFxuICAgICAgICAuLi5kYXRhLnN1cHBsZW1lbnRhcnlZcy5tYXAoeSA9PlxuICAgICAgICAgIGdldENvbG9yKHksIGNvbG9ySW5kaWNlcywgY29uZmlnLmNvbG9ycyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHdhdGVyZmFsbExpbmVzOiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeDI6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH1bXSA9IFtdO1xuICAgIGlmIChpc1dhdGVyZmFsbCkge1xuICAgICAgLy9Nb3ZlIGJhcnMgYmFzZWQgb24gaGVpZ2h0IG9mIHByZXZpb3VzIGJhcnMgKGV4Y2VwdCB0aGUgdG90YWwgYmFyKVxuICAgICAgbGV0IGJhck9mZnNldFJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgbGV0IGJhck9mZnNldENoYW5nZSA9IDA7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmFycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGJhcklzTmVnYXRpdmUgPVxuICAgICAgICAgICAgYmFyc1tqXVtpXS55ID49IHplcm9BeGlzUG9zVmFsICYmIGJhcnNbal1baV0uaGVpZ2h0ID4gMDtcbiAgICAgICAgICBpZiAoYmFySXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgYmFyT2Zmc2V0Q2hhbmdlIC09IGJhcnNbal1baV0uaGVpZ2h0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXJPZmZzZXRDaGFuZ2UgKz0gYmFyc1tqXVtpXS5oZWlnaHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJhcnNbal1baV0ub2Zmc2V0ID0gYmFyT2Zmc2V0UnVubmluZ1RvdGFsO1xuICAgICAgICAgIGJhcnNbal1baV0ueSAtPSBiYXJPZmZzZXRSdW5uaW5nVG90YWw7XG4gICAgICAgICAgaWYgKGogPT09IGJhcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgeDEgPSBiYXJzW2pdW2ldLnggKyBiYXJzW2JhcnMubGVuZ3RoIC0gMV1baV0ud2lkdGg7XG4gICAgICAgICAgICBjb25zdCB5MSA9IGJhcnNbal1baV0ueSArIChiYXJJc05lZ2F0aXZlID8gYmFyc1tqXVtpXS5oZWlnaHQgOiAwKTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0gYmFyc1tqXVtpICsgMV0ueDtcbiAgICAgICAgICAgIGNvbnN0IHkyID0geTE7XG4gICAgICAgICAgICB3YXRlcmZhbGxMaW5lcy5wdXNoKHtcbiAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgICB4MixcbiAgICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYmFyT2Zmc2V0UnVubmluZ1RvdGFsICs9IGJhck9mZnNldENoYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IGRhdGEueXMuZmxhdE1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdWJMYWJlbHM6IERhdGFMYWJlbFtdID0geS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBpc05lZ2F0aXZlQmFyID1cbiAgICAgICAgICBiYXJzW3lJbmRleF1beEluZGV4XS55ID49IHplcm9BeGlzUG9zVmFsICYmXG4gICAgICAgICAgYmFyc1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0ID4gMDtcbiAgICAgICAgY29uc3QgeU9mZnNldCA9IGlzTmVnYXRpdmVCYXJcbiAgICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgK1xuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemUgK1xuICAgICAgICAgICAgYmFyc1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0XG4gICAgICAgICAgOiAtY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICBwaXBlVHJhbnNmb3JtKHZhbCwgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCkpID8/ICcnLFxuICAgICAgICAgIHlQb3M6XG4gICAgICAgICAgICAoaXNGdW5uZWwgJiYgZ3JhZGllbnRzW3lJbmRleF1beEluZGV4XS5oZWlnaHQgIT09IDBcbiAgICAgICAgICAgICAgPyBncmFkaWVudHNbeUluZGV4XVt4SW5kZXhdLnlcbiAgICAgICAgICAgICAgOiBiYXJzW3lJbmRleF1beEluZGV4XS55KSArIHlPZmZzZXQsXG4gICAgICAgICAgeFBvczogYmFyc1t5SW5kZXhdW3hJbmRleF0ueCArIGJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoIC8gMixcbiAgICAgICAgICBhbmNob3I6ICdtaWRkbGUnLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3ViTGFiZWxzO1xuICAgIH0pO1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSkge1xuICAgICAgY29uc3Qgc3VwcERhdGFMYWJlbHM6IERhdGFMYWJlbFtdID0gZGF0YS5zdXBwbGVtZW50YXJ5WXMuZmxhdE1hcChcbiAgICAgICAgKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YkxhYmVsczogRGF0YUxhYmVsW10gPSB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc05lZ2F0aXZlQmFyID1cbiAgICAgICAgICAgICAgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLnkgPj0gemVyb0F4aXNQb3NWYWwgJiZcbiAgICAgICAgICAgICAgc3VwcEJhcnNbeUluZGV4XVt4SW5kZXhdLmhlaWdodCA+IDA7XG4gICAgICAgICAgICBjb25zdCB5T2Zmc2V0ID0gaXNOZWdhdGl2ZUJhclxuICAgICAgICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgK1xuICAgICAgICAgICAgICAgIHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS5oZWlnaHRcbiAgICAgICAgICAgICAgOiAtY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIHRydWUpLFxuICAgICAgICAgICAgICAgICkgPz8gJycsXG4gICAgICAgICAgICAgIHlQb3M6IHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS55ICsgeU9mZnNldCxcbiAgICAgICAgICAgICAgeFBvczpcbiAgICAgICAgICAgICAgICBzdXBwQmFyc1t5SW5kZXhdW3hJbmRleF0ueCArIHN1cHBCYXJzW3lJbmRleF1beEluZGV4XS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgIGFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBzdWJMYWJlbHM7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgZGF0YUxhYmVscy5wdXNoKC4uLnN1cHBEYXRhTGFiZWxzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwgfHxcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VwcFlzID0gaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgPyBkYXRhLnN1cHBsZW1lbnRhcnlZcyA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHhIb3ZlckluZGljZXMgPSBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgICAgIHJlYWxQb3NYLFxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhLngubGVuZ3RoLFxuICAgICAgKTtcbiAgICAgIGlmICgheEhvdmVySW5kaWNlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYnVja2V0TnVtOiB4SW5kZXgsXG4gICAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICAgIGNsdXN0ZXJOb3JtQ291bnQsXG4gICAgICAgIGNsdXN0ZXJOdW1UeXBlLFxuICAgICAgfSA9IHhIb3ZlckluZGljZXM7XG5cbiAgICAgIGxldCBpc1N1cHBWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgbGV0IHN1cHBJbmRleFZhbCA9IDA7XG4gICAgICBpZiAoc3VwcFlzKSB7XG4gICAgICAgIHN1cHBJbmRleFZhbCA9IGNsdXN0ZXJOdW0gLSBjbHVzdGVyTm9ybUNvdW50O1xuICAgICAgICBpZiAoY2x1c3Rlck51bVR5cGUgPT09ICdzdXBwJykge1xuICAgICAgICAgIGlzU3VwcFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxjWCA9IGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICApO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCgoXywgbWFwWUluZGV4KSA9PlxuICAgICAgICBpc1N1cHBWYWx1ZVxuICAgICAgICAgID8gZ2V0U3VwcEJhcllJbmZvVmlhWUluZGV4KFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIG1hcFlJbmRleCxcbiAgICAgICAgICAgICAgc3VwcEluZGV4VmFsLFxuICAgICAgICAgICAgICB4SW5kZXgsXG4gICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgKS55VmFsdWVcbiAgICAgICAgICA6IGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgbWFwWUluZGV4LCB4SW5kZXgsIHNjYWxlKS55VmFsdWUgLVxuICAgICAgICAgICAgKCFpc1N1cHBWYWx1ZSAmJiBpc1dhdGVyZmFsbFxuICAgICAgICAgICAgICA/IGJhcnNbbWFwWUluZGV4XVt4SW5kZXhdLm9mZnNldCA/PyAwXG4gICAgICAgICAgICAgIDogMCksXG4gICAgICApO1xuICAgICAgY29uc3QgeVBvc1NpZ24gPSB6ZXJvQXhpc1Bvc1ZhbCAtIHJlYWxQb3NZO1xuICAgICAgbGV0IHZpc2libGVZSW5kZXggPSAtMTtcbiAgICAgIGxldCBkcm9wT2ZmSG92ZXJEZXRlY3RlZCA9IGZhbHNlO1xuICAgICAgaWYgKHlQb3NTaWduIDwgMCAmJiBkYXRhLnlzLmZpbmQoeSA9PiB5LnZhbHVlcy5maW5kKHZhbCA9PiB2YWwgPCAwKSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKHlzW2ldID49IHplcm9BeGlzUG9zVmFsICYmIHlzW2ldIDwgcmVhbFBvc1kpIHtcbiAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHlzW2ldIDw9IHplcm9BeGlzUG9zVmFsICYmIHlzW2ldIDwgcmVhbFBvc1kpIHtcbiAgICAgICAgICAgIHZpc2libGVZSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpICYmICFzdXBwWXMpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGNsdXN0ZXJOdW07XG4gICAgICAgIGlmIChpc0Z1bm5lbCAmJiB4SW5kZXggIT09IDAgJiYgeXNbdmlzaWJsZVlJbmRleF0gPiByZWFsUG9zWSkge1xuICAgICAgICAgIGRyb3BPZmZIb3ZlckRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGlmIChyZWFsUG9zWSA8PSB6ZXJvQXhpc1Bvc1ZhbCkge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWluKC4uLnlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5tYXgoLi4ueXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBsZXQgeyB5VmFsdWUsIGhlaWdodCB9ID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBnZXRTdXBwQmFyWUluZm9WaWFZSW5kZXgoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgeUluZGV4LFxuICAgICAgICAgICAgc3VwcEluZGV4VmFsLFxuICAgICAgICAgICAgeEluZGV4LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgKVxuICAgICAgICA6IGdldEJhcllJbmZvKGRhdGEsIGNvbmZpZywgeUluZGV4LCB4SW5kZXgsIHNjYWxlKTtcbiAgICAgIGlmIChkcm9wT2ZmSG92ZXJEZXRlY3RlZCkge1xuICAgICAgICB5VmFsdWUgPSBncmFkaWVudHNbeUluZGV4XVt4SW5kZXhdLnk7XG4gICAgICAgIGhlaWdodCA9IGdyYWRpZW50c1t5SW5kZXhdW3hJbmRleF0uaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbEFuY2hvclggPSBjYWxjWCAtIHBvcy5jb250YWluZXJTY3JvbGxYIC0gU01BTExfUEFERElORztcbiAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIFNNQUxMX1BBRERJTkcgKiAyO1xuICAgICAgY29uc3Qgd2F0ZXJmYWxsT2Zmc2V0ID1cbiAgICAgICAgIWlzU3VwcFZhbHVlICYmIGlzV2F0ZXJmYWxsID8gYmFyc1t5SW5kZXhdW3hJbmRleF0ub2Zmc2V0ID8/IDAgOiAwO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0geVZhbHVlIC0gcG9zLmNvbnRhaW5lclNjcm9sbFkgLSB3YXRlcmZhbGxPZmZzZXQ7XG4gICAgICBjb25zdCB7IGFuY2hvclgsIGFuY2hvclksIGFuY2hvcldpZHRoLCBhbmNob3JIZWlnaHQgfSA9XG4gICAgICAgIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgICAgbG9jYWxBbmNob3JZLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICApO1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIGFuY2hvclggKyBwb3MucmVjdC54LFxuICAgICAgICBhbmNob3JZICsgcG9zLnJlY3QueSxcbiAgICAgICAgYW5jaG9yV2lkdGgsXG4gICAgICAgIGFuY2hvckhlaWdodCxcbiAgICAgICk7XG4gICAgICAvL1dlIG5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGluZGV4IGZvciB0aGUgbGF0ZXIgY2hlY2tJZlNlY29uZGFyeSBjYWxsXG4gICAgICBjb25zdCB5c0Zvck1ldHJpY3M6IHtcbiAgICAgICAgZGF0YTogU3VwcGxlbWVudGFyeURhdGFZIHwgRGF0YVk7XG4gICAgICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcjtcbiAgICAgIH1bXSA9XG4gICAgICAgIGlzU3VwcFZhbHVlICYmIHN1cHBZc1xuICAgICAgICAgID8gc3VwcFlzXG4gICAgICAgICAgICAgIC5tYXAoKHN1cHBZLCBpbmRleCkgPT4gKHsgZGF0YTogc3VwcFksIG9yaWdpbmFsSW5kZXg6IGluZGV4IH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKHN1cHBZID0+IHN1cHBZLmRhdGEuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbClcbiAgICAgICAgICA6IGRhdGEueXMubWFwKCh5LCBpbmRleCkgPT4gKHsgZGF0YTogeSwgb3JpZ2luYWxJbmRleDogaW5kZXggfSkpO1xuICAgICAgLy8gRmluZCB0aGUgc3BlY2lmaWMgc3VwcGxlbWVudGFyeSBpdGVtIHRoYXQgd2FzIGhvdmVyZWRcbiAgICAgIGNvbnN0IGdyb3VwU3VwcHMgPSBzdXBwWXNcbiAgICAgICAgPyBzdXBwWXMuZmlsdGVyKHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKSA/PyBbXVxuICAgICAgICA6IFtdO1xuICAgICAgY29uc3Qgc3VwcEFycmF5SW5kZXggPSB2aXNpYmxlWUluZGV4OyAvLyBVc2UgdGhlIHZpc3VhbCBZIHBvc2l0aW9uIHdpdGhpbiB0aGUgbGF5ZXJcbiAgICAgIGNvbnN0IGZpbHRlcmVkU3VwcFlJbmRleCA9XG4gICAgICAgIHN1cHBBcnJheUluZGV4ID49IDAgJiYgc3VwcEFycmF5SW5kZXggPCBncm91cFN1cHBzLmxlbmd0aCAmJiBzdXBwWXNcbiAgICAgICAgICA/IHN1cHBZcy5pbmRleE9mKGdyb3VwU3VwcHNbc3VwcEFycmF5SW5kZXhdKSA/PyAtMVxuICAgICAgICAgIDogLTE7XG4gICAgICBjb25zdCBzdXBwWUluZGV4ID1cbiAgICAgICAgZmlsdGVyZWRTdXBwWUluZGV4ID49IDAgPyB2aXNpYmxlU3VwcEluZGljZXNbZmlsdGVyZWRTdXBwWUluZGV4XSA6IC0xO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3ZlclR5cGU6ICdzdGFuZGFyZCcsXG4gICAgICAgIHg6IGNhbGNYICsgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSAvIDIsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgLi4uKGlzU3VwcFZhbHVlICYmIHN1cHBZSW5kZXggPj0gMFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBpc1N1cHBWYWx1ZSxcbiAgICAgICAgICAgICAgc3VwcFlJbmRleDogc3VwcFlJbmRleCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGRyb3BPZmZIb3ZlckRldGVjdGVkID8geyBpc0Ryb3BPZmY6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOlxuICAgICAgICAgICAgZGF0YS50eXBlID09PSAnbGFiZWxlZCdcbiAgICAgICAgICAgICAgPyBkcm9wT2ZmSG92ZXJEZXRlY3RlZFxuICAgICAgICAgICAgICAgID8gJ0Ryb3Agb2ZmIGZyb20gJy5jb25jYXQoZGF0YS54W3hJbmRleCAtIDFdLmxhYmVsKVxuICAgICAgICAgICAgICAgIDogZGF0YS54W3hJbmRleF0ubGFiZWxcbiAgICAgICAgICAgICAgOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKGRhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogeXNGb3JNZXRyaWNzXG4gICAgICAgICAgICAubWFwKHkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGdldENvbG9yKFxuICAgICAgICAgICAgICAgIGlzV2F0ZXJmYWxsID8gd2F0ZXJmYWxsRGF0YS5tYXAuZ2V0KHkuZGF0YSkgOiB5LmRhdGEsXG4gICAgICAgICAgICAgICAgY29sb3JJbmRpY2VzLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5jb2xvcnMsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGxhYmVsOiB5LmRhdGEubGFiZWwsXG4gICAgICAgICAgICAgIHBhdHRlcm46IHkuZGF0YS5wYXR0ZXJuLFxuICAgICAgICAgICAgICB2YWx1ZTogcGlwZVRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICBkcm9wT2ZmSG92ZXJEZXRlY3RlZFxuICAgICAgICAgICAgICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICB5LmRhdGEudmFsdWVzW3hJbmRleCAtIDFdIC0geS5kYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogeS5kYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoXG4gICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgeS5vcmlnaW5hbEluZGV4LFxuICAgICAgICAgICAgICAgICAgZHJvcE9mZkhvdmVyRGV0ZWN0ZWQgPyB4SW5kZXggLSAxIDogeEluZGV4LFxuICAgICAgICAgICAgICAgICAgaXNTdXBwVmFsdWUsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gdmlzaWJsZVlJbmRleCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFydFdpZHRoOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICB4VGlja3MsXG4gICAgICB5VGlja3MsXG4gICAgICBjb2xvcnMsXG4gICAgICBiYXJzLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgY2lyY2xlczogW10sXG4gICAgICBhcmVhczogW10sXG4gICAgICBob3ZlcixcbiAgICAgIGFyY3M6IFtdLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgICAgZGF0YUxhYmVscyxcbiAgICAgIHdhdGVyZmFsbExpbmVzLFxuICAgICAgZ3JhZGllbnRzLFxuICAgICAgZmxvd0Nvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhvcml6b250YWxCYXJzKFxuICAgIGNvbmZpZzogQ29uZmlnV2l0aEZ1bGxTY2FsaW5nLFxuICAgIGFsbERhdGE6IElucHV0RGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBpZiAoIXdhcm5GbG93RGF0YShhbGxEYXRhLCAnaG9yaXpvbnRhbCBiYXInKSkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ2NvbmZpZycgfTtcbiAgICB9XG4gICAgLy9Tb21lIG9mIHRoaXMgc3R1ZmYgZ2V0cyBjb25mdXNpbmcsIGJlY2F1c2UgeCBhbmQgeSBhcmUgZXNzZW50aWFsbHkgaW52ZXJ0ZWQgaGVyZVxuICAgIC8vICBTbywgaWYgeW91IHNlZSBhIHNpdHVhdGlvbiB3aGVyZSBhIHZhcmlhYmxlIGlzIG5hbWVkICd5JywgYnV0IHJlZmVyZW5jaW5nXG4gICAgLy8gICd4JyAob3IgdmljZSB2ZXJzYSksIHRoYXQncyB3aHlcbiAgICBjb25zdCB7IGRhdGEsIHZpc2libGVJbmRpY2VzLCB2aXNpYmxlU3VwcEluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnNob3dEYXRhTGFiZWxzID09PSB0cnVlICYmXG4gICAgICBpc1N0YWNrZWREYXRhKGNvbmZpZykgJiZcbiAgICAgICFpc0dyb3VwaW5nVHlwZUV4Y2VwdGlvbihkYXRhLCBjb25maWcpXG4gICAgKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBEYXRhIGxhYmVscyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBhbnkgc3RhY2tlZCBjaGFydCB0eXBlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmXG4gICAgICBpc0NsdXN0ZXJlZERhdGEoZGF0YSwgY29uZmlnLCBmYWxzZSkgJiZcbiAgICAgICFpc0dyb3VwaW5nVHlwZUV4Y2VwdGlvbihkYXRhLCBjb25maWcpXG4gICAgKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIGNsdXN0ZXJlZCBkYXRhIChqdXN0IHVzZSBhbm90aGVyIG5vcm1hbCB5IHNlcmllcylcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRhdGVGb3JtYXQsIHBpcGVUcmFuc2Zvcm0sIGNvbG9ySW5kaWNlcywgY29sb3JzIH0gPVxuICAgICAgZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhhbGxEYXRhLCBkYXRhLCBjb25maWcpO1xuXG4gICAgY29uc3QgY2hhcnRTaXppbmdWYWx1ZXMgPSBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRhdGEsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKTtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmVtcHR5Q2hhcnQsIGNoYXJ0RXJyb3I6ICdzaXppbmcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgdGlja0NvdW50ID0gZ2V0QnVja2V0VGlja0NvdW50KGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgICBjb25zdCB5VGlja3MgPSAoXG4gICAgICBkYXRhLnR5cGUgPT09ICdsYWJlbGVkJ1xuICAgICAgICA/IGdlbmVyYXRlTGFiZWxsZWRUaWNrcyhkYXRhLCBjb25maWcsIHRpY2tDb3VudCwgY2hhcnRTaXppbmdWYWx1ZXMpXG4gICAgICAgIDogZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgdGlja0NvdW50LFxuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgIClcbiAgICApLm1hcCh0aWNrID0+IHRvWVRpY2sodGljaykpO1xuICAgIGNvbnN0IHsgc2NhbGUsIHRpY2tzOiBkYXRhVGlja3MgfSA9IGNhbGNEYXRhQXhpc1NjYWxlc0FuZFRpY2tzKFxuICAgICAgZGF0YSxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBjb25maWcsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICApO1xuICAgIGNvbnN0IHhUaWNrcyA9IGRhdGFUaWNrcy5tYXAodGljayA9PiB0b1hUaWNrKHRpY2spKTtcbiAgICBjb25zdCB6ZXJvQXhpc1Bvc1ZhbCA9IHNjYWxlKDAsIHRydWUpO1xuXG4gICAgY29uc3Qgc2ltcGxpZmllZEhvcml6b250YWxCYXJzOiB7XG4gICAgICB4UG9zOiBudW1iZXI7XG4gICAgICB5UG9zOiBudW1iZXI7XG4gICAgICB3aWR0aDogbnVtYmVyO1xuICAgIH1bXVtdID0gW107XG4gICAgY29uc3QgaG9yaXpvbnRhbEJhcnMgPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdWJTaW1wSG9yQmFyczoge1xuICAgICAgICB4UG9zOiBudW1iZXI7XG4gICAgICAgIHlQb3M6IG51bWJlcjtcbiAgICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIH1bXSA9IFtdO1xuICAgICAgY29uc3QgcmV0VmFsID0geS52YWx1ZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB7IHhWYWx1ZSwgd2lkdGggfSA9IGdldEJhclhJbmZvKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHlJbmRleCxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBzY2FsZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2x1c3RlckluZm8gPSBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChkYXRhLCBjb25maWcpO1xuICAgICAgICBjb25zdCBjbHVzdGVyTnVtID0gY2x1c3RlckluZm8ubm9ybUNsdXN0ZXJJbmRpY2VzLmluZGV4T2YoeUluZGV4KTtcbiAgICAgICAgY29uc3QgeVZhbHVlID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpID8gY2x1c3Rlck51bSA6IDAsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaG9yUiA9IE1hdGgubWluKFxuICAgICAgICAgIERFRkFVTFRfSE9SSVpPTlRBTF9CQVJfQ09STkVSX1JBRElVUyxcbiAgICAgICAgICBNYXRoLmZsb29yKHdpZHRoIC8gMiksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZlclIgPSBNYXRoLm1pbihcbiAgICAgICAgICBERUZBVUxUX0hPUklaT05UQUxfQkFSX0NPUk5FUl9SQURJVVMsXG4gICAgICAgICAgTWF0aC5mbG9vcihjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplIC8gMiksXG4gICAgICAgICk7XG4gICAgICAgIHN1YlNpbXBIb3JCYXJzLnB1c2goe1xuICAgICAgICAgIHhQb3M6IHhWYWx1ZSxcbiAgICAgICAgICB5UG9zOiB5VmFsdWUsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgIH0pO1xuICAgICAgICAvL0lmIGNsdXN0ZXJOdW0gaXMgLTEsIHRoZW4gdGhlIHZhbHVlIG9mIGRhdGFbeUluZGV4XVt4SW5kZXhdIG11c3QgYmUgemVyb1xuICAgICAgICBpZiAoY2x1c3Rlck51bSA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaG9yaXpvbnRhbEJhcjogJycsXG4gICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvL0Rvbid0IGRyYXcgYW55dGhpbmcgZm9yIHplcm8tdmFsdWUgYmFyc1xuICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaG9yaXpvbnRhbEJhcjogJycsXG4gICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUG9zaXRpdmUgPSBkYXRhLnlzW3lJbmRleF0udmFsdWVzW2luZGV4XSA+IDA7XG4gICAgICAgIGNvbnN0IGhhc0FueU5lZ2F0aXZlQmFycyA9IGRhdGEueXNcbiAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgIC5maW5kKHZhbCA9PiB2YWwgPCAwKTtcbiAgICAgICAgY29uc3QgaGFzQW55UG9zaXRpdmVCYXJzID0gZGF0YS55c1xuICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgLmZpbmQodmFsID0+IHZhbCA+IDApO1xuXG4gICAgICAgIC8vVGhlc2UgY2hlY2tzIGFyZSB0byBtYWtlIHN1cmUgd2Ugc3RpbGwgcm91bmQgaWYgYWxsIHByZXZpb3VzL2xhdGVyIHZhbHVlcyBhcmUgMFxuICAgICAgICBjb25zdCBhbGxMZWZ0WmVybyA9IGlzUG9zaXRpdmVcbiAgICAgICAgICA/IGRhdGEueXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIHlJbmRleClcbiAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsID4gMCkubGVuZ3RoID09PSAwICYmICFoYXNBbnlOZWdhdGl2ZUJhcnNcbiAgICAgICAgICA6IGRhdGEueXNcbiAgICAgICAgICAgICAgLnNsaWNlKHlJbmRleCArIDEsIGRhdGEueXMubGVuZ3RoKVxuICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPCAwKS5sZW5ndGggPT09IDA7XG4gICAgICAgIGNvbnN0IGxlZnRTaWRlUm91bmQgPSAhaXNTdGFja2VkRGF0YShjb25maWcpIHx8IGFsbExlZnRaZXJvO1xuICAgICAgICBjb25zdCBhbGxSaWdodFplcm8gPSBpc1Bvc2l0aXZlXG4gICAgICAgICAgPyBkYXRhLnlzXG4gICAgICAgICAgICAgIC5zbGljZSh5SW5kZXggKyAxLCBkYXRhLnlzLmxlbmd0aClcbiAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsID4gMCkubGVuZ3RoID09PSAwXG4gICAgICAgICAgOiBkYXRhLnlzXG4gICAgICAgICAgICAgIC5zbGljZSgwLCB5SW5kZXgpXG4gICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA8IDApLmxlbmd0aCA9PT0gMCAmJiAhaGFzQW55UG9zaXRpdmVCYXJzO1xuICAgICAgICBjb25zdCByaWdodFNpZGVSb3VuZCA9ICFpc1N0YWNrZWREYXRhKGNvbmZpZykgfHwgYWxsUmlnaHRaZXJvO1xuICAgICAgICBjb25zdCBwYXRoRCA9IGNhbGN1bGF0ZUhvcml6b250YWxCYXJQYXRoKFxuICAgICAgICAgIGxlZnRTaWRlUm91bmQsXG4gICAgICAgICAgcmlnaHRTaWRlUm91bmQsXG4gICAgICAgICAgeFZhbHVlLFxuICAgICAgICAgIHlWYWx1ZSxcbiAgICAgICAgICBob3JSLFxuICAgICAgICAgIHZlclIsXG4gICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3Jpem9udGFsQmFyOiBwYXRoRCxcbiAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgc2ltcGxpZmllZEhvcml6b250YWxCYXJzLnB1c2goc3ViU2ltcEhvckJhcnMpO1xuICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9KTtcbiAgICBjb25zdCBzdXBwWXMgPSBkYXRhLnN1cHBsZW1lbnRhcnlZcztcbiAgICBjb25zdCBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzOiB7XG4gICAgICB4UG9zOiBudW1iZXI7XG4gICAgICB5UG9zOiBudW1iZXI7XG4gICAgICB3aWR0aDogbnVtYmVyO1xuICAgIH1bXVtdID0gW107XG4gICAgaWYgKHN1cHBZcykge1xuICAgICAgY29uc3Qgc3VwcEhvcml6b250YWxCYXJzID0gc3VwcFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YlNpbXBIb3JCYXJzOiB7XG4gICAgICAgICAgeFBvczogbnVtYmVyO1xuICAgICAgICAgIHlQb3M6IG51bWJlcjtcbiAgICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICB9W10gPSBbXTtcbiAgICAgICAgY29uc3QgcmV0VmFsID0geS52YWx1ZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgeFZhbHVlLCB3aWR0aCB9ID0gZ2V0QmFyWEluZm8oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgeUluZGV4LFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBjbHVzdGVySW5mbyA9IGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KGRhdGEsIGNvbmZpZyk7XG4gICAgICAgICAgY29uc3QgY2x1c3Rlck51bSA9XG4gICAgICAgICAgICBjbHVzdGVySW5mby5zdXBwQ2x1c3RlckluZGljZXMuaW5kZXhPZih5LnN1cHBsZW1lbnRhbEluZGV4KSArXG4gICAgICAgICAgICBjbHVzdGVySW5mby5ub3JtQ291bnQ7XG4gICAgICAgICAgY29uc3QgeVZhbHVlID0gY2FsY3VsYXRlQmFyUG9zaXRpb24oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGhvclIgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIERFRkFVTFRfSE9SSVpPTlRBTF9CQVJfQ09STkVSX1JBRElVUyxcbiAgICAgICAgICAgIE1hdGguZmxvb3Iod2lkdGggLyAyKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZlclIgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIERFRkFVTFRfSE9SSVpPTlRBTF9CQVJfQ09STkVSX1JBRElVUyxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSAvIDIpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgc3ViU2ltcEhvckJhcnMucHVzaCh7XG4gICAgICAgICAgICB4UG9zOiB4VmFsdWUsXG4gICAgICAgICAgICB5UG9zOiB5VmFsdWUsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL0Rvbid0IGRyYXcgYW55dGhpbmcgZm9yIHplcm8tdmFsdWUgYmFyc1xuICAgICAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEJhcjogJycsXG4gICAgICAgICAgICAgIHBhdHRlcm46IHkucGF0dGVybixcbiAgICAgICAgICAgICAgeDogeFZhbHVlLFxuICAgICAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGlzUG9zaXRpdmUgPSBzdXBwWXNbeUluZGV4XS52YWx1ZXNbaW5kZXhdID4gMDtcbiAgICAgICAgICBjb25zdCBoYXNBbnlOZWdhdGl2ZUJhcnMgPSBzdXBwWXNcbiAgICAgICAgICAgIC5maWx0ZXIoc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgpXG4gICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgLmZpbmQodmFsID0+IHZhbCA8IDApO1xuICAgICAgICAgIGNvbnN0IGhhc0FueVBvc2l0aXZlQmFycyA9IHN1cHBZc1xuICAgICAgICAgICAgLmZpbHRlcihzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleClcbiAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAuZmluZCh2YWwgPT4gdmFsID4gMCk7XG5cbiAgICAgICAgICAvL1RoZXNlIGNoZWNrcyBhcmUgdG8gbWFrZSBzdXJlIHdlIHN0aWxsIHJvdW5kIGlmIGFsbCBwcmV2aW91cy9sYXRlciB2YWx1ZXMgYXJlIDBcbiAgICAgICAgICBjb25zdCBhbGxMZWZ0WmVybyA9IGlzUG9zaXRpdmVcbiAgICAgICAgICAgID8gc3VwcFlzXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIHlJbmRleClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsID4gMCkubGVuZ3RoID09PSAwICYmICFoYXNBbnlOZWdhdGl2ZUJhcnNcbiAgICAgICAgICAgIDogc3VwcFlzXG4gICAgICAgICAgICAgICAgLnNsaWNlKHlJbmRleCArIDEsIHN1cHBZcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIHN1cHBZID0+IHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4ID09PSB5LnN1cHBsZW1lbnRhbEluZGV4LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbaW5kZXhdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCA8IDApLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICBjb25zdCBsZWZ0U2lkZVJvdW5kID0gIWlzU3RhY2tlZERhdGEoY29uZmlnKSB8fCBhbGxMZWZ0WmVybztcbiAgICAgICAgICBjb25zdCBhbGxSaWdodFplcm8gPSBpc1Bvc2l0aXZlXG4gICAgICAgICAgICA/IHN1cHBZc1xuICAgICAgICAgICAgICAgIC5zbGljZSh5SW5kZXggKyAxLCBzdXBwWXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBzdXBwWSA9PiBzdXBwWS5zdXBwbGVtZW50YWxJbmRleCA9PT0geS5zdXBwbGVtZW50YWxJbmRleCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgPiAwKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgIDogc3VwcFlzXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIHlJbmRleClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgc3VwcFkgPT4gc3VwcFkuc3VwcGxlbWVudGFsSW5kZXggPT09IHkuc3VwcGxlbWVudGFsSW5kZXgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoeSA9PiB5LnZhbHVlc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsIDwgMCkubGVuZ3RoID09PSAwICYmICFoYXNBbnlQb3NpdGl2ZUJhcnM7XG4gICAgICAgICAgY29uc3QgcmlnaHRTaWRlUm91bmQgPSAhaXNTdGFja2VkRGF0YShjb25maWcpIHx8IGFsbFJpZ2h0WmVybztcbiAgICAgICAgICBjb25zdCBwYXRoRCA9IGNhbGN1bGF0ZUhvcml6b250YWxCYXJQYXRoKFxuICAgICAgICAgICAgbGVmdFNpZGVSb3VuZCxcbiAgICAgICAgICAgIHJpZ2h0U2lkZVJvdW5kLFxuICAgICAgICAgICAgeFZhbHVlLFxuICAgICAgICAgICAgeVZhbHVlLFxuICAgICAgICAgICAgaG9yUixcbiAgICAgICAgICAgIHZlclIsXG4gICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaG9yaXpvbnRhbEJhcjogcGF0aEQsXG4gICAgICAgICAgICBwYXR0ZXJuOiB5LnBhdHRlcm4sXG4gICAgICAgICAgICB4OiB4VmFsdWUsXG4gICAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnMucHVzaChzdWJTaW1wSG9yQmFycyk7XG4gICAgICAgIHJldHVybiByZXRWYWw7XG4gICAgICB9KTtcbiAgICAgIGhvcml6b250YWxCYXJzLnB1c2goLi4uc3VwcEhvcml6b250YWxCYXJzKTtcbiAgICAgIGNvbG9ycy5wdXNoKC4uLnN1cHBZcy5tYXAoeSA9PiBnZXRDb2xvcih5LCBjb2xvckluZGljZXMsIGNvbmZpZy5jb2xvcnMpKSk7XG4gICAgfVxuXG4gICAgY29uc3QgeU9mZnNldCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemU7XG4gICAgY29uc3QgZGF0YUxhYmVsczogRGF0YUxhYmVsW10gPSBkYXRhLnlzLmZsYXRNYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3ViTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYmFySXNOZWdhdGl2ZSA9XG4gICAgICAgICAgc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS54UG9zIDwgemVyb0F4aXNQb3NWYWwgJiZcbiAgICAgICAgICBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoID4gMDtcbiAgICAgICAgY29uc3QgeE9mZnNldCA9IGJhcklzTmVnYXRpdmVcbiAgICAgICAgICA/IC1jaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nXG4gICAgICAgICAgOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoICtcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgcGlwZVRyYW5zZm9ybSh2YWwsIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgpKSA/PyAnJyxcbiAgICAgICAgICB5UG9zOiBzaW1wbGlmaWVkSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnlQb3MgKyB5T2Zmc2V0LFxuICAgICAgICAgIHhQb3M6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueFBvcyArIHhPZmZzZXQsXG4gICAgICAgICAgYW5jaG9yOiBiYXJJc05lZ2F0aXZlID8gJ2VuZCcgOiAnc3RhcnQnLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3ViTGFiZWxzO1xuICAgIH0pO1xuICAgIGlmIChzdXBwWXMpIHtcbiAgICAgIGNvbnN0IHN1cHBEYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHN1cHBZcy5mbGF0TWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViTGFiZWxzOiBEYXRhTGFiZWxbXSA9IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBiYXJJc05lZ2F0aXZlID1cbiAgICAgICAgICAgIHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLnhQb3MgPFxuICAgICAgICAgICAgICB6ZXJvQXhpc1Bvc1ZhbCAmJlxuICAgICAgICAgICAgc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ud2lkdGggPiAwO1xuICAgICAgICAgIGNvbnN0IHhPZmZzZXQgPSBiYXJJc05lZ2F0aXZlXG4gICAgICAgICAgICA/IC1jaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nXG4gICAgICAgICAgICA6IHNpbXBsaWZpZWRTdXBwSG9yaXpvbnRhbEJhcnNbeUluZGV4XVt4SW5kZXhdLndpZHRoICtcbiAgICAgICAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZztcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIHRydWUpLFxuICAgICAgICAgICAgICApID8/ICcnLFxuICAgICAgICAgICAgeVBvczogc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1t5SW5kZXhdW3hJbmRleF0ueVBvcyArIHlPZmZzZXQsXG4gICAgICAgICAgICB4UG9zOiBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW3lJbmRleF1beEluZGV4XS54UG9zICsgeE9mZnNldCxcbiAgICAgICAgICAgIGFuY2hvcjogYmFySXNOZWdhdGl2ZSA/ICdlbmQnIDogJ3N0YXJ0JyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YkxhYmVscztcbiAgICAgIH0pO1xuICAgICAgZGF0YUxhYmVscy5wdXNoKC4uLnN1cHBEYXRhTGFiZWxzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwgfHxcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VwcFlzID0gaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgPyBkYXRhLnN1cHBsZW1lbnRhcnlZcyA6IG51bGw7XG4gICAgICBjb25zdCB4SG92ZXJJbmRpY2VzID0gZ2V0QnVja2V0QW5kQ2x1c3Rlck51bUZvckhvdmVyKFxuICAgICAgICByZWFsUG9zWSxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YS54Lmxlbmd0aCxcbiAgICAgICk7XG4gICAgICBpZiAoIXhIb3ZlckluZGljZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIGJ1Y2tldE51bTogeEluZGV4LFxuICAgICAgICBjbHVzdGVyTnVtLFxuICAgICAgICBjbHVzdGVyTm9ybUNvdW50LFxuICAgICAgICBjbHVzdGVyTnVtVHlwZSxcbiAgICAgIH0gPSB4SG92ZXJJbmRpY2VzO1xuXG4gICAgICBsZXQgeCA9IGNhbGN1bGF0ZUJhclBvc2l0aW9uKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICApO1xuICAgICAgbGV0IGlzU3VwcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgc3VwcEluZGV4VmFsID0gMDtcbiAgICAgIGlmIChzdXBwWXMpIHtcbiAgICAgICAgc3VwcEluZGV4VmFsID0gY2x1c3Rlck51bSAtIGNsdXN0ZXJOb3JtQ291bnQ7XG4gICAgICAgIGlmIChjbHVzdGVyTnVtVHlwZSA9PT0gJ3N1cHAnKSB7XG4gICAgICAgICAgaXNTdXBwVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gaG92ZXJpbmcgc3VwcGxlbWVudGFyeSB2YWx1ZXMsIGdldCBiYXJzIGZvciB0aGF0IHN1cHBsZW1lbnRhbCBsYXllclxuICAgICAgLy8gV2hlbiBob3ZlcmluZyBvcmlnaW5hbCBZcywgZ2V0IGJhcnMgZm9yIG9yaWdpbmFsIFlzXG4gICAgICBjb25zdCBmdWxsWXMgPVxuICAgICAgICBoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBWYWx1ZVxuICAgICAgICAgID8gKFxuICAgICAgICAgICAgICBkYXRhLnN1cHBsZW1lbnRhcnlZcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgcyA9PiBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwsXG4gICAgICAgICAgICAgICkgPz8gW11cbiAgICAgICAgICAgICkubWFwKHN1cHBZID0+XG4gICAgICAgICAgICAgIGdldEJhclhJbmZvKFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzLmluZGV4T2Yoc3VwcFkpLFxuICAgICAgICAgICAgICAgIHhJbmRleCxcbiAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogZGF0YS55cy5tYXAoKF8sIG1hcFlJbmRleCkgPT5cbiAgICAgICAgICAgICAgZ2V0QmFyWEluZm8oZGF0YSwgY29uZmlnLCBtYXBZSW5kZXgsIHhJbmRleCwgc2NhbGUpLFxuICAgICAgICAgICAgKTtcbiAgICAgIGNvbnN0IHlzID0gZnVsbFlzLm1hcCh5ID0+IHkueFZhbHVlKTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bGxZcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsZWZ0Qm9yZGVyID0gZnVsbFlzW2ldLnhWYWx1ZTtcbiAgICAgICAgY29uc3QgcmlnaHRCb3JkZXJDYW5kaWRhdGVzID0gZnVsbFlzXG4gICAgICAgICAgLmZpbHRlcih5ID0+IHkueFZhbHVlID4gbGVmdEJvcmRlcilcbiAgICAgICAgICAubWFwKHkgPT4geS54VmFsdWUpO1xuICAgICAgICBjb25zdCByaWdodEJvcmRlciA9XG4gICAgICAgICAgcmlnaHRCb3JkZXJDYW5kaWRhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4ucmlnaHRCb3JkZXJDYW5kaWRhdGVzKVxuICAgICAgICAgICAgOiBsZWZ0Qm9yZGVyICsgZnVsbFlzW2ldLndpZHRoO1xuICAgICAgICBpZiAocmVhbFBvc1ggPiBsZWZ0Qm9yZGVyICYmIHJlYWxQb3NYIDwgcmlnaHRCb3JkZXIpIHtcbiAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ2x1c3RlcmVkRGF0YShkYXRhLCBjb25maWcsIGZhbHNlKSkge1xuICAgICAgICB2aXNpYmxlWUluZGV4ID0gY2x1c3Rlck51bTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGlmIChyZWFsUG9zWCA+PSB6ZXJvQXhpc1Bvc1ZhbCkge1xuICAgICAgICAgIHZpc2libGVZSW5kZXggPSB5cy5pbmRleE9mKE1hdGgubWF4KC4uLnlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZVlJbmRleCA9IHlzLmluZGV4T2YoTWF0aC5taW4oLi4ueXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRm9yIHN1cHBsZW1lbnRhcnkgYmFyczogdmlzaWJsZVlJbmRleCBpcyBpbmRleCB3aXRoaW4gZmlsdGVyZWQgc3VwcGxlbWVudGFyeSBhcnJheVxuICAgICAgLy8gRm9yIG9yaWdpbmFsIFlzOiB2aXNpYmxlWUluZGV4IGlzIGluZGV4IHdpdGhpbiBvcmlnaW5hbCBZcyBhcnJheVxuICAgICAgY29uc3QgYWN0dWFsU3VwcFlJbmRleCA9XG4gICAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpICYmIGlzU3VwcFZhbHVlXG4gICAgICAgICAgPyBkYXRhLnN1cHBsZW1lbnRhcnlZcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgICBzLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwgJiZcbiAgICAgICAgICAgICAgICBkYXRhLnN1cHBsZW1lbnRhcnlZc1xuICAgICAgICAgICAgICAgICAgLmZpbHRlcihzMiA9PiBzMi5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgICAgICAgICAgLmluZGV4T2YocykgPT09IHZpc2libGVZSW5kZXgsXG4gICAgICAgICAgICApID8/IC0xXG4gICAgICAgICAgOiAtMTtcblxuICAgICAgY29uc3QgeUluZGV4ID0gaXNTdXBwVmFsdWUgPyAwIDogdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG5cbiAgICAgIC8vQ2hlY2sgaWYgd2UndmUgbGFuZGVkIG9uIGEgemVyby13aWR0aCBiYXIgKG9ubHkgcmVhbGx5IHJlbGV2YW50IG9uIGVuZHMpXG4gICAgICBjb25zdCBiYXJzVG9DaGVjayA9IGlzU3VwcFZhbHVlXG4gICAgICAgID8gc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1xuICAgICAgICA6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFycztcbiAgICAgIGNvbnN0IGJhckluZGV4VG9DaGVjayA9IGlzU3VwcFZhbHVlID8gYWN0dWFsU3VwcFlJbmRleCA6IHZpc2libGVZSW5kZXg7XG5cbiAgICAgIGlmIChcbiAgICAgICAgYmFySW5kZXhUb0NoZWNrID49IDAgJiZcbiAgICAgICAgYmFyc1RvQ2hlY2tbYmFySW5kZXhUb0NoZWNrXVt4SW5kZXhdLndpZHRoID09PSAwICYmXG4gICAgICAgIGlzU3RhY2tlZERhdGEoY29uZmlnKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBhbHRCYXJGb3VuZCA9IGZhbHNlO1xuICAgICAgICAvL0NoZWNrIHVwd2FyZHNcbiAgICAgICAgZm9yIChsZXQgaSA9IGJhckluZGV4VG9DaGVjayArIDE7IGkgPCBiYXJzVG9DaGVjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChhbHRCYXJGb3VuZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiYXJzVG9DaGVja1tpXVt4SW5kZXhdLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaXNTdXBwVmFsdWUpIHtcbiAgICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEuc3VwcGxlbWVudGFyeVlzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihzID0+IHMuc3VwcGxlbWVudGFsSW5kZXggPT09IHN1cHBJbmRleFZhbClcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihkYXRhLnN1cHBsZW1lbnRhcnlZc1tpXSkhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmlzaWJsZVlJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbHRCYXJGb3VuZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9DaGVjayBkb3dud2FyZHNcbiAgICAgICAgZm9yIChsZXQgaSA9IGJhckluZGV4VG9DaGVjayAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGFsdEJhckZvdW5kKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhcnNUb0NoZWNrW2ldW3hJbmRleF0ud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBWYWx1ZSkge1xuICAgICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gZGF0YS5zdXBwbGVtZW50YXJ5WXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4VmFsKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKGRhdGEuc3VwcGxlbWVudGFyeVlzW2ldKSE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aXNpYmxlWUluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsdEJhckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3JpZ2luYWxTdXBwWUluZGV4ID1cbiAgICAgICAgaXNTdXBwVmFsdWUgJiYgYWN0dWFsU3VwcFlJbmRleCA+PSAwXG4gICAgICAgICAgPyB2aXNpYmxlU3VwcEluZGljZXNbYWN0dWFsU3VwcFlJbmRleF1cbiAgICAgICAgICA6IC0xO1xuXG4gICAgICBjb25zdCBiYXJYUG9zID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW2FjdHVhbFN1cHBZSW5kZXhdW3hJbmRleF0ueFBvc1xuICAgICAgICA6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLnhQb3M7XG4gICAgICBjb25zdCBiYXJZUG9zID0gaXNTdXBwVmFsdWVcbiAgICAgICAgPyBzaW1wbGlmaWVkU3VwcEhvcml6b250YWxCYXJzW2FjdHVhbFN1cHBZSW5kZXhdW3hJbmRleF0ueVBvc1xuICAgICAgICA6IHNpbXBsaWZpZWRIb3Jpem9udGFsQmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLnlQb3M7XG4gICAgICBjb25zdCBiYXJXaWR0aCA9IGlzU3VwcFZhbHVlXG4gICAgICAgID8gc2ltcGxpZmllZFN1cHBIb3Jpem9udGFsQmFyc1thY3R1YWxTdXBwWUluZGV4XVt4SW5kZXhdLndpZHRoXG4gICAgICAgIDogc2ltcGxpZmllZEhvcml6b250YWxCYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ud2lkdGg7XG5cbiAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWCA9IGJhclhQb3MgLSBwb3MuY29udGFpbmVyU2Nyb2xsWCAtIFNNQUxMX1BBRERJTkc7XG4gICAgICBjb25zdCB3aWR0aCA9IGJhcldpZHRoICsgU01BTExfUEFERElORyAqIDI7XG4gICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBiYXJZUG9zIC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplO1xuICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZLCBhbmNob3JXaWR0aCwgYW5jaG9ySGVpZ2h0IH0gPVxuICAgICAgICBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgIGFuY2hvcldpZHRoLFxuICAgICAgICBhbmNob3JIZWlnaHQsXG4gICAgICApO1xuICAgICAgLy9XZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBpbmRleCBmb3IgdGhlIGxhdGVyIGNoZWNrSWZTZWNvbmRhcnkgY2FsbFxuICAgICAgY29uc3QgeXNGb3JNZXRyaWNzOiB7XG4gICAgICAgIGRhdGE6IFN1cHBsZW1lbnRhcnlEYXRhWSB8IERhdGFZO1xuICAgICAgICBvcmlnaW5hbEluZGV4OiBudW1iZXI7XG4gICAgICB9W10gPVxuICAgICAgICBpc1N1cHBWYWx1ZSAmJiBzdXBwWXNcbiAgICAgICAgICA/IHN1cHBZc1xuICAgICAgICAgICAgICAubWFwKChzdXBwWSwgaW5kZXgpID0+ICh7IGRhdGE6IHN1cHBZLCBvcmlnaW5hbEluZGV4OiBpbmRleCB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcihzdXBwWSA9PiBzdXBwWS5kYXRhLnN1cHBsZW1lbnRhbEluZGV4ID09PSBzdXBwSW5kZXhWYWwpXG4gICAgICAgICAgOiBkYXRhLnlzLm1hcCgoeSwgaW5kZXgpID0+ICh7IGRhdGE6IHksIG9yaWdpbmFsSW5kZXg6IGluZGV4IH0pKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICAuLi4oaXNTdXBwVmFsdWUgJiYgb3JpZ2luYWxTdXBwWUluZGV4ID49IDBcbiAgICAgICAgICA/IHsgaXNTdXBwVmFsdWUsIHN1cHBZSW5kZXg6IG9yaWdpbmFsU3VwcFlJbmRleCB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgZGF0ZTpcbiAgICAgICAgICAgIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnXG4gICAgICAgICAgICAgID8gZGF0YS54W3hJbmRleF0ubGFiZWxcbiAgICAgICAgICAgICAgOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKGRhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogeXNGb3JNZXRyaWNzXG4gICAgICAgICAgICAubWFwKHkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGdldENvbG9yKHkuZGF0YSwgY29sb3JJbmRpY2VzLCBjb25maWcuY29sb3JzKSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkuZGF0YS5sYWJlbCxcbiAgICAgICAgICAgICAgcGF0dGVybjogeS5kYXRhLnBhdHRlcm4sXG4gICAgICAgICAgICAgIHZhbHVlOiBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHkuZGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHkub3JpZ2luYWxJbmRleCwgeEluZGV4LCBpc1N1cHBWYWx1ZSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gY29uZmlnLmdyb3VwZWRUb29sdGlwIHx8IGkgPT09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCxcbiAgICAgIGNoYXJ0SGVpZ2h0OiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbEhlaWdodCxcbiAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgeFRpY2tzOiB4VGlja3MsXG4gICAgICB5VGlja3M6IHlUaWNrcyxcbiAgICAgIGhvdmVyLFxuICAgICAgY29sb3JzLFxuICAgICAgYmFyczogW10sXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGFyZWFzOiBbXSxcbiAgICAgIGFyY3M6IFtdLFxuICAgICAgaG9yaXpvbnRhbEJhcnMsXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgICAgZ3JhZGllbnRzOiBbXSxcbiAgICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgICBjaGFydEVycm9yOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhcmNzKFxuICAgIGNvbmZpZzogRG9udXRDb25maWcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmICghd2FybkZsb3dEYXRhKGFsbERhdGEsICdkb251dCcpKSB7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlICYmXG4gICAgICAoY29uZmlnLnZhbHVlVHlwZSA9PT0gJ3BlcmNlbnRhZ2UnIHx8XG4gICAgICAgIGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGUgPT09ICdwZXJjZW50YWdlJylcbiAgICApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFR3byBheGVzIHdpdGggcGVyY2VudGFnZSBhcmVuJ3Qgc3VwcG9ydGVkIGZvciBkb251dCBjaGFydHNcIixcbiAgICAgICk7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgaWYgKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGFsbERhdGEpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkhlYWRzIHVwISBTdXBwbGVtZW50YXJ5IHkgdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgZm9yIG5vbi1iYXIgY2hhcnRzXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGVtcHR5Q2hhcnQ7XG4gICAgfVxuICAgIHdhcm5VbnN1cHBvcnRlZFBhdHRlcm5zKGFsbERhdGEsIFtdLCAnZG9udXQnKTtcbiAgICBjb25zdCB7IGRhdGE6IHVuc3RhY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGNvbnN0IGRvbnV0RGF0YSA9IENoYXJ0LmNvbnZlcnRDaGFydERhdGFUb0RvbnV0RGF0YSh1bnN0YWNrZWREYXRhKTtcbiAgICBjb25zdCBoYXNOb25aZXJvVmFsdWUgPSBkb251dERhdGEuc29tZShkID0+IGQudmFsdWUgPiAwKTtcbiAgICBjb25zdCBhcmNEYXRhID0gaGFzTm9uWmVyb1ZhbHVlXG4gICAgICA/IGRvbnV0RGF0YVxuICAgICAgOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICBjb25zdCBjb2xvcnMgPSBoYXNOb25aZXJvVmFsdWVcbiAgICAgID8gdmlzaWJsZUluZGljZXMubWFwKGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdKVxuICAgICAgOiBbJy0tZ3JheS0zMCddO1xuICAgIGNvbnN0IHsgcGlwZVRyYW5zZm9ybSB9ID0gZ2V0Rm9ybWF0dGluZ0FuZENvbG9ycyhcbiAgICAgIGFsbERhdGEsXG4gICAgICB1bnN0YWNrZWREYXRhLFxuICAgICAgY29uZmlnLFxuICAgICk7XG5cbiAgICBjb25zdCBkb251dERlZmF1bHRDb25maWcgPSBEZWZhdWx0RG9udXRTaXppbmdDb25maWc7XG4gICAgY29uc3QgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZyA9IGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICAgIGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWc/LmVsZW1lbnRTY2FsZXMsXG4gICAgICBkb251dERlZmF1bHRDb25maWcuZWxlbWVudFNjYWxlcyxcbiAgICAgICdkYXRhTGFiZWxQYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGZvbnRTaXplQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8uZWxlbWVudFNjYWxlcyxcbiAgICAgIGRvbnV0RGVmYXVsdENvbmZpZy5lbGVtZW50U2NhbGVzLFxuICAgICAgJ2ZvbnRTaXplJyxcbiAgICApO1xuICAgIGNvbnN0IGRhdGFMYWJlbFRleHRTaXppbmcgPSBnZXREYXRhTGFiZWxTaXplKFxuICAgICAgdW5zdGFja2VkRGF0YSxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBmb250U2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgKTtcblxuICAgIGNvbnN0IGhvcml6b250YWxDb250YWluZXJTY2FsZSA9XG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUgIT09XG4gICAgICB1bmRlZmluZWRcbiAgICAgICAgPyBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZVxuICAgICAgICA6IGRvbnV0RGVmYXVsdENvbmZpZy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGU7XG4gICAgY29uc3QgdmVydGljYWxDb250YWluZXJTY2FsZSA9XG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlICE9PVxuICAgICAgdW5kZWZpbmVkXG4gICAgICAgID8gY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlXG4gICAgICAgIDogZG9udXREZWZhdWx0Q29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGU7XG4gICAgY29uc3Qgb3V0ZXJSYWRpdXNDb25maWcgPVxuICAgICAgY29uZmlnLmRvbnV0RGlzcGxheUluZm8uc2NhbGluZ0NvbmZpZz8ub3V0ZXJSYWRpdXMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNvbmZpZy5kb251dERpc3BsYXlJbmZvLnNjYWxpbmdDb25maWcub3V0ZXJSYWRpdXNcbiAgICAgICAgOiBkb251dERlZmF1bHRDb25maWcub3V0ZXJSYWRpdXM7XG4gICAgY29uc3QgZHJhd1JhZGl1c0NvbmZpZyA9XG4gICAgICBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnPy5kcmF3UmFkaXVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjb25maWcuZG9udXREaXNwbGF5SW5mby5zY2FsaW5nQ29uZmlnLmRyYXdSYWRpdXNcbiAgICAgICAgOiBkb251dERlZmF1bHRDb25maWcuZHJhd1JhZGl1cztcblxuICAgIGNvbnN0IG91dGVyID1cbiAgICAgIG91dGVyUmFkaXVzQ29uZmlnLnR5cGUgPT09ICdwcm9wb3J0aW9uJ1xuICAgICAgICA/IChkaW1lbnNpb25zLmhlaWdodCAvIDIpICogb3V0ZXJSYWRpdXNDb25maWcudmFsdWVcbiAgICAgICAgOiBvdXRlclJhZGl1c0NvbmZpZy52YWx1ZTtcbiAgICBjb25zdCBkcmF3UmFkaXVzID1cbiAgICAgIGRyYXdSYWRpdXNDb25maWcudHlwZSA9PT0gJ3Byb3BvcnRpb24nXG4gICAgICAgID8gb3V0ZXIgKiBkcmF3UmFkaXVzQ29uZmlnLnZhbHVlXG4gICAgICAgIDogZHJhd1JhZGl1c0NvbmZpZy52YWx1ZTtcbiAgICBjb25zdCBpbm5lciA9IG91dGVyIC0gZHJhd1JhZGl1cztcblxuICAgIGNvbnN0IHBpZUFyY3MgPSBwaWU8RG9udXREYXRhPigpXG4gICAgICAuc29ydFZhbHVlcyhudWxsKVxuICAgICAgLnZhbHVlKGQgPT4gTWF0aC5tYXgoZC52YWx1ZSwgMCkpKGFyY0RhdGEpO1xuXG4gICAgY29uc3QgYXJjcyA9IHBpZUFyY3MubWFwKHBpZUFyYyA9PlxuICAgICAgYXJjPERvbnV0RGF0YT4oKVxuICAgICAgICAuaW5uZXJSYWRpdXMoaW5uZXIpXG4gICAgICAgIC5vdXRlclJhZGl1cyhvdXRlcilcbiAgICAgICAgLnBhZEFuZ2xlKDAuMDEzKVxuICAgICAgICAuc3RhcnRBbmdsZShwaWVBcmMuc3RhcnRBbmdsZSlcbiAgICAgICAgLmVuZEFuZ2xlKHBpZUFyYy5lbmRBbmdsZSkocGllQXJjLmRhdGEpLFxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXSA9IGhhc05vblplcm9WYWx1ZVxuICAgICAgPyBwaWVBcmNzLm1hcChhcmMgPT4ge1xuICAgICAgICAgIC8vRG9uJ3Qgc2hvdyBkYXRhIGxhYmVscyBmb3IgemVyby13aWR0aCBkb251dCBzbGljZXMgKGluY2x1ZGVzIG5lZ2F0aXZlIHZhbHVlcylcbiAgICAgICAgICBpZiAoYXJjLnN0YXJ0QW5nbGUgPT09IGFyYy5lbmRBbmdsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIHlQb3M6IDAsXG4gICAgICAgICAgICAgIHhQb3M6IDAsXG4gICAgICAgICAgICAgIGFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhcmNDZW50ZXJBbmdsZSA9IChhcmMuc3RhcnRBbmdsZSArIGFyYy5lbmRBbmdsZSkgLyAyO1xuICAgICAgICAgIGNvbnN0IGVkZ2VQb2ludCA9IGFyY1RvUG9pbnQoYXJjQ2VudGVyQW5nbGUsIG91dGVyKTtcbiAgICAgICAgICBjb25zdCBsaW5lRW5kUG9pbnQgPSBhcmNUb1BvaW50KFxuICAgICAgICAgICAgYXJjQ2VudGVyQW5nbGUsXG4gICAgICAgICAgICBvdXRlciArIGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbWlkZGxlQXJlYSA9IG91dGVyIC8gNDtcbiAgICAgICAgICBsZXQgeU9mZnNldCA9IDA7XG4gICAgICAgICAgbGV0IHhPZmZzZXQgPSAwO1xuICAgICAgICAgIGlmIChsaW5lRW5kUG9pbnQueSA+IDApIHtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhsaW5lRW5kUG9pbnQueSkgPCBtaWRkbGVBcmVhKSB7XG4gICAgICAgICAgICAgIHlPZmZzZXQgPSBTTUFMTF9QQURESU5HIC8gMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHlPZmZzZXQgPSBTTUFMTF9QQURESU5HO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbmVFbmRQb2ludC54KSA8IG1pZGRsZUFyZWEpIHtcbiAgICAgICAgICAgICAgeU9mZnNldCArPSBTTUFMTF9QQURESU5HIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbmVFbmRQb2ludC55KSA8IG1pZGRsZUFyZWEpIHtcbiAgICAgICAgICAgICAgeU9mZnNldCA9IFNNQUxMX1BBRERJTkcgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGxpbmVFbmRQb2ludC54KSA8IG1pZGRsZUFyZWEpIHtcbiAgICAgICAgICAgICAgeU9mZnNldCAtPSBTTUFMTF9QQURESU5HIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICAgIGxhYmVsOiBwaXBlVHJhbnNmb3JtKGFyYy5kYXRhLnZhbHVlLCBhcmMuZGF0YS5pc1NlY29uZGFyeSksXG4gICAgICAgICAgICB5UG9zOiBsaW5lRW5kUG9pbnQueSArIHlPZmZzZXQsXG4gICAgICAgICAgICB4UG9zOiBsaW5lRW5kUG9pbnQueCArIHhPZmZzZXQsXG4gICAgICAgICAgICBhbmNob3I6XG4gICAgICAgICAgICAgIE1hdGguYWJzKGxpbmVFbmRQb2ludC54KSA8IG1pZGRsZUFyZWFcbiAgICAgICAgICAgICAgICA/ICdtaWRkbGUnXG4gICAgICAgICAgICAgICAgOiBsaW5lRW5kUG9pbnQueCA8IDBcbiAgICAgICAgICAgICAgICA/ICdlbmQnXG4gICAgICAgICAgICAgICAgOiAnc3RhcnQnLFxuICAgICAgICAgICAgbGluZToge1xuICAgICAgICAgICAgICB4MTogZWRnZVBvaW50LngsXG4gICAgICAgICAgICAgIHkxOiBlZGdlUG9pbnQueSxcbiAgICAgICAgICAgICAgeDI6IGxpbmVFbmRQb2ludC54LFxuICAgICAgICAgICAgICB5MjogbGluZUVuZFBvaW50LnksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgZHJhd1dpZHRoID1cbiAgICAgIChvdXRlciArXG4gICAgICAgIChjb25maWcuc2hvd0RhdGFMYWJlbHNcbiAgICAgICAgICA/IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0ICsgZGF0YUxhYmVsVGV4dFNpemluZy5ob3Jpem9udGFsXG4gICAgICAgICAgOiAwKSkgKlxuICAgICAgMjtcbiAgICBjb25zdCBkcmF3SGVpZ2h0ID1cbiAgICAgIChvdXRlciArXG4gICAgICAgIChjb25maWcuc2hvd0RhdGFMYWJlbHNcbiAgICAgICAgICA/IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0ICsgZGF0YUxhYmVsVGV4dFNpemluZy52ZXJ0aWNhbFxuICAgICAgICAgIDogMCkpICpcbiAgICAgIDI7XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgY2VudGVyUG9pbnRYID0gZGltZW5zaW9ucy53aWR0aCAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJQb2ludFkgPSBkaW1lbnNpb25zLmhlaWdodCAvIDI7XG4gICAgICBjb25zdCBkb251dFBvc2l0aW9uWCA9IHJlYWxQb3NYIC0gY2VudGVyUG9pbnRYO1xuICAgICAgY29uc3QgZG9udXRQb3NpdGlvblkgPSByZWFsUG9zWSAtIGNlbnRlclBvaW50WTtcbiAgICAgIGNvbnN0IGhvdmVyUG9zQXJjSW5mbyA9IHBvaW50VG9BcmMoZG9udXRQb3NpdGlvblgsIGRvbnV0UG9zaXRpb25ZKTtcbiAgICAgIGNvbnN0IGFyY0NlbnRlckxpbmUgPSAob3V0ZXIgKyBpbm5lcikgLyAyO1xuXG4gICAgICAvL0RldGVjdCBkb251dCBzbGljZVxuICAgICAgbGV0IGZvdW5kWUluZGV4ID0gLTE7XG4gICAgICBsZXQgcHJlZmVycmVkUG9zaXRpb246IENhbGxvdXRDb21wb25lbnQuQW5jaG9yZWRQb3NpdGlvbiB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIGxldCBkb251dFhQb3NpdGlvbiA9IDA7XG4gICAgICBsZXQgZG9udXRZUG9zaXRpb24gPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWVBcmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyYyA9IHBpZUFyY3NbaV07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGhvdmVyUG9zQXJjSW5mby5hbmdsZSA+IGFyYy5zdGFydEFuZ2xlICYmXG4gICAgICAgICAgaG92ZXJQb3NBcmNJbmZvLmFuZ2xlIDwgYXJjLmVuZEFuZ2xlICYmXG4gICAgICAgICAgaG92ZXJQb3NBcmNJbmZvLnJhZGl1cyA+IGFyY0NlbnRlckxpbmUgLSBkcmF3UmFkaXVzICYmXG4gICAgICAgICAgaG92ZXJQb3NBcmNJbmZvLnJhZGl1cyA8IGFyY0NlbnRlckxpbmUgKyBkcmF3UmFkaXVzXG4gICAgICAgICkge1xuICAgICAgICAgIGZvdW5kWUluZGV4ID0gaTtcbiAgICAgICAgICBjb25zdCBhcmNDZW50ZXJQb2ludCA9IGFyY1RvUG9pbnQoXG4gICAgICAgICAgICAoYXJjLnN0YXJ0QW5nbGUgKyBhcmMuZW5kQW5nbGUpIC8gMixcbiAgICAgICAgICAgIGFyY0NlbnRlckxpbmUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vTmVlZCB0byB1bi1vZmZzZXQgdGhlIHBvc2l0aW9uc1xuICAgICAgICAgIGRvbnV0WFBvc2l0aW9uID0gYXJjQ2VudGVyUG9pbnQueCArIGNlbnRlclBvaW50WDtcbiAgICAgICAgICBkb251dFlQb3NpdGlvbiA9IGFyY0NlbnRlclBvaW50LnkgKyBjZW50ZXJQb2ludFk7XG4gICAgICAgICAgY29uc3QgdmVydGljYWxBcmVhID1cbiAgICAgICAgICAgIGFyY0NlbnRlclBvaW50LnkgPCAoZGltZW5zaW9ucy5oZWlnaHQgKiAtMSkgLyA0XG4gICAgICAgICAgICAgID8gJ3RvcCdcbiAgICAgICAgICAgICAgOiBhcmNDZW50ZXJQb2ludC55ID4gZGltZW5zaW9ucy5oZWlnaHQgLyA0XG4gICAgICAgICAgICAgID8gJ2JvdHRvbSdcbiAgICAgICAgICAgICAgOiAnY2VudGVyJztcblxuICAgICAgICAgIC8vRGV0ZXJtaW5lIHRoZSBiZXN0IHBvc2l0aW9uIGZvciB0aGUgdG9vbHRpcFxuICAgICAgICAgIGlmIChhcmNDZW50ZXJQb2ludC54ID4gMCkge1xuICAgICAgICAgICAgLy9SaWdodCBwYXRoXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCB2ZXJ0aWNhbEFyZWEgPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ2NlbnRlci1yaWdodCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQXJlYSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAncmlnaHQtdG9wJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxBcmVhID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdyaWdodC1ib3R0b20nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL0xlZnQgcGF0aFxuICAgICAgICAgICAgaWYgKCFjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgdmVydGljYWxBcmVhID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9ICdjZW50ZXItbGVmdCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQXJlYSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkUG9zaXRpb24gPSAnbGVmdC10b3AnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFyZWEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gJ2xlZnQtYm90dG9tJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZFlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIWhhc05vblplcm9WYWx1ZSkge1xuICAgICAgICBkb251dFhQb3NpdGlvbiA9IGNlbnRlclBvaW50WCArIGFyY0NlbnRlckxpbmU7XG4gICAgICAgIGRvbnV0WVBvc2l0aW9uID0gY2VudGVyUG9pbnRZO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbEFuY2hvclggPSBkb251dFhQb3NpdGlvbiAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0gZG9udXRZUG9zaXRpb24gLSBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSB9ID0gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICBsb2NhbEFuY2hvclgsXG4gICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICBTTUFMTF9QQURESU5HLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJyxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbixcbiAgICAgICAgICBkYXRlOiBudWxsLFxuICAgICAgICAgIG1ldHJpY3M6IGRvbnV0RGF0YVxuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBwaXBlVHJhbnNmb3JtKHkudmFsdWUsIHkuaXNTZWNvbmRhcnksIHRydWUpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PT0gZm91bmRZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgICAvL05vdCB1c2VkIGJ5IGRvbnV0IGNoYXJ0c1xuICAgICAgICB4OiAwLFxuICAgICAgICB4SW5kZXg6IDAsXG4gICAgICAgIHlzOiBbXSxcbiAgICAgICAgeUluZGV4OiAwLFxuICAgICAgICB2aXNpYmxlWUluZGV4OiAwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhcnRXaWR0aDogZHJhd1dpZHRoLFxuICAgICAgY2hhcnRIZWlnaHQ6IGRyYXdIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlczoge1xuICAgICAgICAuLi5lbXB0eUNoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBkYXRhTGFiZWxUZXh0U2l6ZTogZGF0YUxhYmVsVGV4dFNpemluZy5ob3Jpem9udGFsLFxuICAgICAgICBmb250U2l6ZTogZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICAgfSxcbiAgICAgIHhUaWNrczogW10sXG4gICAgICB5VGlja3M6IFtdLFxuICAgICAgYXJlYXM6IFtdLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgY2lyY2xlczogW10sXG4gICAgICBiYXJzOiBbXSxcbiAgICAgIGNvbG9ycyxcbiAgICAgIGFyY3MsXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgICAgZ3JhZGllbnRzOiBbXSxcbiAgICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgICAgIGhvdmVyLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmbG93cyhcbiAgICBjb25maWc6IEZsb3dDb25maWcsXG4gICAgYWxsRGF0YTogSW5wdXREYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGlmIChhbGxEYXRhLnR5cGUgIT09ICdmbG93Jykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEhlYWRzIHVwISBUaGUgJyR7YWxsRGF0YS50eXBlfScgZGF0YSB0eXBlIGlzbid0IHN1cHBvcnRlZCBmb3IgZmxvdyBjaGFydHMuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4geyAuLi5lbXB0eUNoYXJ0LCBjaGFydEVycm9yOiAnY29uZmlnJyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBmbG93c1RyYW5zZm9ybShjb25maWcsIGFsbERhdGEpO1xuICAgIGlmIChkYXRhLngubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZW1wdHlDaGFydDtcbiAgICB9XG4gICAgY29uc3Qgb3ZlcmFsbFRvdGFsID0gZGF0YS54WzBdLnRvdGFsQ291bnQ7XG5cbiAgICBjb25zdCBjaGFydFNpemluZ1ZhbHVlcyA9IGdldEZ1bGxDaGFydFNjYWxlVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICApO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZW1wdHlDaGFydCwgY2hhcnRFcnJvcjogJ3NpemluZycgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNjYWxlIH0gPSBjYWxjRGF0YUF4aXNTY2FsZXNBbmRUaWNrcyhcbiAgICAgIGRhdGEsXG4gICAgICBudWxsLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgKTtcbiAgICBjb25zdCB2YWx1ZVBpcGVzID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgcGVyY2VudFBpcGVzID0gZ2V0UGlwZXMoJ3BlcmNlbnRhZ2UnKTtcblxuICAgIGNvbnN0IGJhcnM6IEZsb3dSZWN0W11bXSA9IFtdO1xuICAgIGNvbnN0IGZsb3dDb25uZWN0aW9uczogRmxvd0Nvbm5lY3Rpb25SZW5kZXJbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFMYWJlbHM6IEZsb3dEYXRhTGFiZWxbXSA9IFtdO1xuICAgIGNvbnN0IG1pbmltdW1TaXplID0gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBidWNrZXRCYXJzOiBGbG93UmVjdFtdID0gW107XG4gICAgICBsZXQgcnVubmluZ0hlaWdodCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGJhciBvZiBkYXRhLnhbaV0uc3ViQnVja2V0cykge1xuICAgICAgICBjb25zdCBjb250aW51aW5nQ291bnQgPSBiYXIuY29ubmVjdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJylcbiAgICAgICAgICAubWFwKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5jb3VudClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB0b3RhbFNpemU6IHRvdGFsSGVpZ2h0LFxuICAgICAgICAgIGNvbnRpbnVpbmdTaXplOiBkYXJrZW5lZEhlaWdodCxcbiAgICAgICAgICBjb25uZWN0aW9uU2l6ZXMsXG4gICAgICAgIH0gPSBnZXRGbG93U3ViQnVja2V0U2l6ZXMoXG4gICAgICAgICAgYmFyLFxuICAgICAgICAgIHZhbHVlID0+IHNjYWxlKHZhbHVlLCBmYWxzZSkgLSBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldCxcbiAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbkhlaWdodCA9IChjb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvbik6IG51bWJlciA9PlxuICAgICAgICAgIGNvbm5lY3Rpb25TaXplc1tiYXIuY29ubmVjdGlvbnMuaW5kZXhPZihjb25uZWN0aW9uKV07XG4gICAgICAgIGNvbnN0IG5vbkRhcmtlbmVkSGVpZ2h0ID0gdG90YWxIZWlnaHQgLSBkYXJrZW5lZEhlaWdodDtcbiAgICAgICAgY29uc3QgZGFya2VuZWRZID0gcnVubmluZ0hlaWdodCArIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0O1xuICAgICAgICBjb25zdCBub25EYXJrZW5lZFkgPSBkYXJrZW5lZFkgKyBkYXJrZW5lZEhlaWdodDtcblxuICAgICAgICBjb25zdCB3aWR0aCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemU7XG4gICAgICAgIGNvbnN0IHggPVxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldCArXG4gICAgICAgICAgaSAqIChjaGFydFNpemluZ1ZhbHVlcy5iYXJTaXplICsgY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwKTtcbiAgICAgICAgY29uc3QgY29sb3JPdmVycmlkZSA9IGNvbmZpZy5mbG93Q29uZmlnLnN1YkJ1Y2tldHNDb25maWcuZmluZChcbiAgICAgICAgICBiYyA9PiBiYy5idWNrZXRJZCA9PT0gYmFyLmlkLFxuICAgICAgICApPy5jb2xvcjtcbiAgICAgICAgaWYgKGRhcmtlbmVkSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIGJ1Y2tldEJhcnMucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgcmVjdFR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgIGhlaWdodDogZGFya2VuZWRIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIHk6IGRhcmtlbmVkWSxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICBjb2xvck92ZXJyaWRlLFxuICAgICAgICAgICAgZGFya2VuOiB0cnVlLFxuICAgICAgICAgICAgZGVFbXBoYXNpemU6IGlzRGVFbXBoYXNpemVkKGNvbmZpZywgYmFyLmlkLCB0cnVlKSxcbiAgICAgICAgICAgIGlkOiBiYXIuaWQsXG4gICAgICAgICAgICBidWNrZXRJbmRleDogaSxcbiAgICAgICAgICAgIGNvdW50OiBjb250aW51aW5nQ291bnQsXG4gICAgICAgICAgICB0b3RhbENvdW50OiBiYXIuY291bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vbkRhcmtlbmVkSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIGJ1Y2tldEJhcnMucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50VHlwZTogJ3JlY3QnLFxuICAgICAgICAgICAgcmVjdFR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgIGhlaWdodDogbm9uRGFya2VuZWRIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIHk6IG5vbkRhcmtlbmVkWSxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICBjb2xvck92ZXJyaWRlLFxuICAgICAgICAgICAgZGFya2VuOiBmYWxzZSxcbiAgICAgICAgICAgIGRlRW1waGFzaXplOiBpc0RlRW1waGFzaXplZChjb25maWcsIGJhci5pZCwgZmFsc2UpLFxuICAgICAgICAgICAgaWQ6IGJhci5pZCxcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgICAgY291bnQ6IGJhci5jb3VudCAtIGNvbnRpbnVpbmdDb3VudCxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IGJhci5jb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL0ludmlzaWJsZSBiYXIgZm9yIGhvdmVyIGhpZ2hsaWdodCBwdXJwb3Nlc1xuICAgICAgICBidWNrZXRCYXJzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiAncmVjdCcsXG4gICAgICAgICAgcmVjdFR5cGU6ICdmbG93JyxcbiAgICAgICAgICBoZWlnaHQ6IGRhcmtlbmVkSGVpZ2h0ICsgbm9uRGFya2VuZWRIZWlnaHQsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgeTogZGFya2VuZWRZLFxuICAgICAgICAgIHgsXG4gICAgICAgICAgbm9uRGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICBpZDogYmFyLmlkLFxuICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgIGNvdW50OiBiYXIuY291bnQsXG4gICAgICAgICAgdG90YWxDb3VudDogYmFyLmNvdW50LFxuICAgICAgICAgIGRhcmtlbjogZmFsc2UsXG4gICAgICAgICAgZGVFbXBoYXNpemU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcnVubmluZ0hlaWdodCArPVxuICAgICAgICAgIHRvdGFsSGVpZ2h0ICtcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nICtcbiAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZTtcblxuICAgICAgICAvL0Nvbm5lY3Rpb25zXG4gICAgICAgIC8vQWRkIG5ldyByZW5kZXJzIGZvciBmb3J3YXJkIGNvbm5lY3Rpb25zXG4gICAgICAgIGxldCB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgYmFyLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICBjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uZGlyZWN0aW9uID09PSAnZm9yd2FyZCcsXG4gICAgICAgICkpIHtcbiAgICAgICAgICBjb25zdCB0b3BMaW5lWTEgPSBkYXJrZW5lZFkgKyB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQ7XG4gICAgICAgICAgY29uc3QgYm90dG9tTGluZVkxID0gdG9wTGluZVkxICsgY29ubmVjdGlvbkhlaWdodChjb25uZWN0aW9uKTtcbiAgICAgICAgICBjb25zdCB4MSA9IHggKyB3aWR0aDtcbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uUmVuZGVyOiBGbG93Q29ubmVjdGlvblJlbmRlciA9IHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAnY29ubmVjdGlvbicsXG4gICAgICAgICAgICBzdGFydDogY29ubmVjdGlvbi5zdGFydCxcbiAgICAgICAgICAgIGVuZDogY29ubmVjdGlvbi5lbmQsXG4gICAgICAgICAgICBjb3VudDogY29ubmVjdGlvbi5jb3VudCxcbiAgICAgICAgICAgIHN0ZXA6IGksXG4gICAgICAgICAgICB0b3BMaW5lOiB7XG4gICAgICAgICAgICAgIHkxOiB0b3BMaW5lWTEsXG4gICAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgICAvL1RvIGJlIGZpbGxlZCBpbiBsYXRlclxuICAgICAgICAgICAgICB5MjogMCxcbiAgICAgICAgICAgICAgeDI6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm90dG9tTGluZToge1xuICAgICAgICAgICAgICB5MTogYm90dG9tTGluZVkxLFxuICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgLy9UbyBiZSBmaWxsZWQgaW4gbGF0ZXJcbiAgICAgICAgICAgICAgeTI6IDAsXG4gICAgICAgICAgICAgIHgyOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vVG8gYmUgZmlsbGVkIGluIGxhdGVyXG4gICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldCArPSBjb25uZWN0aW9uSGVpZ2h0KGNvbm5lY3Rpb24pO1xuICAgICAgICAgIGZsb3dDb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb25SZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vQmFja2ZpbGwgcG9zaXRpb24gaW5mbyBmb3IgYmFja3dhcmRzIGNvbm5lY3Rpb25zXG4gICAgICAgIHZlcnRpY2FsQ29ubmVjdGlvbk9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiBiYXIuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcsXG4gICAgICAgICkpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ0Nvbm5lY3Rpb24gPSBmbG93Q29ubmVjdGlvbnMuZmluZChcbiAgICAgICAgICAgIGNvbiA9PlxuICAgICAgICAgICAgICBjb24uc3RhcnQgPT09IGNvbm5lY3Rpb24uc3RhcnQgJiZcbiAgICAgICAgICAgICAgY29uLmVuZCA9PT0gY29ubmVjdGlvbi5lbmQgJiZcbiAgICAgICAgICAgICAgY29uLnN0ZXAgPT09IGkgLSAxLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgdG9wTGluZVkyID0gZGFya2VuZWRZICsgdmVydGljYWxDb25uZWN0aW9uT2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgYm90dG9tTGluZVkyID0gdG9wTGluZVkyICsgY29ubmVjdGlvbkhlaWdodChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29ubmVjdGlvbi50b3BMaW5lLnkyID0gdG9wTGluZVkyO1xuICAgICAgICAgICAgbWF0Y2hpbmdDb25uZWN0aW9uLnRvcExpbmUueDIgPSB4O1xuICAgICAgICAgICAgbWF0Y2hpbmdDb25uZWN0aW9uLmJvdHRvbUxpbmUueTIgPSBib3R0b21MaW5lWTI7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24uYm90dG9tTGluZS54MiA9IHg7XG4gICAgICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb24ucGF0aCA9XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZUZsb3dDb25uZWN0aW9uUGF0aChtYXRjaGluZ0Nvbm5lY3Rpb24pO1xuXG4gICAgICAgICAgICB2ZXJ0aWNhbENvbm5lY3Rpb25PZmZzZXQgKz0gY29ubmVjdGlvbkhlaWdodChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL0RhdGEgTGFiZWxzXG4gICAgICAgIGNvbnN0IGJhck5hbWUgPSBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnLmZpbmQoXG4gICAgICAgICAgc2JjID0+IHNiYy5idWNrZXRJZCA9PT0gYmFyLmlkLFxuICAgICAgICApPy5idWNrZXROYW1lO1xuICAgICAgICBpZiAoYmFyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGF0YUxhYmVscy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJyxcbiAgICAgICAgICAgIGRhdGFMYWJlbFR5cGU6ICdmbG93JyxcbiAgICAgICAgICAgIGxhYmVsOiBgJHtiYXJOYW1lfSAoJHtwZXJjZW50UGlwZXMucGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgIGJhci5jb3VudCAvIGRhdGEueFtpXS50b3RhbENvdW50LFxuICAgICAgICAgICAgKX0pYCxcbiAgICAgICAgICAgIHhQb3M6IHgsXG4gICAgICAgICAgICB5UG9zOlxuICAgICAgICAgICAgICBkYXJrZW5lZFkgLVxuICAgICAgICAgICAgICAoY2hhcnRTaXppbmdWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemUgK1xuICAgICAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcpIC9cbiAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgYW5jaG9yOiAnc3RhcnQnLFxuICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBpLFxuICAgICAgICAgICAgYmFySWQ6IGJhci5pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXJTdWJ0aXRsZSA9IGNvbmZpZy5mbG93Q29uZmlnLnN1YnRpdGxlRm9ybWF0U3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgJ3t2YWx1ZX0nLFxuICAgICAgICAgIHZhbHVlUGlwZXMucGlwZS50cmFuc2Zvcm0oYmFyLmNvdW50KSxcbiAgICAgICAgKTtcbiAgICAgICAgZGF0YUxhYmVscy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ2RhdGFMYWJlbCcsXG4gICAgICAgICAgZGF0YUxhYmVsVHlwZTogJ2Zsb3cnLFxuICAgICAgICAgIGxhYmVsOiBiYXJTdWJ0aXRsZSxcbiAgICAgICAgICB4UG9zOiB4LFxuICAgICAgICAgIHlQb3M6IGRhcmtlbmVkWSAtIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFBhZGRpbmcgLyA0LFxuICAgICAgICAgIGFuY2hvcjogJ3N0YXJ0JyxcbiAgICAgICAgICBidWNrZXRJbmRleDogaSxcbiAgICAgICAgICBiYXJJZDogYmFyLmlkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJhcnMucHVzaChidWNrZXRCYXJzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBob3Zlcihwb3M6IHtcbiAgICAgIHJlY3Q6IERPTVJlY3Q7XG4gICAgICB4OiBudW1iZXI7XG4gICAgICB5OiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxYOiBudW1iZXI7XG4gICAgICBjb250YWluZXJTY3JvbGxZOiBudW1iZXI7XG4gICAgfSk6IEhvdmVyUmV0dXJuIHtcbiAgICAgIGNvbnN0IHJlYWxQb3NYID0gcG9zLnggKyBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgIGNvbnN0IHJlYWxQb3NZID0gcG9zLnkgKyBwb3MuY29udGFpbmVyU2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwgfHxcbiAgICAgICAgZ2V0SWZIb3Zlck91dE9mQm91bmRzKFxuICAgICAgICAgIHBvcy54LFxuICAgICAgICAgIHBvcy55LFxuICAgICAgICAgIHJlYWxQb3NYLFxuICAgICAgICAgIHJlYWxQb3NZLFxuICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAgIGRpbWVuc2lvbnMsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnVja2V0SW5kZXhJbmZvID0gZ2V0Rmxvd0J1Y2tldEluZGV4Rm9ySG92ZXIoXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICByZWFsUG9zWCxcbiAgICAgICk7XG4gICAgICBpZiAoYnVja2V0SW5kZXhJbmZvID09PSBudWxsIHx8IGJ1Y2tldEluZGV4SW5mby5pbmRleCA+PSBiYXJzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChidWNrZXRJbmRleEluZm8uYXJlYSA9PT0gJ2JhcicpIHtcbiAgICAgICAgZm9yIChjb25zdCBiYXIgb2YgYmFyc1tidWNrZXRJbmRleEluZm8uaW5kZXhdKSB7XG4gICAgICAgICAgaWYgKHJlYWxQb3NZIDwgYmFyLnkpIHtcbiAgICAgICAgICAgIC8vQmFyIHRpdGxlXG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclggPSBiYXIueCAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBiYXIud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nIC8gMiArXG4gICAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBbmNob3JZID0gYmFyLnkgLSAocG9zLmNvbnRhaW5lclNjcm9sbFkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZLCBhbmNob3JXaWR0aCwgYW5jaG9ySGVpZ2h0IH0gPVxuICAgICAgICAgICAgICBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgICAgICAgIGFuY2hvcldpZHRoLFxuICAgICAgICAgICAgICBhbmNob3JIZWlnaHQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG92ZXJUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICAgIGhvdmVyVGFyZ2V0OiAnYmFyVGl0bGUnLFxuICAgICAgICAgICAgICBiYXJJZDogYmFyLmlkID8/ICcnLFxuICAgICAgICAgICAgICBidWNrZXRJbmRleDogYnVja2V0SW5kZXhJbmZvLmluZGV4LFxuICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBjb25maWcuZmxvd0NvbmZpZy5zdWJ0aXRsZUZvcm1hdFN0cmluZy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgJ3t2YWx1ZX0nLFxuICAgICAgICAgICAgICAgICAgdmFsdWVQaXBlcy5waXBlLnRyYW5zZm9ybShiYXIudG90YWxDb3VudCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIC8vIFRoZSBpbnZpc2libGUgaGlnaGxpZ2h0IGJhciBzcGFucyBib3RoIHBvcnRpb25zLCBzbyBza2lwIGl0IHRvXG4gICAgICAgICAgICAvLyBhdm9pZCBtaXNyZXBvcnRpbmcgYSBwb3J0aW9uIGJvdW5kYXJ5IGFzIHRoZSBlbmRpbmcgcG9ydGlvblxuICAgICAgICAgICAgIWJhci5ub25EaXNwbGF5ICYmXG4gICAgICAgICAgICByZWFsUG9zWSA+PSBiYXIueSAmJlxuICAgICAgICAgICAgcmVhbFBvc1kgPCBiYXIueSArIGJhci5oZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vQmFyXG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclggPSBiYXIueCAtIHBvcy5jb250YWluZXJTY3JvbGxYO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBiYXIud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclkgPSBiYXIueSAtIHBvcy5jb250YWluZXJTY3JvbGxZO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYmFyLmhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHsgYW5jaG9yWCwgYW5jaG9yWSwgYW5jaG9yV2lkdGgsIGFuY2hvckhlaWdodCB9ID1cbiAgICAgICAgICAgICAgY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWCxcbiAgICAgICAgICAgICAgICBsb2NhbEFuY2hvclksXG4gICAgICAgICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgICAgICAgYW5jaG9yWCArIHBvcy5yZWN0LngsXG4gICAgICAgICAgICAgIGFuY2hvclkgKyBwb3MucmVjdC55LFxuICAgICAgICAgICAgICBhbmNob3JXaWR0aCxcbiAgICAgICAgICAgICAgYW5jaG9ySGVpZ2h0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGhvdmVyVHlwZTogJ2Zsb3cnLFxuICAgICAgICAgICAgICBob3ZlclRhcmdldDogJ2JhcicsXG4gICAgICAgICAgICAgIGJhcklkOiBiYXIuaWQgPz8gJycsXG4gICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBidWNrZXRJbmRleEluZm8uaW5kZXgsXG4gICAgICAgICAgICAgIGZvckRhcmtlbjogYmFyLmRhcmtlbiA9PT0gdHJ1ZSxcbiAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZTogY29uZmlnLmZsb3dDb25maWcuc3VidGl0bGVGb3JtYXRTdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICd7dmFsdWV9JyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlUGlwZXMucGlwZS50cmFuc2Zvcm0oYmFyLmNvdW50KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiBmbG93Q29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIGZsb3dDb24gPT4gZmxvd0Nvbi5zdGVwID09PSBidWNrZXRJbmRleEluZm8uaW5kZXgsXG4gICAgICAgICkpIHtcbiAgICAgICAgICBpZiAoY2hlY2tJZlBvaW50V2l0aGluQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZWFsUG9zWCwgcmVhbFBvc1kpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbEFuY2hvclggPSBjb25uZWN0aW9uLnRvcExpbmUueDEgLSBwb3MuY29udGFpbmVyU2Nyb2xsWDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY29ubmVjdGlvbi50b3BMaW5lLngyIC0gY29ubmVjdGlvbi50b3BMaW5lLngxO1xuICAgICAgICAgICAgY29uc3QgY3VydmVUb3AgPSBiZXppZXJZQXRYKFxuICAgICAgICAgICAgICAoY29ubmVjdGlvbi50b3BMaW5lLngxICsgY29ubmVjdGlvbi50b3BMaW5lLngyKSAvIDIsXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24udG9wTGluZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBjdXJ2ZUJvdHRvbSA9IGJlemllcllBdFgoXG4gICAgICAgICAgICAgIChjb25uZWN0aW9uLnRvcExpbmUueDEgKyBjb25uZWN0aW9uLnRvcExpbmUueDIpIC8gMixcbiAgICAgICAgICAgICAgY29ubmVjdGlvbi5ib3R0b21MaW5lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQW5jaG9yWSA9IGN1cnZlVG9wIC0gcG9zLmNvbnRhaW5lclNjcm9sbFk7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjdXJ2ZUJvdHRvbSAtIGN1cnZlVG9wO1xuICAgICAgICAgICAgY29uc3QgeyBhbmNob3JYLCBhbmNob3JZLCBhbmNob3JXaWR0aCwgYW5jaG9ySGVpZ2h0IH0gPVxuICAgICAgICAgICAgICBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgICAgICAgICAgICAgbG9jYWxBbmNob3JYLFxuICAgICAgICAgICAgICAgIGxvY2FsQW5jaG9yWSxcbiAgICAgICAgICAgICAgICBkaW1lbnNpb25zLFxuICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICAgICAgICBhbmNob3JYICsgcG9zLnJlY3QueCxcbiAgICAgICAgICAgICAgYW5jaG9yWSArIHBvcy5yZWN0LnksXG4gICAgICAgICAgICAgIGFuY2hvcldpZHRoLFxuICAgICAgICAgICAgICBhbmNob3JIZWlnaHQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG92ZXJUeXBlOiAnZmxvdycsXG4gICAgICAgICAgICAgIGhvdmVyVGFyZ2V0OiAnY29ubmVjdGlvbicsXG4gICAgICAgICAgICAgIHN0YXJ0SWQ6IGNvbm5lY3Rpb24uc3RhcnQsXG4gICAgICAgICAgICAgIGVuZElkOiBjb25uZWN0aW9uLmVuZCxcbiAgICAgICAgICAgICAgc3RhcnRCdWNrZXRJbmRleDogY29ubmVjdGlvbi5zdGVwLFxuICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBjb25maWcuZmxvd0NvbmZpZy5zdWJ0aXRsZUZvcm1hdFN0cmluZy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgJ3t2YWx1ZX0nLFxuICAgICAgICAgICAgICAgICAgdmFsdWVQaXBlcy5waXBlLnRyYW5zZm9ybShjb25uZWN0aW9uLmNvdW50KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYXJ0V2lkdGg6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsV2lkdGgsXG4gICAgICBjaGFydEhlaWdodDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQsXG4gICAgICBjaGFydFNpemluZ1ZhbHVlcyxcbiAgICAgIHhUaWNrczogW10sXG4gICAgICB5VGlja3M6IFtdLFxuICAgICAgY29sb3JzOiBbXSxcbiAgICAgIGJhcnMsXG4gICAgICBsaW5lczogW10sXG4gICAgICBjaXJjbGVzOiBbXSxcbiAgICAgIGFyZWFzOiBbXSxcbiAgICAgIGhvdmVyLFxuICAgICAgYXJjczogW10sXG4gICAgICBob3Jpem9udGFsQmFyczogW10sXG4gICAgICBkYXRhTGFiZWxzLFxuICAgICAgd2F0ZXJmYWxsTGluZXM6IFtdLFxuICAgICAgZ3JhZGllbnRzOiBbXSxcbiAgICAgIGZsb3dDb25uZWN0aW9ucyxcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdmVydGljYWxDb250YWluZXJTY2FsZTogY2hhcnRTaXppbmdWYWx1ZXMudmVydGljYWxDb250YWluZXJTY2FsZSxcbiAgICAgIGNoYXJ0RXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAgTWlycm9ycyB0aGUgYnVja2V0aW5nIGluIGZsb3dzVHJhbnNmb3JtOiBhIHBhdGggY29udHJpYnV0ZXMgdmFsdWVzW2ldIHRvXG4gICAgdGhlIGJhciBhdCBzdGVwIGksIGFuZCB2YWx1ZXNbaSArIDFdIHRvIGl0cyBmb3J3YXJkIGNvbm5lY3Rpb24gKHdoaWNoIGlzXG4gICAgYWxzbyB0aGUgYmFyJ3MgY29udGludWluZyBwb3J0aW9uKS5cbiAgKi9cbiAgZnVuY3Rpb24gZmxvd1ZhbHVlQXRTdGVwKHk6IEZsb3dZLCBzdGVwOiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4geS5zdGVwcy5sZW5ndGggPiBzdGVwICYmIHkudmFsdWVzLmxlbmd0aCA+IHN0ZXBcbiAgICAgID8geS52YWx1ZXNbc3RlcF1cbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1bUZsb3dWYWx1ZXMoXG4gICAgZGF0YTogRmxvd0RhdGEsXG4gICAgeUluZGljZXM6IG51bWJlcltdLFxuICAgIHN0ZXA6IG51bWJlcixcbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4geUluZGljZXNcbiAgICAgIC5tYXAoaW5kZXggPT4gZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwKSA/PyAwKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvRmxvd0NsaWNrRXZlbnQoXG4gICAgaG92ZXI6IEZsb3dIb3ZlclRhcmdldCxcbiAgICBkYXRhOiBGbG93RGF0YSxcbiAgKTogRmxvd0NsaWNrRXZlbnQge1xuICAgIGNvbnN0IGFsbFlJbmRpY2VzID0gZGF0YS55cy5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCk7XG4gICAgaWYgKGhvdmVyLmhvdmVyVGFyZ2V0ID09PSAnY29ubmVjdGlvbicpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBob3Zlci5zdGFydEJ1Y2tldEluZGV4O1xuICAgICAgY29uc3QgeUluZGljZXMgPSBhbGxZSW5kaWNlcy5maWx0ZXIoXG4gICAgICAgIGluZGV4ID0+XG4gICAgICAgICAgZGF0YS55c1tpbmRleF0uc3RlcHNbc3RlcF0gPT09IGhvdmVyLnN0YXJ0SWQgJiZcbiAgICAgICAgICBmbG93VmFsdWVBdFN0ZXAoZGF0YS55c1tpbmRleF0sIHN0ZXApICE9PSBudWxsICYmXG4gICAgICAgICAgZGF0YS55c1tpbmRleF0uc3RlcHNbc3RlcCArIDFdID09PSBob3Zlci5lbmRJZCAmJlxuICAgICAgICAgIGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCArIDEpICE9PSBudWxsLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldDogJ2Nvbm5lY3Rpb24nLFxuICAgICAgICBzdGFydEJ1Y2tldEluZGV4OiBzdGVwLFxuICAgICAgICBzdGFydElkOiBob3Zlci5zdGFydElkLFxuICAgICAgICBlbmRJZDogaG92ZXIuZW5kSWQsXG4gICAgICAgIGNvdW50OiBzdW1GbG93VmFsdWVzKGRhdGEsIHlJbmRpY2VzLCBzdGVwICsgMSksXG4gICAgICAgIHlJbmRpY2VzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwID0gaG92ZXIuYnVja2V0SW5kZXg7XG4gICAgY29uc3QgYmFyWUluZGljZXMgPSBhbGxZSW5kaWNlcy5maWx0ZXIoXG4gICAgICBpbmRleCA9PlxuICAgICAgICBkYXRhLnlzW2luZGV4XS5zdGVwc1tzdGVwXSA9PT0gaG92ZXIuYmFySWQgJiZcbiAgICAgICAgZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwKSAhPT0gbnVsbCxcbiAgICApO1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSBzdW1GbG93VmFsdWVzKGRhdGEsIGJhcllJbmRpY2VzLCBzdGVwKTtcbiAgICBjb25zdCBiYXNlID0geyBidWNrZXRJbmRleDogc3RlcCwgYmFySWQ6IGhvdmVyLmJhcklkIH07XG4gICAgaWYgKGhvdmVyLmhvdmVyVGFyZ2V0ID09PSAnYmFyVGl0bGUnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICB0YXJnZXQ6ICd0aXRsZScsXG4gICAgICAgIGNvdW50OiB0b3RhbENvdW50LFxuICAgICAgICB5SW5kaWNlczogYmFyWUluZGljZXMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRpbnVpbmdDb3VudCA9IHN1bUZsb3dWYWx1ZXMoZGF0YSwgYmFyWUluZGljZXMsIHN0ZXAgKyAxKTtcbiAgICBpZiAoaG92ZXIuZm9yRGFya2VuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICB0YXJnZXQ6ICdjb250aW51aW5nJyxcbiAgICAgICAgY291bnQ6IGNvbnRpbnVpbmdDb3VudCxcbiAgICAgICAgdG90YWxDb3VudCxcbiAgICAgICAgeUluZGljZXM6IGJhcllJbmRpY2VzLmZpbHRlcihcbiAgICAgICAgICBpbmRleCA9PiAoZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwICsgMSkgPz8gMCkgPiAwLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICB0YXJnZXQ6ICdlbmRpbmcnLFxuICAgICAgY291bnQ6IHRvdGFsQ291bnQgLSBjb250aW51aW5nQ291bnQsXG4gICAgICB0b3RhbENvdW50LFxuICAgICAgeUluZGljZXM6IGJhcllJbmRpY2VzLmZpbHRlcihcbiAgICAgICAgaW5kZXggPT5cbiAgICAgICAgICAoZmxvd1ZhbHVlQXRTdGVwKGRhdGEueXNbaW5kZXhdLCBzdGVwKSA/PyAwKSA+XG4gICAgICAgICAgKGZsb3dWYWx1ZUF0U3RlcChkYXRhLnlzW2luZGV4XSwgc3RlcCArIDEpID8/IDApLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgU01BTExfUEFERElORyA9IDg7XG4gIGV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDEyOyAvL3RoZSB3aWR0aCBjb25zdGFudHMgYXJlIGJhc2VkIG9uIGZvbnQgc2l6ZSAxMiwgc28gdGhpcyB2YXJpYWJsZSBjYW4gaGVscCB3LyBzY2FsaW5nXG4gIGV4cG9ydCBjb25zdCBXSURUSF9QRVJfTEVUVEVSID0gNi41O1xuICBjb25zdCBXSURUSF9QRVJfTlVNQkVSID0gNztcbiAgY29uc3QgV0lEVEhfUEVSX1BFUklPRCA9IDI7XG4gIGNvbnN0IFdJRFRIX1BFUl9TTEFTSCA9IDQ7XG4gIC8vV2hlbiB0aGUgZGF0YSBheGlzIGdyb3dzLCB0aGUgZGF0YSBpcyBhbHdheXMgZ2l2ZW4gYXQgbGVhc3QgdGhpcyBwb3J0aW9uIG9mIHRoZSBwcm92aWRlZCBzaXplXG4gIGNvbnN0IEdST1dOX0RBVEFfTUlOSU1VTV9SQVRJTyA9IDAuNTtcbiAgY29uc3QgREVGQVVMVF9IT1JJWk9OVEFMX0JBUl9DT1JORVJfUkFESVVTID0gNDtcbiAgY29uc3QgRkxPV19DT05ORUNUSU9OX0NVUlZFX0NPTlNUQU5UID0gMC41O1xuXG4gIGZ1bmN0aW9uIGdldEZvcm1hdHRpbmdBbmRDb2xvcnMoXG4gICAgb3JpZ2luYWxEYXRhOiBOb25GbG93RGF0YSxcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgKSB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IChkYXRlOiBEYXRlKSA9PlxuICAgICAgZm9ybWF0ZWREYXRlKGNvbmZpZy5kYXRlRm9ybWF0IHx8ICdkYXknLCBkYXRlKTtcbiAgICBjb25zdCB7IHBpcGUsIGZ1bGxQaXBlIH0gPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCB7IHBpcGU6IHNlY29uZGFyeVBpcGUsIGZ1bGxQaXBlOiBzZWNvbmRhcnlGdWxsUGlwZSB9ID1cbiAgICAgIGNvbmZpZy5zZWNvbmRhcnlWYWx1ZVR5cGVcbiAgICAgICAgPyBnZXRQaXBlcyhjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlKVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHBpcGUsXG4gICAgICAgICAgICBmdWxsUGlwZSxcbiAgICAgICAgICB9O1xuICAgIGNvbnN0IHBpcGVUcmFuc2Zvcm0gPSAoXG4gICAgICB2YWx1ZTogbnVtYmVyLFxuICAgICAgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICAgICBpc0Z1bGw/OiBib29sZWFuLFxuICAgICk6IHN0cmluZyA9PiB7XG4gICAgICBpZiAoaXNGdWxsICE9PSB0cnVlKSB7XG4gICAgICAgIGlmIChpc1NlY29uZGFyeSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBzZWNvbmRhcnlQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRWYWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKGlzU2Vjb25kYXJ5KSB7XG4gICAgICAgIHJldFZhbCA9IHNlY29uZGFyeUZ1bGxQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXRWYWwgPSBmdWxsUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFZhbCAhPT0gbnVsbCA/IHJldFZhbCA6ICctJztcbiAgICB9O1xuXG4gICAgLy8gUHJlLWNhbGN1bGF0ZSBjb2xvciBpbmRpY2VzIGZvciBhbGwgaXRlbXMgKHVzZSBvcmlnaW5hbCBkYXRhIGZvciBzdGFibGUgY29sb3JzKVxuICAgIGNvbnN0IGNvbG9ySW5kaWNlcyA9IGNhbGN1bGF0ZUNvbG9ySW5kaWNlcyhvcmlnaW5hbERhdGEpO1xuICAgIGNvbnN0IGNvbG9ycyA9IGRhdGEueXMubWFwKHkgPT4gZ2V0Q29sb3IoeSwgY29sb3JJbmRpY2VzLCBjb25maWcuY29sb3JzKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgIHBpcGVUcmFuc2Zvcm0sXG4gICAgICBjb2xvckluZGljZXMsXG4gICAgICBjb2xvcnMsXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2xvckluZGljZXMoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICk6IE1hcDxEYXRhWSB8IFN1cHBsZW1lbnRhcnlEYXRhWSwgbnVtYmVyPiB7XG4gICAgY29uc3QgY29sb3JNYXAgPSBuZXcgTWFwPERhdGFZIHwgU3VwcGxlbWVudGFyeURhdGFZLCBudW1iZXI+KCk7XG5cbiAgICAvLyBPcmlnaW5hbCBZczogdXNlIHRoZWlyIGFycmF5IGluZGV4IGRpcmVjdGx5XG4gICAgZGF0YS55cy5mb3JFYWNoKCh5LCBpbmRleCkgPT4ge1xuICAgICAgY29sb3JNYXAuc2V0KHksIGluZGV4KTtcbiAgICB9KTtcblxuICAgIC8vIFN1cHBsZW1lbnRhcnkgWXM6IGdyb3VwIGJ5IHN1cHBsZW1lbnRhbEluZGV4LCB1c2UgcG9zaXRpb24gd2l0aGluIHRoYXQgZ3JvdXBcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkpIHtcbiAgICAgIGNvbnN0IHN1cHBHcm91cHMgPSBuZXcgTWFwPG51bWJlciwgU3VwcGxlbWVudGFyeURhdGFZW10+KCk7XG5cbiAgICAgIGRhdGEuc3VwcGxlbWVudGFyeVlzLmZvckVhY2goc3VwcFkgPT4ge1xuICAgICAgICBpZiAoIXN1cHBHcm91cHMuaGFzKHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4KSkge1xuICAgICAgICAgIHN1cHBHcm91cHMuc2V0KHN1cHBZLnN1cHBsZW1lbnRhbEluZGV4LCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwcEdyb3Vwcy5nZXQoc3VwcFkuc3VwcGxlbWVudGFsSW5kZXgpIS5wdXNoKHN1cHBZKTtcbiAgICAgIH0pO1xuXG4gICAgICBzdXBwR3JvdXBzLmZvckVhY2goaXRlbXMgPT4ge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBwb3NpdGlvbkluR3JvdXApID0+IHtcbiAgICAgICAgICBjb2xvck1hcC5zZXQoaXRlbSwgcG9zaXRpb25Jbkdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JNYXA7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3IoXG4gICAgaXRlbTogRGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVkgfCB1bmRlZmluZWQsXG4gICAgY29sb3JJbmRpY2VzOiBNYXA8RGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVksIG51bWJlcj4sXG4gICAgY29sb3JzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sb3JzWzBdO1xuICAgIH1cbiAgICBpZiAoaXRlbS5jb2xvclRva2VuKSByZXR1cm4gaXRlbS5jb2xvclRva2VuO1xuICAgIGNvbnN0IGNvbG9ySW5kZXggPSBjb2xvckluZGljZXMuZ2V0KGl0ZW0pID8/IDA7XG4gICAgcmV0dXJuIGNvbG9yc1tjb2xvckluZGV4ICUgY29sb3JzLmxlbmd0aF07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCdWNrZXRUaWNrQ291bnQoY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzKTogbnVtYmVyIHtcbiAgICBsZXQgYXZhaWxhYmxlU2l6ZSA9IDA7XG4gICAgbGV0IG1pblNwYWNpbmcgPSAxO1xuICAgIGlmIChjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIGF2YWlsYWJsZVNpemUgPVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFdpZHRoIC1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMubGVmdFBhZGRpbmcgLVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy5yaWdodFBhZGRpbmc7XG4gICAgICBtaW5TcGFjaW5nID1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuaG9yaXpvbnRhbEF4aXNMYWJlbFRleHRTaXplICsgU01BTExfUEFERElORztcbiAgICB9XG4gICAgaWYgKGNoYXJ0U2l6aW5nVmFsdWVzLmNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBhdmFpbGFibGVTaXplID1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxIZWlnaHQgLVxuICAgICAgICBjaGFydFNpemluZ1ZhbHVlcy50b3BQYWRkaW5nIC1cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYm90dG9tUGFkZGluZztcbiAgICAgIG1pblNwYWNpbmcgPSBjaGFydFNpemluZ1ZhbHVlcy52ZXJ0aWNhbEF4aXNMYWJlbFRleHRTaXplICsgU01BTExfUEFERElORztcbiAgICB9XG4gICAgbWluU3BhY2luZyA9IG1pblNwYWNpbmcgKiAoY2hhcnRTaXppbmdWYWx1ZXMuZm9udFNpemUgLyBERUZBVUxUX0ZPTlRfU0laRSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDIsIE1hdGguZmxvb3IoYXZhaWxhYmxlU2l6ZSAvIG1pblNwYWNpbmcpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENsdXN0ZXJJbmZvRm9yQnVja2V0KFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICApOiB7XG4gICAgbm9ybUNvdW50OiBudW1iZXI7XG4gICAgc3VwcENvdW50OiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBub3JtQ2x1c3RlckluZGljZXM6IG51bWJlcltdO1xuICAgIHN1cHBDbHVzdGVySW5kaWNlczogbnVtYmVyW107XG4gIH0ge1xuICAgIC8vIFNsb3QgbGF5b3V0IGlzIHRoZSBzYW1lIGZvciBldmVyeSBidWNrZXQg4oCUIHplcm8gdmFsdWVzIHN0aWxsIG9jY3VweVxuICAgIC8vIHRoZWlyIHNsb3QsIHRoZXkganVzdCByZW5kZXIgd2l0aCBubyBoZWlnaHQvd2lkdGguIFRoaXMga2VlcHMgYnVja2V0XG4gICAgLy8gc2l6ZXMsIGJhciBwb3NpdGlvbnMsIGFuZCBob3ZlciBkZXRlY3Rpb24gY29uc2lzdGVudCBhY3Jvc3MgYnVja2V0c1xuICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggc2VyaWVzIGhhcHBlbiB0byBiZSB6ZXJvLlxuICAgIGNvbnN0IG5vcm1DbHVzdGVySW5kaWNlcyA9IGRhdGEueXMubWFwKChfLCB5SW5kZXgpID0+IHlJbmRleCk7XG4gICAgY29uc3Qgbm9ybUNsdXN0ZXJDb3VudCA9IG5vcm1DbHVzdGVySW5kaWNlcy5sZW5ndGg7XG4gICAgY29uc3Qgc3VwcENsdXN0ZXJJbmRpY2VzID0gdW5pcShcbiAgICAgIGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpXG4gICAgICAgID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMubWFwKHkgPT4geS5zdXBwbGVtZW50YWxJbmRleClcbiAgICAgICAgOiBbXSxcbiAgICApO1xuICAgIHN1cHBDbHVzdGVySW5kaWNlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBjb25zdCBzdXBwQ2x1c3RlckNvdW50ID0gc3VwcENsdXN0ZXJJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBhY3R1YWxOb3JtQ2x1c3RlckNvdW50ID0gaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgZmFsc2UpXG4gICAgICA/IG5vcm1DbHVzdGVyQ291bnRcbiAgICAgIDogTWF0aC5taW4obm9ybUNsdXN0ZXJDb3VudCwgMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9ybUNvdW50OiBhY3R1YWxOb3JtQ2x1c3RlckNvdW50LFxuICAgICAgc3VwcENvdW50OiBzdXBwQ2x1c3RlckNvdW50LFxuICAgICAgdG90YWw6IGFjdHVhbE5vcm1DbHVzdGVyQ291bnQgKyBzdXBwQ2x1c3RlckNvdW50LFxuICAgICAgbm9ybUNsdXN0ZXJJbmRpY2VzLFxuICAgICAgc3VwcENsdXN0ZXJJbmRpY2VzLFxuICAgIH07XG4gIH1cblxuICAvL1RoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIHRvdGFsIGRpc3RhbmNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBidWNrZXQsIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYnVja2V0XG4gIGZ1bmN0aW9uIGdldEJ1Y2tldFNpemUoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsQmFyTnVtYmVyID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCBidWNrZXRTaXplID1cbiAgICAgIHRvdGFsQmFyTnVtYmVyLnRvdGFsICogY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArXG4gICAgICAodG90YWxCYXJOdW1iZXIudG90YWwgLSAxKSAqIGNoYXJ0U2l6aW5nVmFsdWVzLmJhckNsdXN0ZXJHYXA7XG5cbiAgICByZXR1cm4gYnVja2V0U2l6ZTtcbiAgfVxuXG4gIC8vVGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgdG90YWwgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIGJ1Y2tldCwgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGJ1Y2tldFxuICBmdW5jdGlvbiBnZXRUb3RhbEJ1Y2tldEdhcChcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgYnVja2V0U2l6ZSA9IGdldEJ1Y2tldFNpemUoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgcmV0dXJuIGJ1Y2tldFNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5idWNrZXRHYXA7XG4gIH1cblxuICAvL1RoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIHRvdGFsIGRpc3RhbmNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBidWNrZXQsIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gYnVja2V0XG4gIGZ1bmN0aW9uIGdldFRvdGFsUHJlQnVja2V0R2FwKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGxldCBjdW11bGF0aXZlQnVja2V0R2FwID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Y2tldEluZGV4OyBpKyspIHtcbiAgICAgIGN1bXVsYXRpdmVCdWNrZXRHYXAgKz0gZ2V0VG90YWxCdWNrZXRHYXAoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gICAgfVxuICAgIHJldHVybiBjdW11bGF0aXZlQnVja2V0R2FwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVUaW1lc2VyaWVzVGlja3MoXG4gICAgZGF0YTogVGltZXNlcmllc0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgdGlja0NvdW50OiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGZvcm1hdDogKGRhdGU6IERhdGUpID0+IHN0cmluZyxcbiAgKTogR2VuZXJpY1RpY2tbXSB7XG4gICAgY29uc3QgZ2V0TGFiZWwgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIGZvcm1hdChuZXcgRGF0ZShkYXRhLnhbaW5kZXhdKSk7XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0VGlja3MoZGF0YSwgZ2V0TGFiZWwsIGNvbmZpZywgdGlja0NvdW50LCBjaGFydFNpemluZ1ZhbHVlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUxhYmVsbGVkVGlja3MoXG4gICAgZGF0YTogTGFiZWxlZERhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgdGlja0NvdW50OiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiBHZW5lcmljVGlja1tdIHtcbiAgICBjb25zdCBnZXRMYWJlbCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS54W2luZGV4XS5sYWJlbDtcbiAgICB9O1xuICAgIHJldHVybiBnZXRUaWNrcyhkYXRhLCBnZXRMYWJlbCwgY29uZmlnLCB0aWNrQ291bnQsIGNoYXJ0U2l6aW5nVmFsdWVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRpY2tzKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGdldExhYmVsOiAoaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHRpY2tDb3VudDogbnVtYmVyLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgKTogR2VuZXJpY1RpY2tbXSB7XG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKGRhdGEueC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGxhYmVsT2Zmc2V0ID0gZ2V0VGlja0xhYmVsT2Zmc2V0KFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBbeyB2YWx1ZTogbGFiZWxPZmZzZXQsIGxhYmVsOiBnZXRMYWJlbCgwKSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0SW5kZXggPSBkYXRhLngubGVuZ3RoIC0gMTtcbiAgICBjb25zdCB0aWNrQnVja2V0U3BhY2luZyA9IE1hdGguY2VpbChsYXN0SW5kZXggLyB0aWNrQ291bnQpO1xuICAgIGNvbnN0IG51bVRpY2tzID0gTWF0aC5mbG9vcihsYXN0SW5kZXggLyB0aWNrQnVja2V0U3BhY2luZykgKyAxO1xuICAgIGNvbnN0IHN0ZXAgPSBsYXN0SW5kZXggLyAobnVtVGlja3MgLSAxKTtcblxuICAgIC8vIEFsd2F5cyBpbmNsdWRlIGZpcnN0IGFuZCBsYXN0IGRhdGEgcG9pbnRzLlxuICAgIC8vIElubmVyIHRpY2tzIGFyZSBhcHByb3hpbWF0ZWx5IGV2ZW5seSBzcGFjZWQgdXNpbmcgcm91bmRpbmcuXG4gICAgY29uc3QgaW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRpY2tzOyBpKyspIHtcbiAgICAgIGluZGljZXMucHVzaChNYXRoLnJvdW5kKGkgKiBzdGVwKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXMubWFwKGkgPT4ge1xuICAgICAgY29uc3QgbGFiZWxPZmZzZXQgPSBnZXRUaWNrTGFiZWxPZmZzZXQoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICAgIGksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6XG4gICAgICAgICAgZ2V0VG90YWxQcmVCdWNrZXRHYXAoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcywgaSkgK1xuICAgICAgICAgIGxhYmVsT2Zmc2V0LFxuICAgICAgICBsYWJlbDogZ2V0TGFiZWwoaSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGlja0xhYmVsT2Zmc2V0KFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICApIHtcbiAgICBjb25zdCBpbmhlcmVudE9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0XG4gICAgICAgIDogY2hhcnRTaXppbmdWYWx1ZXMudG90YWxMZWZ0T2Zmc2V0O1xuICAgIC8vVG8gaGF2ZSB0aGUgbGFiZWwgYmUgY2VudGVyZWQgb24gdGhlIGJ1Y2tldCdzIGNlbnRlciBwb3NpdGlvblxuICAgIGNvbnN0IGJ1Y2tldE9mZnNldCA9IGdldEJ1Y2tldFNpemUoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcykgLyAyO1xuICAgIGxldCBob3Jpem9udGFsQmFyT2Zmc2V0ID0gMDtcbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIC8vVGhpcyBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IHRoZSBpbmhlcmVudE9mZnNldCBhbmQgYnVja2V0T2Zmc2V0IHJlc3VsdCBpbiBtYXRjaGluZyB5IHZhbHVlcyBmb3IgdGhlIGJhciBhbmQgdGhlIGxhYmVsXG4gICAgICAvLyAgSG93ZXZlciwgZm9yIHRoZSBiYXIsIHRoYXQgeSBwb3NpdGlvbiBpcyB0aGUgdG9wIG9mIHRoZSBiYXIsIHdoaWxlIGZvciB0aGUgbGFiZWwsIGl0J3MgdGhlIGJvdHRvbSBvZiB0aGUgbGFiZWxcbiAgICAgIC8vICBXaGVuIGV4YWN0bHkgbGluZWQgdXAgbGlrZSB0aGF0LCB0aGUgbGFiZWwgYWN0dWFsbHkgbG9va3MgYSBsaXR0bGUgbG93LCBzbyB0aGF0IC0yIG1ha2VzIGl0IGxvb2sgY29ycmVjdFxuICAgICAgaG9yaXpvbnRhbEJhck9mZnNldCA9IGNoYXJ0U2l6aW5nVmFsdWVzLmZvbnRTaXplIC8gMiAtIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaGVyZW50T2Zmc2V0ICsgYnVja2V0T2Zmc2V0ICsgaG9yaXpvbnRhbEJhck9mZnNldDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIElucHV0RGF0YSA9IExhYmVsZWREYXRhIHwgVGltZXNlcmllc0RhdGEgfCBGbG93RGF0YTtcbiAgZXhwb3J0IHR5cGUgUHJvY2Vzc0RhdGEgPSBMYWJlbGVkRGF0YSB8IFRpbWVzZXJpZXNEYXRhIHwgUHJvY2Vzc2VkRmxvd0RhdGE7XG4gIGV4cG9ydCB0eXBlIE5vbkZsb3dEYXRhID0gTGFiZWxlZERhdGEgfCBUaW1lc2VyaWVzRGF0YTtcblxuICB0eXBlIEJhc2VEYXRhID0ge1xuICAgIHlzOiBEYXRhWVtdO1xuICAgIHN1cHBsZW1lbnRhcnlZcz86IFN1cHBsZW1lbnRhcnlEYXRhWVtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBhdHRlcm4gPSAnc29saWQnIHwgJ3N0cmlwZWQnIHwgJ2RvdHMnO1xuXG4gIGV4cG9ydCB0eXBlIERhdGFZID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29sb3JUb2tlbj86IHN0cmluZztcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIGlzU2Vjb25kYXJ5PzogYm9vbGVhbjtcbiAgICBwYXR0ZXJuPzogUGF0dGVybjtcbiAgICBzaG93TGVnZW5kSXRlbT86IGJvb2xlYW47XG4gICAgY2xpY2thYmxlPzogYm9vbGVhbjtcbiAgICB2YWx1ZXM6IG51bWJlcltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN1cHBsZW1lbnRhcnlEYXRhWSA9IERhdGFZICYge1xuICAgIHN1cHBsZW1lbnRhbEluZGV4OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd1kgPSB7XG4gICAgc3RlcHM6IHN0cmluZ1tdOyAvL1Nob3VsZCBhbHdheXMgbWF0Y2ggaW4gbGVuZ3RoIHcvIHZhbHVlc1xuICAgIHZhbHVlczogbnVtYmVyW107IC8vRmxvd1kgdmFsdWVzIHNob3VsZCBhbHdheXMgYmUgd2Vha2x5IGRlY3JlYXNpbmdcbiAgICBjbGlja2FibGU/OiBib29sZWFuO1xuICB9O1xuXG4gIC8vQ3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGZvciBob3Jpem9udGFsIGJhciBjaGFydHNcbiAgZXhwb3J0IHR5cGUgTGFiZWxlZERhdGEgPSBCYXNlRGF0YSAmIHtcbiAgICB0eXBlOiAnbGFiZWxlZCc7XG4gICAgeDogeyBsYWJlbDogc3RyaW5nOyBpc1NlY29uZGFyeT86IGJvb2xlYW4gfVtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFRpbWVzZXJpZXNEYXRhID0gQmFzZURhdGEgJiB7XG4gICAgdHlwZTogJ3RpbWVzZXJpZXMnO1xuICAgIHg6IG51bWJlcltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZsb3dEYXRhID0ge1xuICAgIHR5cGU6ICdmbG93JztcbiAgICB5czogRmxvd1lbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQcm9jZXNzZWRGbG93RGF0YSA9IHtcbiAgICB0eXBlOiAnZmxvdy1wcm9jZXNzZWQnO1xuICAgIHg6IEZsb3dCdWNrZXRbXTtcbiAgfTtcblxuICB0eXBlIEZsb3dCdWNrZXQgPSB7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIHN1YkJ1Y2tldHM6IEZsb3dTdWJCdWNrZXRbXTtcbiAgfTtcblxuICB0eXBlIEZsb3dTdWJCdWNrZXQgPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGNvbm5lY3Rpb25zOiBGbG93Q29ubmVjdGlvbltdO1xuICB9O1xuXG4gIHR5cGUgRmxvd0Nvbm5lY3Rpb24gPSB7XG4gICAgZGlyZWN0aW9uOiAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuICAgIHN0YXJ0OiBzdHJpbmc7XG4gICAgZW5kOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGbG93Q29ubmVjdGlvblJlbmRlciA9IE9taXQ8Rmxvd0Nvbm5lY3Rpb24sICdkaXJlY3Rpb24nPiAmIHtcbiAgICBlbGVtZW50VHlwZTogJ2Nvbm5lY3Rpb24nO1xuICAgIHN0ZXA6IG51bWJlcjtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgZW1waGFzaXplPzogYm9vbGVhbjtcbiAgICB0b3BMaW5lOiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH07XG4gICAgYm90dG9tTGluZToge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIHR5cGUgRG9udXREYXRhID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGlzU2Vjb25kYXJ5PzogYm9vbGVhbjtcbiAgfTtcblxuICB0eXBlIERpbWVuc2lvbnMgPSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDaGFydFR5cGUgPVxuICAgIHwgJ2xpbmUnXG4gICAgfCAnYXJlYSdcbiAgICB8ICdiYXInXG4gICAgfCAnaG9yaXpvbnRhbC1iYXInXG4gICAgfCAnZG9udXQnXG4gICAgfCAnd2F0ZXJmYWxsJ1xuICAgIHwgJ2Z1bm5lbCdcbiAgICB8ICdmbG93JztcblxuICB0eXBlIEJhc2VDb25maWcgPSB7XG4gICAgdHlwZTogQ2hhcnRUeXBlO1xuICAgIGdyb3VwZWRUb29sdGlwOiBib29sZWFuO1xuICAgIGNvbG9yczogc3RyaW5nW107XG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGJvb2xlYW47XG4gICAgemVyb1N0YXRlTWVzc2FnZTogc3RyaW5nO1xuICAgIHNpemluZ0Vycm9yU3RhdGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGU7XG4gICAgc2Vjb25kYXJ5VmFsdWVUeXBlPzogVmFsdWVUeXBlO1xuICAgIHRydW5jYXRlTGVnZW5kOiBib29sZWFuO1xuICAgIGRhdGVGb3JtYXQ/OiBJbnRlcnZhbDtcbiAgICBzaG93RGF0YUxhYmVscz86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBEb251dFN1YkNvbmZpZyA9IHtcbiAgICBzaXplOiAneHNtYWxsJyB8ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gICAgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gICAgZGlzcGxheUxhYmVsPzogc3RyaW5nO1xuICAgIHNjYWxpbmdDb25maWc/OiBEb251dFNpemluZ0NvbmZpZztcbiAgfTtcblxuICB0eXBlIEZsb3dTdWJDb25maWcgPSB7XG4gICAgc3VidGl0bGVGb3JtYXRTdHJpbmc6IHN0cmluZztcbiAgICBzdWJCdWNrZXRzQ29uZmlnOiB7XG4gICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgICAgY29sb3I6IHN0cmluZztcbiAgICAgIGlzSGlnaGxpZ2h0ZWQ/OiBib29sZWFuO1xuICAgIH1bXTtcbiAgICBjb25uZWN0aW9uQ29sb3I/OiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ29uZmlnID0gQmFzZUNvbmZpZyAmXG4gICAgKFxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2xpbmUnIHwgJ2FyZWEnIHwgJ3dhdGVyZmFsbCcgfCAnZnVubmVsJztcbiAgICAgICAgICBzY2FsaW5nQ29uZmlnPzogRnVsbFNjYWxpbmdDb25maWc7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHR5cGU6ICdiYXInIHwgJ2hvcml6b250YWwtYmFyJztcbiAgICAgICAgICBncm91cGluZ1R5cGU6ICdzdGFja2VkJyB8ICdjbHVzdGVyZWQnO1xuICAgICAgICAgIHNjYWxpbmdDb25maWc/OiBGdWxsU2NhbGluZ0NvbmZpZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2RvbnV0JztcbiAgICAgICAgICBkb251dERpc3BsYXlJbmZvOiBEb251dFN1YkNvbmZpZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgdHlwZTogJ2Zsb3cnO1xuICAgICAgICAgIHNob3dEYXRhTGFiZWxzOiB0cnVlO1xuICAgICAgICAgIGZsb3dDb25maWc6IEZsb3dTdWJDb25maWc7XG4gICAgICAgICAgc2NhbGluZ0NvbmZpZz86IEZ1bGxTY2FsaW5nQ29uZmlnO1xuICAgICAgICB9XG4gICAgKTtcblxuICB0eXBlIERvbnV0Q29uZmlnID0gRXh0cmFjdDxDb25maWcsIHsgdHlwZTogJ2RvbnV0JyB9PjtcblxuICB0eXBlIEZsb3dDb25maWcgPSBFeHRyYWN0PENvbmZpZywgeyB0eXBlOiAnZmxvdycgfT47XG5cbiAgdHlwZSBDb25maWdXaXRoRnVsbFNjYWxpbmcgPSBFeHRyYWN0PFxuICAgIENvbmZpZyxcbiAgICB7XG4gICAgICB0eXBlOlxuICAgICAgICB8ICdiYXInXG4gICAgICAgIHwgJ2hvcml6b250YWwtYmFyJ1xuICAgICAgICB8ICdsaW5lJ1xuICAgICAgICB8ICdhcmVhJ1xuICAgICAgICB8ICd3YXRlcmZhbGwnXG4gICAgICAgIHwgJ2Z1bm5lbCdcbiAgICAgICAgfCAnZmxvdyc7XG4gICAgfVxuICA+O1xuXG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0Q29uZmlnOiBDb25maWcgPSB7XG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGdyb3VwZWRUb29sdGlwOiB0cnVlLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9yUGFsZXR0ZSxcbiAgICBhbGxvd0xlZ2VuZFRvZ2dsZTogZmFsc2UsXG4gICAgemVyb1N0YXRlTWVzc2FnZTogJ05vIGRhdGEgdG8gZGlzcGxheS4nLFxuICAgIHNpemluZ0Vycm9yU3RhdGVNZXNzYWdlOiAnVGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoZSBjdXJyZW50IHNpemUuJyxcbiAgICB2YWx1ZVR5cGU6ICdjdXJyZW5jeScsXG4gICAgdHJ1bmNhdGVMZWdlbmQ6IHRydWUsXG4gICAgZGF0ZUZvcm1hdDogJ2RheScsXG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHREb251dENvbmZpZzogQ29uZmlnID0ge1xuICAgIHR5cGU6ICdkb251dCcsXG4gICAgZ3JvdXBlZFRvb2x0aXA6IHRydWUsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JQYWxldHRlLFxuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBmYWxzZSxcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICAgc2l6aW5nRXJyb3JTdGF0ZU1lc3NhZ2U6ICdUaGUgY2hhcnQgY2Fubm90IGRpc3BsYXkgYXQgdGhlIGN1cnJlbnQgc2l6ZS4nLFxuICAgIHZhbHVlVHlwZTogJ2N1cnJlbmN5JyxcbiAgICB0cnVuY2F0ZUxlZ2VuZDogdHJ1ZSxcbiAgICBkYXRlRm9ybWF0OiAnZGF5JyxcbiAgICBkb251dERpc3BsYXlJbmZvOiB7XG4gICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgIGRpc3BsYXlWYWx1ZTogJycsXG4gICAgfSxcbiAgfTtcblxuICB0eXBlIEdlbmVyaWNUaWNrID0ge1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBzZWNvbmRhcnlMYWJlbD86IHN0cmluZztcbiAgfTtcblxuICB0eXBlIFhUaWNrID0gT21pdDxHZW5lcmljVGljaywgJ3ZhbHVlJz4gJiB7XG4gICAgeDogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRvWFRpY2sodGljazogR2VuZXJpY1RpY2spOiBYVGljayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRpY2sudmFsdWUsXG4gICAgICBsYWJlbDogdGljay5sYWJlbCxcbiAgICAgIHNlY29uZGFyeUxhYmVsOiB0aWNrLnNlY29uZGFyeUxhYmVsLFxuICAgIH07XG4gIH1cblxuICB0eXBlIFlUaWNrID0gT21pdDxHZW5lcmljVGljaywgJ3ZhbHVlJz4gJiB7XG4gICAgeTogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRvWVRpY2sodGljazogR2VuZXJpY1RpY2spOiBZVGljayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHk6IHRpY2sudmFsdWUsXG4gICAgICBsYWJlbDogdGljay5sYWJlbCxcbiAgICAgIHNlY29uZGFyeUxhYmVsOiB0aWNrLnNlY29uZGFyeUxhYmVsLFxuICAgIH07XG4gIH1cblxuICB0eXBlIEJhc2ljUmVjdCA9IHtcbiAgICBlbGVtZW50VHlwZTogJ3JlY3QnO1xuICAgIHJlY3RUeXBlPzogc3RyaW5nO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgcGF0dGVybj86IFBhdHRlcm47XG4gICAgcm91bmRpbmc/OiAndG9wJyB8ICdib3R0b20nIHwgJ2FsbCcgfCAnbm9uZSc7XG4gICAgbm9uRGlzcGxheT86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBGbG93UmVjdCA9IEJhc2ljUmVjdCAmIHtcbiAgICByZWN0VHlwZTogJ2Zsb3cnO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICBjb2xvck92ZXJyaWRlPzogc3RyaW5nO1xuICAgIGRhcmtlbjogYm9vbGVhbjtcbiAgICBkZUVtcGhhc2l6ZTogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSZWN0ID0gKEJhc2ljUmVjdCAmIHsgcmVjdFR5cGU/OiB1bmRlZmluZWQgfSkgfCBGbG93UmVjdDtcblxuICB0eXBlIENpcmNsZSA9IHtcbiAgICBjeDogbnVtYmVyO1xuICAgIGN5OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd0hvdmVyVGFyZ2V0ID1cbiAgICB8IHtcbiAgICAgICAgaG92ZXJUYXJnZXQ6ICdiYXJUaXRsZSc7XG4gICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGJhcklkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGhvdmVyVGFyZ2V0OiAnYmFyJztcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgYmFySWQ6IHN0cmluZztcbiAgICAgICAgZm9yRGFya2VuOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBob3ZlclRhcmdldDogJ2Nvbm5lY3Rpb24nO1xuICAgICAgICBzdGFydElkOiBzdHJpbmc7XG4gICAgICAgIGVuZElkOiBzdHJpbmc7XG4gICAgICAgIHN0YXJ0QnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgRmxvd0hvdmVyUmV0dXJuID0ge1xuICAgIGhvdmVyVHlwZTogJ2Zsb3cnO1xuXG4gICAgdG9vbHRpcDoge1xuICAgICAgYW5jaG9yOiBET01SZWN0O1xuICAgICAgc3VidGl0bGU6IHN0cmluZztcbiAgICAgIHNlY29uZGFyeVN1YnRpdGxlPzogc3RyaW5nO1xuICAgIH07XG4gIH0gJiBGbG93SG92ZXJUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGNsaWNrYWJsZSBmbG93IGVsZW1lbnQgaXMgY2xpY2tlZC4gYHlJbmRpY2VzYCBhcmUgdGhlXG4gICAqIGluZGljZXMgaW50byBgRmxvd0RhdGEueXNgIG9mIHRoZSBwYXRocyB0aGF0IG1ha2UgdXAgdGhlIGNsaWNrZWQgZWxlbWVudC5cbiAgICovXG4gIGV4cG9ydCB0eXBlIEZsb3dDbGlja0V2ZW50ID0ge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgeUluZGljZXM6IG51bWJlcltdO1xuICB9ICYgKFxuICAgIHwgKHtcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgYmFySWQ6IHN0cmluZztcbiAgICAgIH0gJiAoXG4gICAgICAgIHwge1xuICAgICAgICAgICAgdGFyZ2V0OiAndGl0bGUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfCB7XG4gICAgICAgICAgICB0YXJnZXQ6ICdjb250aW51aW5nJyB8ICdlbmRpbmcnO1xuICAgICAgICAgICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICkpXG4gICAgfCB7XG4gICAgICAgIHRhcmdldDogJ2Nvbm5lY3Rpb24nO1xuICAgICAgICBzdGFydEJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgICAgIHN0YXJ0SWQ6IHN0cmluZztcbiAgICAgICAgZW5kSWQ6IHN0cmluZztcbiAgICAgIH1cbiAgKTtcblxuICBleHBvcnQgdHlwZSBIb3ZlclJldHVybiA9XG4gICAgfCB7XG4gICAgICAgIGhvdmVyVHlwZTogJ3N0YW5kYXJkJztcbiAgICAgICAgLy8gdGhlIGluZGljZXMgaW50byB0aGUgZGF0YSBvZiB0aGUgY2xvc2VzdCBwb2ludFxuICAgICAgICB4SW5kZXg6IG51bWJlcjtcbiAgICAgICAgLy8gd2Ugd2FudCB0byBrbm93IHdoaWNoIHZpc2libGUgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgICAgIC8vIGFuZCB3aGljaCBhY3R1YWwgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgICAgIHlJbmRleDogbnVtYmVyO1xuICAgICAgICB2aXNpYmxlWUluZGV4OiBudW1iZXI7XG4gICAgICAgIGlzU3VwcFZhbHVlPzogYm9vbGVhbjtcbiAgICAgICAgc3VwcFlJbmRleD86IG51bWJlcjtcbiAgICAgICAgLy9GdW5uZWwgb25seSwgZm9yIHdoZW4gZHJvcE9mZiBzZWN0aW9uIGlzIGhvdmVyZWRcbiAgICAgICAgaXNEcm9wT2ZmPzogYm9vbGVhbjtcblxuICAgICAgICAvLyB0aGUgdmlld3BvcnQgeCBhbmQgeXMgb2YgdGhlIGhvdmVyZWQgaXRlbXNcbiAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICB5czogbnVtYmVyW107XG5cbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcjogRE9NUmVjdDtcbiAgICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbj86IENhbGxvdXRDb21wb25lbnQuQW5jaG9yZWRQb3NpdGlvbjtcbiAgICAgICAgICBkYXRlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgIG1ldHJpY3M6IHtcbiAgICAgICAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICAgICAgdmFsdWU6IHN0cmluZztcbiAgICAgICAgICAgIHBhdHRlcm4/OiBQYXR0ZXJuO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB8IEZsb3dIb3ZlclJldHVyblxuICAgIHwgbnVsbDtcblxuICAvLyBIb3ZlciBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2aWV3cG9ydCB4IGFuZCB5IGFuZCByZXR1cm5zIGEgcmljaFxuICAvLyBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGhvdmVyZWQgYW5kIHdoYXQgdGhlIHRvb2x0aXBcbiAgLy8gc2hvdWxkIGxvb2sgbGlrZVxuICBleHBvcnQgdHlwZSBIb3ZlciA9IChwb3M6IHtcbiAgICByZWN0OiBET01SZWN0O1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgY29udGFpbmVyU2Nyb2xsWDogbnVtYmVyO1xuICAgIGNvbnRhaW5lclNjcm9sbFk6IG51bWJlcjtcbiAgfSkgPT4gSG92ZXJSZXR1cm47XG5cbiAgZXhwb3J0IHR5cGUgVG9vbHRpcENvbnRleHQgPSB7XG4gICAgeEluZGV4OiBudW1iZXI7XG4gICAgeUluZGV4OiBudW1iZXI7XG4gICAgaXNTdXBwVmFsdWU/OiBib29sZWFuO1xuICAgIHN1cHBZSW5kZXg/OiBudW1iZXI7XG4gIH07XG5cbiAgLy8gUmVuZGVyZWRDaGFydCByZXByZXNlbnRzIGFsbCBvZiB0aGUgcGFydHMgb2YgYSBjaGFydFxuICAvLyB0aGF0IGVuZCB1cCBvbiBzY3JlZW4uIEV2ZXJ5IGNoYXJ0IGhhcyB4IGFuZCB5IHRpY2tzXG4gIC8vIGFuZCBob3ZlciBmdW5jdGlvbmFsaXR5LCBldmVuIHRob3VnaCB0aGV5IG1pZ2h0IGJlXG4gIC8vIGRpZmZlcmVudCBmcm9tIGNoYXJ0IHRvIGNoYXJ0LlxuICBleHBvcnQgdHlwZSBSZW5kZXJlZENoYXJ0ID0ge1xuICAgIGNoYXJ0V2lkdGg6IG51bWJlcjtcbiAgICBjaGFydEhlaWdodDogbnVtYmVyO1xuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcztcbiAgICB4VGlja3M6IFhUaWNrW107XG4gICAgeVRpY2tzOiBZVGlja1tdO1xuICAgIGhvdmVyPzogSG92ZXI7XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBsaW5lczogeyBwYXR0ZXJuPzogUGF0dGVybjsgbGluZTogc3RyaW5nIHwgbnVsbCB9W107XG4gICAgY2lyY2xlczogQ2lyY2xlW107IC8vTGluZSBmYWxsYmFjayBmb3IgYSBzaW5nbGUgcG9pbnRcbiAgICBhcmVhczogeyBwYXR0ZXJuPzogUGF0dGVybjsgYXJlYTogc3RyaW5nIHwgbnVsbCB9W107XG4gICAgYmFyczogUmVjdFtdW107XG4gICAgYXJjczogKHN0cmluZyB8IG51bGwpW107XG4gICAgaG9yaXpvbnRhbEJhcnM6IHtcbiAgICAgIHBhdHRlcm4/OiBQYXR0ZXJuO1xuICAgICAgaG9yaXpvbnRhbEJhcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICB9W11bXTtcbiAgICBkYXRhTGFiZWxzOiBEYXRhTGFiZWxbXTtcbiAgICB3YXRlcmZhbGxMaW5lczoge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MTogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9W107XG4gICAgZ3JhZGllbnRzOiBSZWN0W11bXTtcbiAgICBmbG93Q29ubmVjdGlvbnM6IEZsb3dDb25uZWN0aW9uUmVuZGVyW107XG4gICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBDb250YWluZXJTY2FsaW5nVHlwZTtcbiAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBDb250YWluZXJTY2FsaW5nVHlwZTtcbiAgICBjaGFydEVycm9yOiAnc2l6aW5nJyB8ICdjb25maWcnIHwgbnVsbDtcbiAgfTtcblxuICB0eXBlIEJhc2ljRGF0YUxhYmVsID0ge1xuICAgIGVsZW1lbnRUeXBlOiAnZGF0YUxhYmVsJztcbiAgICBkYXRhTGFiZWxUeXBlPzogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgeFBvczogbnVtYmVyO1xuICAgIHlQb3M6IG51bWJlcjtcbiAgICBhbmNob3I6ICdzdGFydCcgfCAnbWlkZGxlJyB8ICdlbmQnO1xuICAgIGxpbmU/OiB7XG4gICAgICB4MTogbnVtYmVyO1xuICAgICAgeTE6IG51bWJlcjtcbiAgICAgIHgyOiBudW1iZXI7XG4gICAgICB5MjogbnVtYmVyO1xuICAgIH07XG4gICAgYm9sZD86IGJvb2xlYW47XG4gIH07XG5cbiAgdHlwZSBGbG93RGF0YUxhYmVsID0gQmFzaWNEYXRhTGFiZWwgJiB7XG4gICAgZWxlbWVudFR5cGU6ICdkYXRhTGFiZWwnO1xuICAgIGRhdGFMYWJlbFR5cGU6ICdmbG93JztcbiAgICAvL0hlbHBlciBkYXRhIGZvciBmbG93c1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgYmFySWQ6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBEYXRhTGFiZWwgPVxuICAgIHwgKEJhc2ljRGF0YUxhYmVsICYgeyBkYXRhTGFiZWxUeXBlPzogdW5kZWZpbmVkIH0pXG4gICAgfCBGbG93RGF0YUxhYmVsO1xuXG4gIGNvbnN0IGVtcHR5Q2hhcnQ6IFJlbmRlcmVkQ2hhcnQgPSB7XG4gICAgY2hhcnRXaWR0aDogMCxcbiAgICBjaGFydEhlaWdodDogMCxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogZW1wdHlDaGFydFNjYWxlVmFsdWVzLFxuICAgIHhUaWNrczogW10sXG4gICAgeVRpY2tzOiBbXSxcbiAgICBjb2xvcnM6IFtdLFxuICAgIGxpbmVzOiBbXSxcbiAgICBjaXJjbGVzOiBbXSxcbiAgICBhcmVhczogW10sXG4gICAgYmFyczogW10sXG4gICAgYXJjczogW10sXG4gICAgaG9yaXpvbnRhbEJhcnM6IFtdLFxuICAgIGRhdGFMYWJlbHM6IFtdLFxuICAgIHdhdGVyZmFsbExpbmVzOiBbXSxcbiAgICBncmFkaWVudHM6IFtdLFxuICAgIGZsb3dDb25uZWN0aW9uczogW10sXG4gICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiAnbm8tc2NhbGUnLFxuICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6ICduby1zY2FsZScsXG4gICAgY2hhcnRFcnJvcjogbnVsbCxcbiAgfTtcblxuICAvLyd5JyBpbiB0aGlzIGZ1bmN0aW9uIHJlZmVycyB0byB0aGUgZGF0YSB5LCBzaW5jZSB0aGlzIGZ1bmN0aW9uXG4gIC8vIGlzIGFsc28gdXNlZCBieSBob3Jpem9udGFsLWJhcnMsIHdoZXJlIHRoZSBkYXRhIHkgaXMgdGhlIGNoYXJ0IHhcbiAgZnVuY3Rpb24gY2FsY0RhdGFBeGlzU2NhbGVzQW5kVGlja3MoXG4gICAgZGF0YTogUHJvY2Vzc0RhdGEsXG4gICAgcGlwZVRyYW5zZm9ybUlucHV0OlxuICAgICAgfCAoKHZhbHVlOiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuKSA9PiBzdHJpbmcpXG4gICAgICB8IG51bGwsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICApOiB7XG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyO1xuICAgIHRpY2tzOiBHZW5lcmljVGlja1tdO1xuICB9IHtcbiAgICBjb25zdCBwaXBlVHJhbnNmb3JtID1cbiAgICAgIHBpcGVUcmFuc2Zvcm1JbnB1dCAhPT0gbnVsbCA/IHBpcGVUcmFuc2Zvcm1JbnB1dCA6ICgpID0+ICcnO1xuICAgIGNvbnN0IHtcbiAgICAgIHByaW1hcnlEYXRhTWluLFxuICAgICAgcHJpbWFyeURhdGFNYXgsXG4gICAgICBzZWNvbmRhcnlEYXRhTWluLFxuICAgICAgc2Vjb25kYXJ5RGF0YU1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnLFxuICAgIH0gPSBjYWxjRGF0YVNjYWxpbmdWYWx1ZXMoZGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCBzdGFydE9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsTGVmdE9mZnNldFxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsVG9wT2Zmc2V0O1xuICAgIGxldCBtaW5TcGFjaW5nID1cbiAgICAgIChjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGNoYXJ0U2l6aW5nVmFsdWVzLmhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZVxuICAgICAgICA6IGNoYXJ0U2l6aW5nVmFsdWVzLnZlcnRpY2FsQXhpc0xhYmVsVGV4dFNpemUpICsgU01BTExfUEFERElORztcbiAgICBtaW5TcGFjaW5nID0gbWluU3BhY2luZyAqIChjaGFydFNpemluZ1ZhbHVlcy5mb250U2l6ZSAvIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgICBjb25zdCBzcGFjaW5nVGlja0NvdW50ID0gTWF0aC5tYXgoXG4gICAgICAyLFxuICAgICAgTWF0aC5mbG9vcihjaGFydFNpemluZ1ZhbHVlcy5zaXplRm9yRGF0YSAvIG1pblNwYWNpbmcpLFxuICAgICk7XG4gICAgY29uc3QgYWN0dWFsVGFyZ2V0VGlja0NvdW50ID0gTWF0aC5taW4oXG4gICAgICBzcGFjaW5nVGlja0NvdW50LFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudGFyZ2V0VGlja0NvdW50LFxuICAgICk7XG5cbiAgICBjb25zdCBoYXNQcmltYXJ5ID0gcHJpbWFyeURhdGFNaW4gIT09IDAgfHwgcHJpbWFyeURhdGFNYXggIT09IDA7XG4gICAgY29uc3QgaGFzU2Vjb25kYXJ5ID0gc2Vjb25kYXJ5RGF0YU1pbiAhPT0gMCB8fCBzZWNvbmRhcnlEYXRhTWF4ICE9PSAwO1xuICAgIGNvbnN0IHNjYWxlUmFuZ2UgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHxcbiAgICAgIGNvbmZpZy50eXBlID09PSAnZmxvdydcbiAgICAgICAgPyBbMCwgY2hhcnRTaXppbmdWYWx1ZXMuc2l6ZUZvckRhdGFdXG4gICAgICAgIDogW2NoYXJ0U2l6aW5nVmFsdWVzLnNpemVGb3JEYXRhLCAwXTtcbiAgICAvL1RoZXNlICdlZmZlY3RpdmUnIHZhbHVlcyBlbnN1cmUgd2UgaGF2ZSByb29tIGZvciBwb3RlbnRpYWwgc3RhY2tpbmcgb2Ygc2Vjb25kYXJ5IGFuZCBub24tc2Vjb25kYXJ5IHZhbHVlc1xuICAgIGxldCBlZmZlY3RpdmVQcmltYXJ5TWluID0gcHJpbWFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgIGxldCBlZmZlY3RpdmVQcmltYXJ5TWF4ID0gcHJpbWFyeURhdGFNYXggKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4O1xuXG4gICAgLy9TaW1wbGVyIHBhdGggZm9yIGRhdGEgdy9vIHNlY29uZGFyaWVzXG4gICAgaWYgKCFoYXNTZWNvbmRhcnkpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlZRG9tYWluID0gW2VmZmVjdGl2ZVByaW1hcnlNaW4sIGVmZmVjdGl2ZVByaW1hcnlNYXhdO1xuXG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcihwcmltYXJ5WURvbWFpbiwgc2NhbGVSYW5nZSk7XG4gICAgICBjb25zdCB0aWNrczogR2VuZXJpY1RpY2tbXSA9IHlTY2FsZVxuICAgICAgICAudGlja3MoYWN0dWFsVGFyZ2V0VGlja0NvdW50KVxuICAgICAgICAubWFwKHRpY2sgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogeVNjYWxlKHRpY2spICsgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odGljaywgZmFsc2UpLFxuICAgICAgICB9KSk7XG4gICAgICBjb25zdCBzY2FsZSA9IChpbnB1dDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHlTY2FsZShpbnB1dCkgKyBzdGFydE9mZnNldDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2FsZSxcbiAgICAgICAgdGlja3MsXG4gICAgICB9O1xuICAgIH1cbiAgICAvL1NpbXBsZXIgcGF0aCBmb3IgZGF0YSB3L28gcHJpbWFyaWVzXG4gICAgaWYgKCFoYXNQcmltYXJ5KSB7XG4gICAgICBjb25zdCBzZWNvbmRhcnlZRG9tYWluID0gW3NlY29uZGFyeURhdGFNaW4sIHNlY29uZGFyeURhdGFNYXhdO1xuXG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcihzZWNvbmRhcnlZRG9tYWluLCBzY2FsZVJhbmdlKTtcbiAgICAgIGNvbnN0IHRpY2tzOiBHZW5lcmljVGlja1tdID0geVNjYWxlXG4gICAgICAgIC50aWNrcyhhY3R1YWxUYXJnZXRUaWNrQ291bnQpXG4gICAgICAgIC5tYXAodGljayA9PiAoe1xuICAgICAgICAgIHZhbHVlOiB5U2NhbGUodGljaykgKyBzdGFydE9mZnNldCxcbiAgICAgICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh0aWNrLCB0cnVlKSxcbiAgICAgICAgfSkpO1xuICAgICAgY29uc3Qgc2NhbGUgPSAoaW5wdXQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICAgIHJldHVybiB5U2NhbGUoaW5wdXQpICsgc3RhcnRPZmZzZXQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHRpY2tzLFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IDA7XG4gICAgbGV0IGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IDA7XG5cbiAgICAvL1RoaXMgYmxvY2sgc2V0cyB0aGUgZWZmZWN0aXZlIG1heCBmb3IgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5XG4gICAgLy9UaGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBlZmZlY3RpdmUgbWF4ZXMgZm9yIGJvdGggZGF0YSBzZXRzIGFyZSBwcm9wZXJseSBzZXQgc28gdGhhdFxuICAgIC8vIDAgd2lsbCBmYWxsIGF0IHRoZSBzYW1lIHBsYWNlIG9uIGJvdGggYW5kIGVhY2ggd2lsbCBoYXZlICdyb29tJyBmb3IgcG90ZW50aWFsIHN0YWNraW5nXG4gICAgaWYgKFxuICAgICAgKHByaW1hcnlEYXRhTWF4IDw9IDAgJiYgc2Vjb25kYXJ5RGF0YU1pbiA+PSAwKSB8fFxuICAgICAgKHByaW1hcnlEYXRhTWluID49IDAgJiYgc2Vjb25kYXJ5RGF0YU1heCA8PSAwKVxuICAgICkge1xuICAgICAgLy9JbiB0aGlzIHNjZW5hcmlvLCBvbmUgc2V0IG9mIGRhdGEgaXMgY29tcGV0ZWx5IHBvc2l0aXZlLCB3aGlsZSB0aGUgb3RoZXIgaXMgY29tcGxldGVseSBuZWdhdGl2ZVxuICAgICAgLy9UaGUgdHdvIGRhdGEgc2V0cyBjYW4gc2NhbGUgY29tcGxldGVseSBpbmRlcGVuZGVudGx5XG4gICAgICAvL1dlICdtaXJyb3InIHRoZSB2YWx1ZXMgb2YgdGhlIHR3byBkYXRhIHNldHMsIHdoaWNoJ2xsIHB1dCB0aGUgMCBheGlzIGluIHRoZSBjZW50ZXIgb2YgdGhlIGRhdGFcbiAgICAgIGlmIChwcmltYXJ5RGF0YU1heCA8PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVByaW1hcnlNYXggPSBNYXRoLmFicyhlZmZlY3RpdmVQcmltYXJ5TWluKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmltYXJ5RGF0YU1pbiA+PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVByaW1hcnlNaW4gPSAtTWF0aC5hYnMoZWZmZWN0aXZlUHJpbWFyeU1heCk7XG4gICAgICB9XG4gICAgICBpZiAoc2Vjb25kYXJ5RGF0YU1heCA8PSAwKSB7XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW47XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1heCA9IE1hdGguYWJzKHNlY29uZGFyeURhdGFNaW4pO1xuICAgICAgfVxuICAgICAgaWYgKHNlY29uZGFyeURhdGFNaW4gPj0gMCkge1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBzZWNvbmRhcnlEYXRhTWF4O1xuICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSAtc2Vjb25kYXJ5RGF0YU1heDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByaW1hcnlEYXRhTWF4ID4gMCkge1xuICAgICAgaWYgKHByaW1hcnlEYXRhTWluIDwgMCkge1xuICAgICAgICAvL1ByaW1hcnkgZGF0YSBoYXMgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlXG4gICAgICAgIGlmIChzZWNvbmRhcnlEYXRhTWF4ID4gMCkge1xuICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaGFzIHBvc2l0aXZlXG4gICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gc2Vjb25kYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgICAgICAgaWYgKHNlY29uZGFyeURhdGFNaW4gPCAwKSB7XG4gICAgICAgICAgICAvL1NlY29uZGFyeSBkYXRhIGhhcyBuZWdhdGl2ZVxuICAgICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID1cbiAgICAgICAgICAgICAgc2Vjb25kYXJ5RGF0YU1pbiAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaXMgb25seSBwb3NpdGl2ZVxuICAgICAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWluID1cbiAgICAgICAgICAgICAgKHNlY29uZGFyeURhdGFNYXggLyBwcmltYXJ5RGF0YU1heCkgKlxuICAgICAgICAgICAgICBwcmltYXJ5RGF0YU1pbiAqXG4gICAgICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vU2Vjb25kYXJ5IGRhdGEgaGFzIG9ubHkgbmVnYXRpdmVcbiAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNaW4gPSBzZWNvbmRhcnlEYXRhTWluICogc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPVxuICAgICAgICAgICAgKHNlY29uZGFyeURhdGFNaW4gLyBwcmltYXJ5RGF0YU1pbikgKlxuICAgICAgICAgICAgcHJpbWFyeURhdGFNYXggKlxuICAgICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9QcmltYXJ5IGRhdGEgaXMgb25seSBwb3NpdGl2ZVxuICAgICAgICAvL0R1ZSB0byBlYXJsaWVyIGNoZWNrLCB3ZSBrbm93IHRoYXQgc2Vjb25kYXJ5IGRhdGEgaXMgZWl0aGVyIGFsc28gYWxsLXBvc2l0aXZlLCBvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmVcbiAgICAgICAgZWZmZWN0aXZlU2Vjb25kYXJ5TWF4ID0gc2Vjb25kYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgICBlZmZlY3RpdmVQcmltYXJ5TWluID1cbiAgICAgICAgICAocHJpbWFyeURhdGFNYXggLyBzZWNvbmRhcnlEYXRhTWF4KSAqXG4gICAgICAgICAgc2Vjb25kYXJ5RGF0YU1pbiAqXG4gICAgICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9QcmltYXJ5IGRhdGEgaXMgb25seSBuZWdhdGl2ZVxuICAgICAgLy9EdWUgdG8gZWFybGllciBjaGVjaywgd2Uga25vdyB0aGF0IHNlY29uZGFyeSBkYXRhIGlzIGVpdGhlciBhbHNvIGFsbC1uZWdhdGl2ZSwgb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlXG4gICAgICBlZmZlY3RpdmVTZWNvbmRhcnlNYXggPSBzZWNvbmRhcnlEYXRhTWF4ICogc2NhbGVEb21haW5NdWx0aXBsZUZvck1heDtcbiAgICAgIGVmZmVjdGl2ZVNlY29uZGFyeU1pbiA9IHNlY29uZGFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnO1xuICAgICAgZWZmZWN0aXZlUHJpbWFyeU1heCA9XG4gICAgICAgIChwcmltYXJ5RGF0YU1pbiAvIHNlY29uZGFyeURhdGFNaW4pICpcbiAgICAgICAgc2Vjb25kYXJ5RGF0YU1heCAqXG4gICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgfVxuICAgIGNvbnN0IHByaW1hcnlZRG9tYWluID0gW2VmZmVjdGl2ZVByaW1hcnlNaW4sIGVmZmVjdGl2ZVByaW1hcnlNYXhdO1xuXG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIocHJpbWFyeVlEb21haW4sIHNjYWxlUmFuZ2UpO1xuXG4gICAgLy9GaWd1cmluZyBvdXQgdGhlIGJlc3QgdGljayBjb3VudCB0byBmaXQgdGhlIHR3byBkYXRhIHNyb3VjZXNcbiAgICBjb25zdCB5U2NhbGVQcmltYXJ5UHJvdG8gPSBzY2FsZUxpbmVhcihwcmltYXJ5WURvbWFpbiwgc2NhbGVSYW5nZSk7XG4gICAgY29uc3QgeVNjYWxlU2Vjb25kYXJ5UHJvdG8gPSBzY2FsZUxpbmVhcihcbiAgICAgIFtlZmZlY3RpdmVTZWNvbmRhcnlNaW4sIGVmZmVjdGl2ZVNlY29uZGFyeU1heF0sXG4gICAgICBzY2FsZVJhbmdlLFxuICAgICk7XG4gICAgY29uc3QgdGlja0NvdW50ID0gTWF0aC5tYXgoXG4gICAgICBhY3R1YWxUYXJnZXRUaWNrQ291bnQsXG4gICAgICB5U2NhbGVQcmltYXJ5UHJvdG8udGlja3MoYWN0dWFsVGFyZ2V0VGlja0NvdW50KS5sZW5ndGgsXG4gICAgICB5U2NhbGVTZWNvbmRhcnlQcm90by50aWNrcyhhY3R1YWxUYXJnZXRUaWNrQ291bnQpLmxlbmd0aCxcbiAgICApO1xuICAgIGNvbnN0IHByaW1hcnlUaWNrcyA9IHlTY2FsZS50aWNrcyh0aWNrQ291bnQpLm1hcCh0aWNrID0+ICh7XG4gICAgICB2YWx1ZTogeVNjYWxlKHRpY2spICsgc3RhcnRPZmZzZXQsXG4gICAgICBsYWJlbDogcGlwZVRyYW5zZm9ybSh0aWNrLCBmYWxzZSksXG4gICAgICByYXdZOiB0aWNrLFxuICAgIH0pKTtcblxuICAgIC8vRmluZGluZyBhIGRvbWFpbiBmb3IgdGhlIHNlY29uZGFyeSBkYXRhIHN1Y2ggdGhhdCBpdCB3aWxsIHJlc3VsdCBpbiByb3VuZCB0aWNrIHZhbHVlcyB3aGVuIG1hdGNoZWQgd2l0aCB0aGUgcHJpbWFyeSB0aWNrc1xuICAgIGNvbnN0IHNlY29uZGFyeVRpY2tzUHJvdG8gPSB5U2NhbGVTZWNvbmRhcnlQcm90b1xuICAgICAgLnRpY2tzKHRpY2tDb3VudClcbiAgICAgIC5tYXAodGljayA9PiAoe1xuICAgICAgICB5OiB5U2NhbGVTZWNvbmRhcnlQcm90byh0aWNrKSxcbiAgICAgICAgcmF3WTogdGljayxcbiAgICAgICAgbGFiZWw6IHBpcGVUcmFuc2Zvcm0odGljaywgdHJ1ZSksXG4gICAgICB9KSk7XG4gICAgY29uc3QgcHJpbWFyeU1pblRpY2sgPSBNYXRoLm1pbiguLi5wcmltYXJ5VGlja3MubWFwKHRpY2sgPT4gdGljay5yYXdZKSk7XG4gICAgY29uc3QgcHJpbWFyeU1heFRpY2sgPSBNYXRoLm1heCguLi5wcmltYXJ5VGlja3MubWFwKHRpY2sgPT4gdGljay5yYXdZKSk7XG4gICAgY29uc3QgcHJpbWFyeURvbWFpbk1heFRpY2tSYXRpbyA9XG4gICAgICBwcmltYXJ5TWF4VGljayAhPT0gMCA/IGVmZmVjdGl2ZVByaW1hcnlNYXggLyBwcmltYXJ5TWF4VGljayA6IDA7XG4gICAgY29uc3QgcHJpbWFyeURvbWFpbk1pblRpY2tSYXRpbyA9XG4gICAgICBwcmltYXJ5TWluVGljayAhPT0gMCA/IGVmZmVjdGl2ZVByaW1hcnlNaW4gLyBwcmltYXJ5TWluVGljayA6IDA7XG5cbiAgICBjb25zdCBwcmltYXJ5R2FwID0gcHJpbWFyeVRpY2tzWzFdLnJhd1kgLSBwcmltYXJ5VGlja3NbMF0ucmF3WTtcbiAgICBjb25zdCB0aWNrc0JlbG93WmVybyA9IHByaW1hcnlNaW5UaWNrIC8gcHJpbWFyeUdhcDtcbiAgICBjb25zdCB0aWNrc0Fib3ZlWmVybyA9IHByaW1hcnlNYXhUaWNrIC8gcHJpbWFyeUdhcDtcblxuICAgIGNvbnN0IHNlY29uZGFyeUdhcCA9XG4gICAgICBzZWNvbmRhcnlUaWNrc1Byb3RvWzFdLnJhd1kgLSBzZWNvbmRhcnlUaWNrc1Byb3RvWzBdLnJhd1k7XG4gICAgbGV0IGNhbGNSYW5nZU11bHQgPSAxO1xuICAgIGNvbnN0IHNlY29uZGFyeURvbWFpbk1pbk11bHQgPVxuICAgICAgdGlja3NCZWxvd1plcm8gKiBzZWNvbmRhcnlHYXAgKiBwcmltYXJ5RG9tYWluTWluVGlja1JhdGlvO1xuICAgIGNvbnN0IHNlY29uZGFyeURvbWFpbk1heE11bHQgPVxuICAgICAgdGlja3NBYm92ZVplcm8gKiBzZWNvbmRhcnlHYXAgKiBwcmltYXJ5RG9tYWluTWF4VGlja1JhdGlvO1xuICAgIC8vRmlyc3QsIHdlIGVuc3VyZSB0aGUgY2FsY1JhbmdlTXVsdCBpcyBiaWcgZW5vdWdoXG4gICAgbGV0IHNpemVVcENvbXBsZXRlID0gZmFsc2U7XG4gICAgd2hpbGUgKCFzaXplVXBDb21wbGV0ZSkge1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vU21hbGxGb3JNaW4gPVxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICogY2FsY1JhbmdlTXVsdCA+IGVmZmVjdGl2ZVNlY29uZGFyeU1pbiAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICE9PSAwO1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vU21hbGxGb3JNYXggPVxuICAgICAgICBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICogY2FsY1JhbmdlTXVsdCA8IGVmZmVjdGl2ZVNlY29uZGFyeU1heCAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICE9PSAwO1xuICAgICAgaWYgKGNhbGNSYW5nZVRvb1NtYWxsRm9yTWluIHx8IGNhbGNSYW5nZVRvb1NtYWxsRm9yTWF4KSB7XG4gICAgICAgIGNhbGNSYW5nZU11bHQgPSBjYWxjUmFuZ2VNdWx0ICogMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemVVcENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9UaGVuLCB3ZSBjaGVjayBpZiB3ZSBjYW4gc2NhbGUgZG93biAoZm9yIHRoaXMgb25lLCBib3RoIGNvbmRpdGlvbnMgaGF2ZSB0byBiZSB0cnVlLCBzbyBpdCB3b24ndCB1bmRvIGEgcHJldmlvdXMgc2NhbGUgdXApXG4gICAgbGV0IHNpemVEb3duQ29tcGxldGUgPSBmYWxzZTtcbiAgICB3aGlsZSAoIXNpemVEb3duQ29tcGxldGUpIHtcbiAgICAgIGNvbnN0IGNhbGNSYW5nZVRvb0JpZ0Zvck1pbiA9XG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1pbk11bHQgKiBjYWxjUmFuZ2VNdWx0IDwgZWZmZWN0aXZlU2Vjb25kYXJ5TWluICogMiAmJlxuICAgICAgICBzZWNvbmRhcnlEb21haW5NaW5NdWx0ICE9PSAwO1xuICAgICAgY29uc3QgY2FsY1JhbmdlVG9vQmlnRm9yTWF4ID1cbiAgICAgICAgc2Vjb25kYXJ5RG9tYWluTWF4TXVsdCAqIGNhbGNSYW5nZU11bHQgPiBlZmZlY3RpdmVTZWNvbmRhcnlNYXggKiAyICYmXG4gICAgICAgIHNlY29uZGFyeURvbWFpbk1heE11bHQgIT09IDA7XG4gICAgICBpZiAoY2FsY1JhbmdlVG9vQmlnRm9yTWluICYmIGNhbGNSYW5nZVRvb0JpZ0Zvck1heCkge1xuICAgICAgICBjYWxjUmFuZ2VNdWx0ID0gY2FsY1JhbmdlTXVsdCAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplRG93bkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNlY29uZGFyeURvbWFpbk1pbiA9IHNlY29uZGFyeURvbWFpbk1pbk11bHQgKiBjYWxjUmFuZ2VNdWx0O1xuICAgIGxldCBzZWNvbmRhcnlEb21haW5NYXggPSBzZWNvbmRhcnlEb21haW5NYXhNdWx0ICogY2FsY1JhbmdlTXVsdDtcbiAgICAvL0lmIHRoZSBkYXRhIGlzIGxvcHNpZGVkIGVub3VnaCwgaXQncyBwb3NzaWJsZSB0aGF0IG9uZSBvZiBwb3NpdGl2ZS9uZWdhdGl2ZSBoYXZlIHZhbHVlcywgYnV0IG5vIHRpY2tzXG4gICAgaWYgKHNlY29uZGFyeURvbWFpbk1pbiA9PT0gMCAmJiBlZmZlY3RpdmVQcmltYXJ5TWluIDwgMCkge1xuICAgICAgY29uc3QgcG9zU2VjUmF0aW8gPSBzZWNvbmRhcnlEb21haW5NYXggLyBlZmZlY3RpdmVQcmltYXJ5TWF4O1xuICAgICAgc2Vjb25kYXJ5RG9tYWluTWluID0gcG9zU2VjUmF0aW8gKiBlZmZlY3RpdmVQcmltYXJ5TWluO1xuICAgIH1cbiAgICBpZiAoc2Vjb25kYXJ5RG9tYWluTWF4ID09PSAwICYmIGVmZmVjdGl2ZVByaW1hcnlNYXggPiAwKSB7XG4gICAgICBjb25zdCBwb3NTZWNSYXRpbyA9IHNlY29uZGFyeURvbWFpbk1pbiAvIGVmZmVjdGl2ZVByaW1hcnlNaW47XG4gICAgICBzZWNvbmRhcnlEb21haW5NYXggPSBwb3NTZWNSYXRpbyAqIGVmZmVjdGl2ZVByaW1hcnlNYXg7XG4gICAgfVxuICAgIGNvbnN0IHlTY2FsZVNlY29uZGFyeSA9IHNjYWxlTGluZWFyKFxuICAgICAgW3NlY29uZGFyeURvbWFpbk1pbiwgc2Vjb25kYXJ5RG9tYWluTWF4XSxcbiAgICAgIHNjYWxlUmFuZ2UsXG4gICAgKTtcblxuICAgIGNvbnN0IHRpY2tzOiBHZW5lcmljVGlja1tdID0gcHJpbWFyeVRpY2tzLm1hcCh0aWNrID0+ICh7XG4gICAgICAuLi50aWNrLFxuICAgICAgc2Vjb25kYXJ5TGFiZWw6IHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgIHlTY2FsZVNlY29uZGFyeS5pbnZlcnQoeVNjYWxlKHRpY2sucmF3WSkpLFxuICAgICAgICB0cnVlLFxuICAgICAgKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzY2FsZSA9IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IG51bWJlciA9PiB7XG4gICAgICBpZiAoaXNTZWNvbmRhcnkpIHtcbiAgICAgICAgcmV0dXJuIHlTY2FsZVNlY29uZGFyeShpbnB1dCkgKyBzdGFydE9mZnNldDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB5U2NhbGUoaW5wdXQpICsgc3RhcnRPZmZzZXQ7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2NhbGUsXG4gICAgICB0aWNrcyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY0RhdGFTY2FsaW5nVmFsdWVzKGRhdGE6IFByb2Nlc3NEYXRhLCBjb25maWc6IENvbmZpZykge1xuICAgIGNvbnN0IGlzU3RhY2tlZCA9IGlzU3RhY2tlZERhdGEoY29uZmlnKTtcbiAgICBjb25zdCBwcmltYXJ5RG9tYWluVmFsdWVzID0gY2FsY1lTY2FsZURvbWFpblZhbHVlcyhkYXRhLCBpc1N0YWNrZWQsIGZhbHNlKTtcbiAgICBjb25zdCBzZWNvbmRhcnlEb21haW5WYWx1ZXMgPSBjYWxjWVNjYWxlRG9tYWluVmFsdWVzKGRhdGEsIGlzU3RhY2tlZCwgdHJ1ZSk7XG4gICAgY29uc3QgcHJpbWFyeURhdGFNYXggPSBNYXRoLm1heCguLi5wcmltYXJ5RG9tYWluVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm1heCkpO1xuICAgIGNvbnN0IHNlY29uZGFyeURhdGFNYXggPSBNYXRoLm1heChcbiAgICAgIC4uLnNlY29uZGFyeURvbWFpblZhbHVlcy5tYXAodmFsID0+IHZhbC5tYXgpLFxuICAgICk7XG4gICAgY29uc3QgcHJpbWFyeURhdGFNaW4gPSBNYXRoLm1pbiguLi5wcmltYXJ5RG9tYWluVmFsdWVzLm1hcCh2YWwgPT4gdmFsLm1pbikpO1xuICAgIGNvbnN0IHNlY29uZGFyeURhdGFNaW4gPSBNYXRoLm1pbihcbiAgICAgIC4uLnNlY29uZGFyeURvbWFpblZhbHVlcy5tYXAodmFsID0+IHZhbC5taW4pLFxuICAgICk7XG4gICAgbGV0IHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXggPSAxO1xuICAgIGxldCBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnID0gMTtcblxuICAgIC8vQ2FsY3VsYXRpbmcgaG93IG11Y2ggd2UgbmVlZCB0byBtdWx0aXBsZSB0aGUgZG9tYWluIGJ5IHRvICdmaXQnIGJvdGggYXhlcycgZGF0YVxuICAgIGlmIChpc1N0YWNrZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbWFyeURvbWFpblZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvL0NoZWNrIHBvc2l0aXZlIG1heFxuICAgICAgICBjb25zdCBwcmltYXJ5VmFsID0gcHJpbWFyeURvbWFpblZhbHVlc1tpXS5tYXg7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVZhbCA9IHNlY29uZGFyeURvbWFpblZhbHVlc1tpXS5tYXg7XG4gICAgICAgIGNvbnN0IHByaW1hcnlSYXRpbyA9XG4gICAgICAgICAgcHJpbWFyeURhdGFNYXggIT09IDAgPyBwcmltYXJ5VmFsIC8gcHJpbWFyeURhdGFNYXggOiAwO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlSYXRpbyA9XG4gICAgICAgICAgc2Vjb25kYXJ5RGF0YU1heCAhPT0gMCA/IHNlY29uZGFyeVZhbCAvIHNlY29uZGFyeURhdGFNYXggOiAwO1xuICAgICAgICBjb25zdCBtdWx0VmFsID0gcHJpbWFyeVJhdGlvICsgc2Vjb25kYXJ5UmF0aW87XG4gICAgICAgIGlmIChtdWx0VmFsID4gc2NhbGVEb21haW5NdWx0aXBsZUZvck1heCkge1xuICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXggPSBtdWx0VmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9DaGVjayBuZWdhdGl2ZSBtaW5cbiAgICAgICAgY29uc3QgcHJpbWFyeU5lZ1ZhbCA9XG4gICAgICAgICAgcHJpbWFyeURvbWFpblZhbHVlc1tpXS5taW4gPCAwID8gcHJpbWFyeURvbWFpblZhbHVlc1tpXS5taW4gOiAwO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlOZWdWYWwgPVxuICAgICAgICAgIHNlY29uZGFyeURvbWFpblZhbHVlc1tpXS5taW4gPCAwID8gc2Vjb25kYXJ5RG9tYWluVmFsdWVzW2ldLm1pbiA6IDA7XG4gICAgICAgIGNvbnN0IHByaW1hcnlOZWdSYXRpbyA9XG4gICAgICAgICAgcHJpbWFyeURhdGFNaW4gIT09IDAgPyBwcmltYXJ5TmVnVmFsIC8gcHJpbWFyeURhdGFNaW4gOiAwO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlOZWdSYXRpbyA9XG4gICAgICAgICAgc2Vjb25kYXJ5RGF0YU1pbiAhPT0gMCA/IHNlY29uZGFyeU5lZ1ZhbCAvIHNlY29uZGFyeURhdGFNaW4gOiAwO1xuICAgICAgICBjb25zdCBuZWdNdWx0VmFsID0gcHJpbWFyeU5lZ1JhdGlvICsgc2Vjb25kYXJ5TmVnUmF0aW87XG4gICAgICAgIGlmIChuZWdNdWx0VmFsID4gc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZykge1xuICAgICAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JOZWcgPSBuZWdNdWx0VmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByaW1hcnlEYXRhTWluLFxuICAgICAgcHJpbWFyeURhdGFNYXgsXG4gICAgICBzZWNvbmRhcnlEYXRhTWluLFxuICAgICAgc2Vjb25kYXJ5RGF0YU1heCxcbiAgICAgIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjWVNjYWxlRG9tYWluVmFsdWVzKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGlzU3RhY2tlZDogYm9vbGVhbixcbiAgICBmb3JTZWNvbmRhcnk6IGJvb2xlYW4sXG4gICk6IHsgbWF4OiBudW1iZXI7IG1pbjogbnVtYmVyIH1bXSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgaWYgKGZvclNlY29uZGFyeSkge1xuICAgICAgICAvL0Zsb3cgY2hhcnRzIGRvbid0IHN1cHBvcnQgc2Vjb25kYXJ5IGRhdGFcbiAgICAgICAgcmV0dXJuIFt7IG1pbjogMCwgbWF4OiAwIH1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LnRvdGFsQ291bnQpKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHBvc3NpYmx5U3RhY2tlZFlzID0gZGF0YS55cy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgLy9IYW5kbGUgc3RhY2tpbmdcbiAgICAgIHJldHVybiBpc1N0YWNrZWRcbiAgICAgICAgPyB5LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJldlJ1bm5pbmdUb3RhbCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCB5SSA9IDA7IHlJIDwgeUluZGV4OyB5SSsrKSB7XG4gICAgICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJLCB4SW5kZXgsIGZhbHNlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWRkVmFsID0gZGF0YS55c1t5SV0udmFsdWVzW3hJbmRleF07XG4gICAgICAgICAgICAgIC8vT25seSBzdGFjayB2YWx1ZXMgb2YgdGhlIHNhbWUgc2lnblxuICAgICAgICAgICAgICBpZiAoYWRkVmFsIDwgMCA9PT0gdmFsIDwgMCkge1xuICAgICAgICAgICAgICAgIHByZXZSdW5uaW5nVG90YWwgKz0gYWRkVmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsICsgcHJldlJ1bm5pbmdUb3RhbDtcbiAgICAgICAgICB9KVxuICAgICAgICA6IHkudmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1cHBZcyA9IGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMgOiBudWxsO1xuICAgIGxldCBwb3NzaWJseVN0YWNrZWRTdXBZczogbnVtYmVyW11bXSA9IFtdO1xuICAgIGlmIChzdXBwWXMpIHtcbiAgICAgIHBvc3NpYmx5U3RhY2tlZFN1cFlzID0gc3VwcFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgIC8vSGFuZGxlIHN0YWNraW5nXG4gICAgICAgIHJldHVybiBpc1N0YWNrZWRcbiAgICAgICAgICA/IHkudmFsdWVzLm1hcCgodmFsLCB4SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHByZXZSdW5uaW5nVG90YWwgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGxldCB5SSA9IDA7IHlJIDwgeUluZGV4OyB5SSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SSwgeEluZGV4LCB0cnVlKSAhPT0gZm9yU2Vjb25kYXJ5IHx8XG4gICAgICAgICAgICAgICAgICBzdXBwWXNbeUldLnN1cHBsZW1lbnRhbEluZGV4ICE9PSB5LnN1cHBsZW1lbnRhbEluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkVmFsID0gc3VwcFlzW3lJXS52YWx1ZXNbeEluZGV4XTtcbiAgICAgICAgICAgICAgICAvL09ubHkgc3RhY2sgdmFsdWVzIG9mIHRoZSBzYW1lIHNpZ25cbiAgICAgICAgICAgICAgICBpZiAoYWRkVmFsIDwgMCA9PT0gdmFsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgcHJldlJ1bm5pbmdUb3RhbCArPSBhZGRWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB2YWwgKyBwcmV2UnVubmluZ1RvdGFsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHkudmFsdWVzO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGVSYW5nZTogeyBtYXg6IG51bWJlcjsgbWluOiBudW1iZXIgfVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1heE5vcm1ZID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLnBvc3NpYmx5U3RhY2tlZFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCBpLCBmYWxzZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB5W2ldO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtaW5Ob3JtWSA9IE1hdGgubWluKFxuICAgICAgICAuLi5wb3NzaWJseVN0YWNrZWRZcy5tYXAoKHksIHlJbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgaSwgZmFsc2UpICE9PSBmb3JTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geVtpXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgY29uc3QgbWF4U3VwWSA9IHN1cHBZc1xuICAgICAgICA/IE1hdGgubWF4KFxuICAgICAgICAgICAgLi4ucG9zc2libHlTdGFja2VkU3VwWXMubWFwKCh5LCB5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCBpLCB0cnVlKSAhPT0gZm9yU2Vjb25kYXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHlbaV07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgIDogMDtcbiAgICAgIGNvbnN0IG1pblN1cFkgPSBzdXBwWXNcbiAgICAgICAgPyBNYXRoLm1pbihcbiAgICAgICAgICAgIC4uLnBvc3NpYmx5U3RhY2tlZFN1cFlzLm1hcCgoeSwgeUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgaSwgdHJ1ZSkgIT09IGZvclNlY29uZGFyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB5W2ldO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCBtYXggPVxuICAgICAgICBtYXhOb3JtWSA+IDAgJiYgbWF4Tm9ybVkgPiBtYXhTdXBZXG4gICAgICAgICAgPyBtYXhOb3JtWVxuICAgICAgICAgIDogbWF4U3VwWSA+IDBcbiAgICAgICAgICA/IG1heFN1cFlcbiAgICAgICAgICA6IDA7XG4gICAgICBjb25zdCBtaW4gPVxuICAgICAgICBtaW5Ob3JtWSA8IDAgJiYgbWluTm9ybVkgPCBtaW5TdXBZXG4gICAgICAgICAgPyBtaW5Ob3JtWVxuICAgICAgICAgIDogbWluU3VwWSA8IDBcbiAgICAgICAgICA/IG1pblN1cFlcbiAgICAgICAgICA6IDA7XG4gICAgICBzY2FsZVJhbmdlLnB1c2goeyBtYXgsIG1pbiB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlUmFuZ2U7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVCYXJQb3NpdGlvbihcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMsXG4gICAgYnVja2V0TnVtOiBudW1iZXIsXG4gICAgY2x1c3Rlck51bTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXRcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldDtcbiAgICBjb25zdCBjbHVzdGVyT2Zmc2V0ID1cbiAgICAgIGNsdXN0ZXJOdW0gKlxuICAgICAgKGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBjaGFydFNpemluZ1ZhbHVlcy5iYXJDbHVzdGVyR2FwKTtcbiAgICBjb25zdCBjdW11bGF0aXZlQnVja2V0R2FwID0gZ2V0VG90YWxQcmVCdWNrZXRHYXAoXG4gICAgICBkYXRhLFxuICAgICAgY29uZmlnLFxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMsXG4gICAgICBidWNrZXROdW0sXG4gICAgKTtcbiAgICByZXR1cm4gb2Zmc2V0ICsgY3VtdWxhdGl2ZUJ1Y2tldEdhcCArIGNsdXN0ZXJPZmZzZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVIb3Jpem9udGFsQmFyUGF0aChcbiAgICBsZWZ0U2lkZVJvdW5kOiBib29sZWFuLFxuICAgIHJpZ2h0U2lkZVJvdW5kOiBib29sZWFuLFxuICAgIHhWYWx1ZTogbnVtYmVyLFxuICAgIHlWYWx1ZTogbnVtYmVyLFxuICAgIGhvclI6IG51bWJlcixcbiAgICB2ZXJSOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAobGVmdFNpZGVSb3VuZCAmJiByaWdodFNpZGVSb3VuZCkge1xuICAgICAgLy9Cb3RoLXNpZGVzIHJvdW5kaW5nIHZhcmlhdGlvblxuICAgICAgY29uc3QgcGF0aEQgPSBgXG4gICAgICAgIE0gJHt4VmFsdWUgKyBob3JSfSwke3lWYWx1ZX1cbiAgICAgICAgaCAke3dpZHRoIC0gaG9yUiAqIDJ9XG4gICAgICAgIHEke2hvclJ9LDAgJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIHYgJHtoZWlnaHQgLSB2ZXJSICogMn1cbiAgICAgICAgcTAsJHt2ZXJSfSAtJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIGggJHstKHdpZHRoIC0gaG9yUiAqIDIpfVxuICAgICAgICBxLSR7aG9yUn0sMCAtJHtob3JSfSwtJHt2ZXJSfVxuICAgICAgICB2IC0ke2hlaWdodCAtIHZlclIgKiAyfVxuICAgICAgICBxMCwtJHt2ZXJSfSAke2hvclJ9LC0ke3ZlclJ9XG4gICAgICAgIFpcbiAgICAgIGA7XG4gICAgICByZXR1cm4gcGF0aEQ7XG4gICAgfVxuICAgIGlmIChsZWZ0U2lkZVJvdW5kKSB7XG4gICAgICAvL0xlZnQtc2lkZSByb3VuZGluZyB2YXJpYXRpb25cbiAgICAgIGNvbnN0IHBhdGhEID0gYFxuICAgICAgICBNICR7eFZhbHVlICsgaG9yUn0sJHt5VmFsdWV9XG4gICAgICAgIGggJHt3aWR0aCAtIGhvclJ9XG4gICAgICAgIHYgJHtoZWlnaHR9XG4gICAgICAgIGggJHstKHdpZHRoIC0gaG9yUil9XG4gICAgICAgIHEtJHtob3JSfSwwIC0ke2hvclJ9LC0ke3ZlclJ9XG4gICAgICAgIHYgLSR7aGVpZ2h0IC0gdmVyUiAqIDJ9XG4gICAgICAgIHEwLC0ke3ZlclJ9ICR7aG9yUn0sLSR7dmVyUn1cbiAgICAgICAgWlxuICAgICAgYDtcbiAgICAgIHJldHVybiBwYXRoRDtcbiAgICB9XG4gICAgaWYgKHJpZ2h0U2lkZVJvdW5kKSB7XG4gICAgICAvL1JpZ2h0LXNpZGUgcm91bmRpbmcgdmFyaWF0aW9uXG4gICAgICBjb25zdCBwYXRoRCA9IGBcbiAgICAgICAgTSAke3hWYWx1ZX0sJHt5VmFsdWV9XG4gICAgICAgIGggJHt3aWR0aCAtIGhvclJ9XG4gICAgICAgIHEke2hvclJ9LDAgJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIHYgJHtoZWlnaHQgLSB2ZXJSICogMn1cbiAgICAgICAgcTAsJHt2ZXJSfSAtJHtob3JSfSwke3ZlclJ9XG4gICAgICAgIGggJHstKHdpZHRoIC0gaG9yUil9XG4gICAgICAgIFpcbiAgICAgIGA7XG4gICAgICByZXR1cm4gcGF0aEQ7XG4gICAgfVxuICAgIC8vTm8tcm91bmRpbmcgdmFyaWF0aW9uXG4gICAgY29uc3QgcGF0aEQgPSBgXG4gICAgICBNICR7eFZhbHVlfSwke3lWYWx1ZX1cbiAgICAgIGggJHt3aWR0aH1cbiAgICAgIHYgJHtoZWlnaHR9XG4gICAgICBoICR7LXdpZHRofVxuICAgICAgdiAtJHtoZWlnaHR9XG4gICAgICBaXG4gICAgYDtcbiAgICByZXR1cm4gcGF0aEQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCdWNrZXRBbmRDbHVzdGVyTnVtRm9ySG92ZXIoXG4gICAgcG9zOiBudW1iZXIsXG4gICAgY2hhcnRTaXppbmdWYWx1ZXM6IEZ1bGxDaGFydFNjYWxlVmFsdWVzLFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGJ1Y2tldENvdW50OiBudW1iZXIsXG4gICk6IHtcbiAgICBidWNrZXROdW06IG51bWJlcjtcbiAgICBjbHVzdGVyTnVtOiBudW1iZXI7XG4gICAgY2x1c3Rlck5vcm1Db3VudDogbnVtYmVyO1xuICAgIGNsdXN0ZXJOdW1UeXBlOiAnbm9ybScgfCAnc3VwcCc7XG4gIH0gfCBudWxsIHtcbiAgICBsZXQgYnVja2V0TGVld2F5ID0gY2hhcnRTaXppbmdWYWx1ZXMuYnVja2V0R2FwIC8gNDtcbiAgICAvL2lmIHRoZXJlJ3Mgb25seSAxIGRhdGEgcG9pbnQsIHVzZSB0aGUgb3V0ZXJHYXAgYXMgbGVld2F5IGluc3RlYWRcbiAgICBpZiAoZGF0YS54Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgYnVja2V0TGVld2F5ID0gY2hhcnRTaXppbmdWYWx1ZXMub3V0ZXJHYXAgLyA0O1xuICAgIH1cbiAgICBjb25zdCBiYXJMZWV3YXkgPSBjaGFydFNpemluZ1ZhbHVlcy5iYXJDbHVzdGVyR2FwIC8gMjtcblxuICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICBjaGFydFNpemluZ1ZhbHVlcy5jaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCdcbiAgICAgICAgPyBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXRcbiAgICAgICAgOiBjaGFydFNpemluZ1ZhbHVlcy50b3RhbFRvcE9mZnNldDtcbiAgICBjb25zdCByZWxhdGl2ZVBvcyA9IHBvcyAtIG9mZnNldDtcbiAgICBsZXQgYnVja2V0TnVtID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXRDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBidWNrZXRTdGFydFBvcyA9IGdldFRvdGFsUHJlQnVja2V0R2FwKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLFxuICAgICAgICBpLFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgYnVja2V0U3RhcnRQb3MgLSBidWNrZXRMZWV3YXkgPCByZWxhdGl2ZVBvcyAmJlxuICAgICAgICBidWNrZXRTdGFydFBvcyArXG4gICAgICAgICAgZ2V0QnVja2V0U2l6ZShkYXRhLCBjb25maWcsIGNoYXJ0U2l6aW5nVmFsdWVzKSArXG4gICAgICAgICAgYnVja2V0TGVld2F5ID5cbiAgICAgICAgICByZWxhdGl2ZVBvc1xuICAgICAgKSB7XG4gICAgICAgIGJ1Y2tldE51bSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYnVja2V0TnVtID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghaXNDbHVzdGVyZWREYXRhKGRhdGEsIGNvbmZpZywgdHJ1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1Y2tldE51bSxcbiAgICAgICAgY2x1c3Rlck51bTogMCxcbiAgICAgICAgY2x1c3Rlck5vcm1Db3VudDogMSxcbiAgICAgICAgY2x1c3Rlck51bVR5cGU6ICdub3JtJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpdmVCdWNrZXRQb3MgPVxuICAgICAgcmVsYXRpdmVQb3MgLVxuICAgICAgZ2V0VG90YWxQcmVCdWNrZXRHYXAoZGF0YSwgY29uZmlnLCBjaGFydFNpemluZ1ZhbHVlcywgYnVja2V0TnVtKTtcbiAgICBjb25zdCBjbHVzdGVyQ291bnQgPSBnZXRDbHVzdGVySW5mb0ZvckJ1Y2tldChkYXRhLCBjb25maWcpO1xuICAgIGxldCBjbHVzdGVyTnVtID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVyQ291bnQudG90YWw7IGkrKykge1xuICAgICAgY29uc3QgYmFyU3RhcnRQb3MgPVxuICAgICAgICAoY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJhckNsdXN0ZXJHYXApICogaTtcbiAgICAgIGlmIChcbiAgICAgICAgYmFyU3RhcnRQb3MgLSBiYXJMZWV3YXkgPCByZWxhdGl2ZUJ1Y2tldFBvcyAmJlxuICAgICAgICBiYXJTdGFydFBvcyArIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgKyBiYXJMZWV3YXkgPiByZWxhdGl2ZUJ1Y2tldFBvc1xuICAgICAgKSB7XG4gICAgICAgIGNsdXN0ZXJOdW0gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNsdXN0ZXJOdW0gPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IGNsdXN0ZXJOdW1UeXBlOiAnbm9ybScgfCAnc3VwcCcgPSAnbm9ybSc7XG4gICAgaWYgKGNsdXN0ZXJOdW0gPj0gY2x1c3RlckNvdW50Lm5vcm1Db3VudCkge1xuICAgICAgY2x1c3Rlck51bVR5cGUgPSAnc3VwcCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1Y2tldE51bSxcbiAgICAgIGNsdXN0ZXJOdW0sXG4gICAgICBjbHVzdGVyTm9ybUNvdW50OiBjbHVzdGVyQ291bnQubm9ybUNvdW50LFxuICAgICAgY2x1c3Rlck51bVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmROZWFyZXN0SW5kZXhXaXRoU2Vjb25kYXJ5KFxuICAgIHlJbmZvOiB7IHZhbHVlOiBudW1iZXI7IGlzU2Vjb25kYXJ5OiBib29sZWFuIH1bXSxcbiAgICB5UG9zOiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICApIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IDA7XG4gICAgbGV0IGN1cnJNaW5EaXN0YW5jZSA9IE1hdGguYWJzKFxuICAgICAgc2NhbGUoeUluZm9bMF0udmFsdWUsIHlJbmZvWzBdLmlzU2Vjb25kYXJ5KSAtIHlQb3MsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHlJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBuZXdEaXN0YW5jZSA9IE1hdGguYWJzKFxuICAgICAgICBzY2FsZSh5SW5mb1tpXS52YWx1ZSwgeUluZm9baV0uaXNTZWNvbmRhcnkpIC0geVBvcyxcbiAgICAgICk7XG4gICAgICBpZiAobmV3RGlzdGFuY2UgPCBjdXJyTWluRGlzdGFuY2UpIHtcbiAgICAgICAgZm91bmRJbmRleCA9IGk7XG4gICAgICAgIGN1cnJNaW5EaXN0YW5jZSA9IG5ld0Rpc3RhbmNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm91bmRJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJhcllJbmZvKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIHhJbmRleDogbnVtYmVyLFxuICAgIHNjYWxlOiAoaW5wdXQ6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IG51bWJlcixcbiAgICBpc1N1cHBsZW1lbnRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogeyB5VmFsdWU6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgaXNTdGFja2VkID0gaXNTdGFja2VkRGF0YShjb25maWcpO1xuICAgIGNvbnN0IG1pbmltdW1TaXplID0gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWcpO1xuICAgIGNvbnN0IHplcm9WYWwgPSBzY2FsZSgwLCB0cnVlKTtcbiAgICBjb25zdCB5RGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIHlJbmRleCwgaXNTdXBwbGVtZW50YXJ5KTtcbiAgICBjb25zdCBzY2FsZVZhbHVlID0gc2NhbGUoXG4gICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgeUluZGV4LCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgKTtcbiAgICBpZiAoc2NhbGVWYWx1ZSA+IHplcm9WYWwpIHtcbiAgICAgIGxldCBwcmV2QmFySGVpZ2h0cyA9IDA7XG4gICAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeUluZGV4OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGVja0RhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCBpLCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1N1cHBsZW1lbnRhcnkgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4gY2hlY2tEYXRhXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2hlY2tWYWx1ZSA9IHNjYWxlKFxuICAgICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvL1NraXAgcG9zaXRpdmUgdmFsdWVzXG4gICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPCB6ZXJvVmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldkJhckhlaWdodHMgKz0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgICAgY2hlY2tWYWx1ZSAtIHplcm9WYWwsXG4gICAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB5VmFsdWUgPSB6ZXJvVmFsICsgcHJldkJhckhlaWdodHM7XG4gICAgICBjb25zdCBoZWlnaHQgPSBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgIHNjYWxlVmFsdWUgLSB6ZXJvVmFsLFxuICAgICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgbWluaW11bVNpemUsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgeVZhbHVlLCBoZWlnaHQgfTtcbiAgICB9XG4gICAgbGV0IHByZXZCYXJIZWlnaHRzID0gMDtcbiAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlJbmRleDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrRGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIGksIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzU3VwcGxlbWVudGFyeSAmJlxuICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIGNoZWNrRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsdWUgPSBzY2FsZShcbiAgICAgICAgICBjaGVja0RhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCBpLCB4SW5kZXgsIGlzU3VwcGxlbWVudGFyeSksXG4gICAgICAgICk7XG4gICAgICAgIC8vU2tpcCBuZWdhdGl2ZSB2YWx1ZXNcbiAgICAgICAgaWYgKGNoZWNrVmFsdWUgPiB6ZXJvVmFsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHJldkJhckhlaWdodHMgKz0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgIHplcm9WYWwgLSBjaGVja1ZhbHVlLFxuICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaGVpZ2h0ID0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgemVyb1ZhbCAtIHNjYWxlVmFsdWUsXG4gICAgICB5RGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgIG1pbmltdW1TaXplLFxuICAgICk7XG4gICAgY29uc3QgeVZhbHVlID0gemVyb1ZhbCAtIGhlaWdodCAtIHByZXZCYXJIZWlnaHRzO1xuICAgIHJldHVybiB7IHlWYWx1ZSwgaGVpZ2h0IH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdXBwQmFyWUluZm9WaWFZSW5kZXgoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgc3VwcEluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICApOiB7IHlWYWx1ZTogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBpZiAoIWhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpKSB7XG4gICAgICByZXR1cm4geyB5VmFsdWU6IDAsIGhlaWdodDogMCB9O1xuICAgIH1cbiAgICBjb25zdCBzdXBwWXMgPSBkYXRhLnN1cHBsZW1lbnRhcnlZcztcbiAgICAvLyBGaW5kIHN1cHBsZW1lbnRhcnkgYmFycyB3aXRoIHRoZSBnaXZlbiBzdXBwbGVtZW50YWxJbmRleFxuICAgIGNvbnN0IGdyb3VwU3VwcHMgPSBzdXBwWXMuZmlsdGVyKHMgPT4gcy5zdXBwbGVtZW50YWxJbmRleCA9PT0gc3VwcEluZGV4KTtcbiAgICAvLyB5SW5kZXggcmVmZXJzIHRvIHdoaWNoIFkgc2VyaWVzICh3aXRoaW4gdGhlIHN1cHBsZW1lbnRhbCBncm91cCkgd2UncmUgbG9va2luZyBhdFxuICAgIGlmICh5SW5kZXggPj0gMCAmJiB5SW5kZXggPCBncm91cFN1cHBzLmxlbmd0aCkge1xuICAgICAgLy8gRmluZCB0aGlzIHN1cHAgaW4gdGhlIG9yaWdpbmFsIGFycmF5XG4gICAgICBjb25zdCBzdXBwSW5PcmlnaW5hbEFycmF5ID0gc3VwcFlzLmluZGV4T2YoZ3JvdXBTdXBwc1t5SW5kZXhdKTtcbiAgICAgIHJldHVybiBnZXRCYXJZSW5mbyhcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBzdXBwSW5PcmlnaW5hbEFycmF5LFxuICAgICAgICB4SW5kZXgsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgeVZhbHVlOiAwLCBoZWlnaHQ6IDAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1haW5PclN1cHBZKFxuICAgIGRhdGE6IE5vbkZsb3dEYXRhLFxuICAgIHlJbmRleDogbnVtYmVyLFxuICAgIGlzU3VwcGxlbWVudGFyeTogYm9vbGVhbixcbiAgKTogRGF0YVkgfCBTdXBwbGVtZW50YXJ5RGF0YVkge1xuICAgIGlmIChoYXNTdXBwbGVtZW50YXJ5RGF0YShkYXRhKSAmJiBpc1N1cHBsZW1lbnRhcnkpIHtcbiAgICAgIHJldHVybiBkYXRhLnN1cHBsZW1lbnRhcnlZc1t5SW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS55c1t5SW5kZXhdO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmFyWEluZm8oXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgc2NhbGU6IChpbnB1dDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyLFxuICAgIGlzU3VwcGxlbWVudGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICApOiB7IHhWYWx1ZTogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0ge1xuICAgIGNvbnN0IGlzU3RhY2tlZCA9IGlzU3RhY2tlZERhdGEoY29uZmlnKTtcbiAgICBjb25zdCBtaW5pbXVtU2l6ZSA9IGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKTtcbiAgICBjb25zdCB6ZXJvVmFsID0gc2NhbGUoMCwgdHJ1ZSk7XG4gICAgY29uc3QgeURhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCB5SW5kZXgsIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9IHNjYWxlKFxuICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICk7XG4gICAgaWYgKHNjYWxlVmFsdWUgPCB6ZXJvVmFsKSB7XG4gICAgICBsZXQgcHJldkJhcldpZHRocyA9IDA7XG4gICAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeUluZGV4OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGVja0RhdGEgPSBnZXRNYWluT3JTdXBwWShkYXRhLCBpLCBpc1N1cHBsZW1lbnRhcnkpO1xuICAgICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1N1cHBsZW1lbnRhcnkgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4gY2hlY2tEYXRhXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2hlY2tWYWwgPSBzY2FsZShcbiAgICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy9Ta2lwIHBvc2l0aXZlIHZhbHVlc1xuICAgICAgICAgIGlmIChjaGVja1ZhbCA+IHplcm9WYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2QmFyV2lkdGhzICs9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICAgIHplcm9WYWwgLSBjaGVja1ZhbCxcbiAgICAgICAgICAgIGNoZWNrRGF0YS52YWx1ZXNbeEluZGV4XSxcbiAgICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHdpZHRoID0gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICB6ZXJvVmFsIC0gc2NhbGVWYWx1ZSxcbiAgICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHhWYWx1ZSA9IHplcm9WYWwgLSB3aWR0aCAtIHByZXZCYXJXaWR0aHM7XG4gICAgICByZXR1cm4geyB4VmFsdWUsIHdpZHRoIH07XG4gICAgfVxuICAgIGxldCBwcmV2QmFyV2lkdGhzID0gMDtcbiAgICBpZiAoaXNTdGFja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlJbmRleDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrRGF0YSA9IGdldE1haW5PclN1cHBZKGRhdGEsIGksIGlzU3VwcGxlbWVudGFyeSk7XG4gICAgICAgIC8vQm90aCB5RGF0YSBhbmQgY2hlY2tEYXRhIGFyZSBkZWZpbml0ZWx5IFN1cHBsZW1lbnRhcnlEYXRhWXMgaWYgaXNTdXBwbGVtZW50YXJ5IGlzIHRydWUsIGJ1dCB0aGV5IGRvbid0IHJlYWxpemUgaXRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzU3VwcGxlbWVudGFyeSAmJlxuICAgICAgICAgICdzdXBwbGVtZW50YWxJbmRleCcgaW4geURhdGEgJiZcbiAgICAgICAgICAnc3VwcGxlbWVudGFsSW5kZXgnIGluIGNoZWNrRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoeURhdGEuc3VwcGxlbWVudGFsSW5kZXggIT09IGNoZWNrRGF0YS5zdXBwbGVtZW50YWxJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsID0gc2NhbGUoXG4gICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIGNoZWNrSWZTZWNvbmRhcnkoZGF0YSwgaSwgeEluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLFxuICAgICAgICApO1xuICAgICAgICAvL1NraXAgbmVnYXRpdmUgdmFsdWVzXG4gICAgICAgIGlmIChjaGVja1ZhbCA8IHplcm9WYWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2QmFyV2lkdGhzICs9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgICAgICBjaGVja1ZhbCAtIHplcm9WYWwsXG4gICAgICAgICAgY2hlY2tEYXRhLnZhbHVlc1t4SW5kZXhdLFxuICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4VmFsdWUgPSBwcmV2QmFyV2lkdGhzICsgemVyb1ZhbDtcbiAgICBjb25zdCB3aWR0aCA9IGFwcGx5TWluaW11bURhdGFFbGVtZW50U2l6ZShcbiAgICAgIHNjYWxlVmFsdWUgLSB6ZXJvVmFsLFxuICAgICAgeURhdGEudmFsdWVzW3hJbmRleF0sXG4gICAgICBtaW5pbXVtU2l6ZSxcbiAgICApO1xuICAgIHJldHVybiB7IHhWYWx1ZSwgd2lkdGggfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrSWZTZWNvbmRhcnkoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgeUluZGV4OiBudW1iZXIsXG4gICAgeEluZGV4OiBudW1iZXIsXG4gICAgaXNTdXBwbGVtZW50YXJ5OiBib29sZWFuID0gZmFsc2UsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdsYWJlbGVkJykge1xuICAgICAgaWYgKGRhdGEueFt4SW5kZXhdLmlzU2Vjb25kYXJ5ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0TWFpbk9yU3VwcFkoZGF0YSwgeUluZGV4LCBpc1N1cHBsZW1lbnRhcnkpLmlzU2Vjb25kYXJ5ID09PSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2FyblVuc3VwcG9ydGVkUGF0dGVybnMoXG4gICAgZGF0YTogTm9uRmxvd0RhdGEsXG4gICAgc3VwcG9ydGVkUGF0dGVybnM6IFBhdHRlcm5bXSxcbiAgICBjaGFydFR5cGU6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYWxsWXM6IERhdGFZW10gPSBbXG4gICAgICAuLi5kYXRhLnlzLFxuICAgICAgLi4uKGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpID8gZGF0YS5zdXBwbGVtZW50YXJ5WXMgOiBbXSksXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHkgb2YgYWxsWXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgeS5wYXR0ZXJuICYmXG4gICAgICAgIHkucGF0dGVybiAhPT0gJ3NvbGlkJyAmJlxuICAgICAgICAhc3VwcG9ydGVkUGF0dGVybnMuaW5jbHVkZXMoeS5wYXR0ZXJuKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSGVhZHMgdXAhIFRoZSAnJHt5LnBhdHRlcm59JyBwYXR0ZXJuIGlzbid0IHN1cHBvcnRlZCBmb3IgJHtjaGFydFR5cGV9IGNoYXJ0cy4gRmFsbGluZyBiYWNrIHRvIHNvbGlkLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd2FybkZsb3dEYXRhKFxuICAgIGRhdGE6IElucHV0RGF0YSxcbiAgICBjaGFydFR5cGU6IHN0cmluZyxcbiAgKTogZGF0YSBpcyBOb25GbG93RGF0YSB7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3cnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgSGVhZHMgdXAhIFRoZSAnZmxvdycgZGF0YSB0eXBlIGlzbid0IHN1cHBvcnRlZCBmb3IgJHtjaGFydFR5cGV9IGNoYXJ0cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBoaWRlIHN0cmlwcyBvdXQgaGlkZGVuIHkgdmFsdWVzIHdoaWxlIHJldGFpbmluZyB0aGUgb3JpZ2luYWwgaW5kaWNlc1xuICAvLyBmb3IgdGhlIHJlbWFpbmluZyB2aXNpYmxlIHZhbHVlc1xuICBmdW5jdGlvbiBoaWRlKGRhdGE6IE5vbkZsb3dEYXRhKToge1xuICAgIGRhdGE6IE5vbkZsb3dEYXRhO1xuICAgIHZpc2libGVJbmRpY2VzOiBudW1iZXJbXTtcbiAgICB2aXNpYmxlU3VwcEluZGljZXM6IG51bWJlcltdO1xuICB9IHtcbiAgICBjb25zdCB2aXNpYmxlSW5kaWNlcyA9IGRhdGEueXNcbiAgICAgIC5tYXAoKHksIGkpID0+ICh7IHksIGkgfSkpXG4gICAgICAuZmlsdGVyKCh7IHkgfSkgPT4gIXkuaGlkZGVuKVxuICAgICAgLm1hcCgoeyBpIH0pID0+IGkpO1xuICAgIGNvbnN0IHZpc2libGVTdXBwSW5kaWNlcyA9IGhhc1N1cHBsZW1lbnRhcnlEYXRhKGRhdGEpXG4gICAgICA/IGRhdGEuc3VwcGxlbWVudGFyeVlzXG4gICAgICAgICAgLm1hcCgoeSwgaSkgPT4gKHsgeSwgaSB9KSlcbiAgICAgICAgICAuZmlsdGVyKCh7IHkgfSkgPT4gIXkuaGlkZGVuKVxuICAgICAgICAgIC5tYXAoKHsgaSB9KSA9PiBpKVxuICAgICAgOiBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YToge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB5czogdmlzaWJsZUluZGljZXMubWFwKGkgPT4gZGF0YS55c1tpXSksXG4gICAgICAgIHN1cHBsZW1lbnRhcnlZczogdmlzaWJsZVN1cHBJbmRpY2VzLm1hcChpID0+IGRhdGEuc3VwcGxlbWVudGFyeVlzIVtpXSksXG4gICAgICB9LFxuICAgICAgdmlzaWJsZUluZGljZXMsXG4gICAgICB2aXNpYmxlU3VwcEluZGljZXMsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhdGVyZmFsbFRyYW5zZm9ybShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBpc1dhdGVyZmFsbDogYm9vbGVhbixcbiAgKTogeyBkYXRhOiBMYWJlbGVkRGF0YTsgbWFwOiBNYXA8RGF0YVksIERhdGFZPiB9IHtcbiAgICBjb25zdCB3YXRlcmZhbGxNYXAgPSBuZXcgTWFwPERhdGFZLCBEYXRhWT4oKTtcbiAgICBpZiAoZGF0YS50eXBlID09PSAndGltZXNlcmllcycgfHwgIWlzV2F0ZXJmYWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdHlwZTogJ2xhYmVsZWQnLFxuICAgICAgICAgIHg6IFtdLFxuICAgICAgICAgIHlzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFwOiB3YXRlcmZhbGxNYXAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBuZXdEYXRhOiBMYWJlbGVkRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB4OiBbLi4uZGF0YS54LCB7IGxhYmVsOiAnVG90YWwnIH1dLFxuICAgICAgeXM6IFtcbiAgICAgICAgLi4uZGF0YS55cy5tYXAoeSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3WTogRGF0YVkgPSB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgdmFsdWVzOiBbLi4ueS52YWx1ZXMsIHkudmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHdhdGVyZmFsbE1hcC5zZXQobmV3WSwgeSk7XG4gICAgICAgICAgcmV0dXJuIG5ld1k7XG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBuZXdEYXRhLFxuICAgICAgbWFwOiB3YXRlcmZhbGxNYXAsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsb3dzVHJhbnNmb3JtKFxuICAgIGNvbmZpZzogRmxvd0NvbmZpZyxcbiAgICBkYXRhOiBGbG93RGF0YSxcbiAgKTogUHJvY2Vzc2VkRmxvd0RhdGEge1xuICAgIGNvbnN0IHJldHVybkJ1Y2tldHM6IEZsb3dCdWNrZXRbXSA9IFtdO1xuICAgIGNvbnN0IG1heFBhdGhMZW5ndGggPSBNYXRoLm1heCguLi5kYXRhLnlzLm1hcCh5ID0+IHkuc3RlcHMubGVuZ3RoKSk7XG4gICAgaWYgKG1heFBhdGhMZW5ndGggPiAwICYmIG1heFBhdGhMZW5ndGggPCBJbmZpbml0eSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhQYXRoTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmxvd0J1Y2tldDogRmxvd0J1Y2tldCA9IHtcbiAgICAgICAgICB0b3RhbENvdW50OiAwLFxuICAgICAgICAgIHN1YkJ1Y2tldHM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHkgb2YgZGF0YS55cykge1xuICAgICAgICAgIGlmICh5LnZhbHVlcy5sZW5ndGggPiBpICYmIHkuc3RlcHMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgY29uc3Qgc3ViQnVja2V0SWQgPSB5LnN0ZXBzW2ldO1xuICAgICAgICAgICAgY29uc3QgZm91bmRTdWJCdWNrZXQgPSBmbG93QnVja2V0LnN1YkJ1Y2tldHMuZmluZChcbiAgICAgICAgICAgICAgc3ViQnVja2V0ID0+IHN1YkJ1Y2tldC5pZCA9PT0gc3ViQnVja2V0SWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHN1YkJ1Y2tldDogRmxvd1N1YkJ1Y2tldDtcbiAgICAgICAgICAgIGlmIChmb3VuZFN1YkJ1Y2tldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHN1YkJ1Y2tldCA9IGZvdW5kU3ViQnVja2V0O1xuICAgICAgICAgICAgICBzdWJCdWNrZXQuY291bnQgKz0geS52YWx1ZXNbaV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJCdWNrZXQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHN1YkJ1Y2tldElkLFxuICAgICAgICAgICAgICAgIGNvdW50OiB5LnZhbHVlc1tpXSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGZsb3dCdWNrZXQuc3ViQnVja2V0cy5wdXNoKHN1YkJ1Y2tldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbG93QnVja2V0LnRvdGFsQ291bnQgKz0geS52YWx1ZXNbaV07XG5cbiAgICAgICAgICAgIC8vRmlsbCBpbiBiYWNrd2FyZHMgY29ubmVjdGlvbnNcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZENvbm5lY3Rpb24gPSBzdWJCdWNrZXQuY29ubmVjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0ID09PSB5LnN0ZXBzW2kgLSAxXSAmJlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmQgPT09IHN1YkJ1Y2tldElkICYmXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm91bmRDb25uZWN0aW9uLmNvdW50ICs9IHkudmFsdWVzW2ldO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Nvbm5lY3Rpb246IEZsb3dDb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgICAgICAgc3RhcnQ6IHkuc3RlcHNbaSAtIDFdLFxuICAgICAgICAgICAgICAgICAgZW5kOiBzdWJCdWNrZXRJZCxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiB5LnZhbHVlc1tpXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHN1YkJ1Y2tldC5jb25uZWN0aW9ucy5wdXNoKG5ld0Nvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vRmlsbCBpbiBmb3J3YXJkcyBjb25uZWN0aW9uc1xuICAgICAgICAgICAgaWYgKGkgPCB5LnN0ZXBzLmxlbmd0aCAtIDEgJiYgaSA8IHkudmFsdWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmRDb25uZWN0aW9uID0gc3ViQnVja2V0LmNvbm5lY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCA9PT0gc3ViQnVja2V0SWQgJiZcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kID09PSB5LnN0ZXBzW2kgKyAxXSAmJlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5kaXJlY3Rpb24gPT09ICdmb3J3YXJkJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm91bmRDb25uZWN0aW9uLmNvdW50ICs9IHkudmFsdWVzW2kgKyAxXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN1YkJ1Y2tldElkLFxuICAgICAgICAgICAgICAgICAgZW5kOiB5LnN0ZXBzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICAgIGNvdW50OiB5LnZhbHVlc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzdWJCdWNrZXQuY29ubmVjdGlvbnMucHVzaChuZXdDb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5CdWNrZXRzLnB1c2goZmxvd0J1Y2tldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViQnVja2V0T3JkZXJpbmdNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmZsb3dDb25maWcuc3ViQnVja2V0c0NvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgc3ViQnVja2V0T3JkZXJpbmdNYXAuc2V0KFxuICAgICAgICBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnW2ldLmJ1Y2tldElkLFxuICAgICAgICBpLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbWFwR2V0ID0gKGlkOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgICAgY29uc3QgZm91bmRSZXN1bHQgPSBzdWJCdWNrZXRPcmRlcmluZ01hcC5nZXQoaWQpO1xuICAgICAgaWYgKGZvdW5kUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kUmVzdWx0O1xuICAgICAgfVxuICAgICAgLy9JZiBzb21ldGhpbmcgaXNuJ3QgZGVmaW5lZCBpbiB0aGUgY29uZmlnLCBwdXQgaXQgYXQgdGhlIGVuZFxuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH07XG5cbiAgICAvL0Vuc3VyZSB0aGUgZGF0YSBpcyBzb3J0ZWQgdGhlIHNhbWUgdGhlIHdheSB0aGUgY29uZmlnIGlzLCBhbmQgZHJvcCBlbXB0eVxuICAgIC8vYmFycy9jb25uZWN0aW9ucyBzbyB0aGV5J3JlIG5laXRoZXIgZGlzcGxheWVkIG5vciBmYWN0b3JlZCBpbnRvIHNpemluZ1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZmxvdy1wcm9jZXNzZWQnLFxuICAgICAgeDogcmV0dXJuQnVja2V0cy5tYXAoYnVja2V0ID0+ICh7XG4gICAgICAgIC4uLmJ1Y2tldCxcbiAgICAgICAgc3ViQnVja2V0czogYnVja2V0LnN1YkJ1Y2tldHNcbiAgICAgICAgICAuZmlsdGVyKHN1YkJ1Y2tldCA9PiBzdWJCdWNrZXQuY291bnQgIT09IDApXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1hcEdldChhLmlkKSAtIG1hcEdldChiLmlkKSlcbiAgICAgICAgICAubWFwKHN1YkJ1Y2tldCA9PiAoe1xuICAgICAgICAgICAgLi4uc3ViQnVja2V0LFxuICAgICAgICAgICAgY29ubmVjdGlvbnM6IHN1YkJ1Y2tldC5jb25uZWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5jb3VudCAhPT0gMClcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFNvcnQgPSBtYXBHZXQoYS5zdGFydCkgLSBtYXBHZXQoYi5zdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0U29ydCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0U29ydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcEdldChhLmVuZCkgLSBtYXBHZXQoYi5lbmQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIHR5cGUgVmFsdWVUeXBlID0gJ2NvdW50JyB8ICdjdXJyZW5jeScgfCAncGVyY2VudGFnZScgfCAnZGF5cyc7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBpcGVzKHZhbHVlVHlwZTogVmFsdWVUeXBlKSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvdW50Jzoge1xuICAgICAgICByZXR1cm4geyBwaXBlOiBuZXcgU21hbGxOdW1iZXJQaXBlKCksIGZ1bGxQaXBlOiBuZXcgTnVtYmVyUGlwZSgpIH07XG4gICAgICB9XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGlwZTogbmV3IFNtYWxsQ3VycmVuY3lQaXBlKCksXG4gICAgICAgICAgZnVsbFBpcGU6IG5ldyBDdXJyZW5jeVBpcGUoJ2VuLXVzJyksXG4gICAgICAgIH07XG4gICAgICBjYXNlICdwZXJjZW50YWdlJzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IFBlcmNlbnRhZ2VQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgICBjYXNlICdkYXlzJzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IERheXNQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW50ZXJ2YWxzID0gWyd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgSW50ZXJ2YWwgPSAodHlwZW9mIGludGVydmFscylbbnVtYmVyXTtcblxuICBleHBvcnQgZnVuY3Rpb24gZm9ybWF0ZWREYXRlKGRhdGVGb3JtYXQ6IEludGVydmFsLCBkYXRlOiBEYXRlKSB7XG4gICAgaWYgKGRhdGVGb3JtYXQgPT09ICdxdWFydGVyJykge1xuICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICAgIGNvbnN0IHllYXIgPSB1dGNGb3JtYXQoZ2V0VGltZUludGVydmFsRm9ybWF0KCd5ZWFyJykpKGRhdGUpO1xuICAgICAgcmV0dXJuIGBRJHtxdWFydGVyfSAke3llYXJ9YDtcbiAgICB9XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0VGltZUludGVydmFsRm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgIHJldHVybiB1dGNGb3JtYXQoZm9ybWF0KShkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRpbWVJbnRlcnZhbEZvcm1hdChpbnRlcnZhbDogSW50ZXJ2YWwpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcmV0dXJuICclbS8lZC8lWSc7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgcmV0dXJuICclYiAlWSc7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuICclWSc7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDaGFydERhdGFUb0RvbnV0RGF0YShcbiAgICBjaGFydERhdGE6IE5vbkZsb3dEYXRhLFxuICApOiBEb251dERhdGFbXSB7XG4gICAgaWYgKGNoYXJ0RGF0YS55cy5maW5kKHkgPT4geS52YWx1ZXMubGVuZ3RoID4gMSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiSGVhZHMgdXAhIFBpZSBjaGFydHMgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSB2YWx1ZXMgcGVyIHNlcmllc1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb251dERhdGEgPSBjaGFydERhdGEueXMubWFwKHkgPT4gKHtcbiAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgaGlkZGVuOiB5LmhpZGRlbixcbiAgICAgIHZhbHVlOiB5LnZhbHVlcy5sZW5ndGggPj0gMSA/IHkudmFsdWVzWzBdIDogMCxcbiAgICAgIGlzU2Vjb25kYXJ5OiB5LmlzU2Vjb25kYXJ5LFxuICAgIH0pKTtcbiAgICByZXR1cm4gZG9udXREYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJjVG9Qb2ludChhbmdsZTogbnVtYmVyLCByYWRpdXM6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyAyKSxcbiAgICAgIHk6IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlIC0gTWF0aC5QSSAvIDIpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwb2ludFRvQXJjKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkaXVzID0gTWF0aC5oeXBvdCh4LCB5KTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHksIHgpICsgTWF0aC5QSSAvIDI7XG4gICAgLy9Ob3JtYWxpemUgdG8gYmUgd2l0aGluIHJhbmdlIFswLCAyz4BdXG4gICAgYW5nbGUgPSAoYW5nbGUgKyAyICogTWF0aC5QSSkgJSAoMiAqIE1hdGguUEkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFuZ2xlLFxuICAgICAgcmFkaXVzLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGdWxsQ2hhcnRTY2FsZVZhbHVlcyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICAgIHBpcGVUcmFuc2Zvcm06ICgodmFsdWU6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4pID0+IHN0cmluZykgfCBudWxsLFxuICAgIGRhdGVGb3JtYXQ6ICgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKSB8IG51bGwsXG4gICk6IEZ1bGxDaGFydFNjYWxlVmFsdWVzIHwgbnVsbCB7XG4gICAgY29uc3QgY2hhcnREYXRhRGlyZWN0aW9uID0gZ2V0Q2hhcnREYXRhRGlyZWN0aW9uKGNvbmZpZyk7XG4gICAgY29uc3QgZGVmYXVsdFNjYWxpbmdDb25maWcgPSBnZXREZWZhdWx0U2NhbGluZ0NvbmZpZ0J5Q2hhcnRUeXBlKFxuICAgICAgY29uZmlnLnR5cGUsXG4gICAgICBjb25maWcuc2Vjb25kYXJ5VmFsdWVUeXBlICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBjb25zdCBzY2FsaW5nQ29uZmlnID0gY29tYmluZVNjYWxpbmdJbmZvKGNvbmZpZywgZGVmYXVsdFNjYWxpbmdDb25maWcpO1xuICAgIGNvbnN0IG5vbkRhdGFBeGlzVmFsdWVzID0gY2FsY3VsYXRlTm9uRGF0YUF4aXNWYWx1ZXMoXG4gICAgICBjb25maWcsXG4gICAgICBzY2FsaW5nQ29uZmlnLFxuICAgICAgY29uZmlnLnNjYWxpbmdDb25maWc/LmVsZW1lbnRTY2FsZXMsXG4gICAgICBkZWZhdWx0U2NhbGluZ0NvbmZpZy5lbGVtZW50U2NhbGVzLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhQXhpc1ZhbHVlcyA9IGNhbGN1bGF0ZURhdGFBeGlzVmFsdWVzKFxuICAgICAgY29uZmlnLFxuICAgICAgc2NhbGluZ0NvbmZpZyxcbiAgICAgIGNvbmZpZy5zY2FsaW5nQ29uZmlnPy5lbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNjYWxpbmdDb25maWcuZWxlbWVudFNjYWxlcyxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBkYXRhLFxuICAgICAgcGlwZVRyYW5zZm9ybSxcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICBub25EYXRhQXhpc1ZhbHVlcy5zaXppbmdFcnJvciA9PT0gdHJ1ZSB8fFxuICAgICAgZGF0YUF4aXNWYWx1ZXMuc2l6aW5nRXJyb3IgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkYXRhTGFiZWxTdGFydFBhZGRpbmcgPVxuICAgICAgZ2V0RGF0YUxhYmVsU2l6aW5nQ291bnQoZGF0YSwgY29uZmlnKS5zdGFydCAqXG4gICAgICAoZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsUGFkZGluZyArIGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplKTtcbiAgICBjb25zdCBkYXRhTGFiZWxFbmRQYWRkaW5nID1cbiAgICAgIGdldERhdGFMYWJlbFNpemluZ0NvdW50KGRhdGEsIGNvbmZpZykuZW5kICpcbiAgICAgIChkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxQYWRkaW5nICsgZGF0YUF4aXNWYWx1ZXMuZGF0YUxhYmVsVGV4dFNpemUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5vbkRhdGFBeGlzVmFsdWVzLFxuICAgICAgLi4uZGF0YUF4aXNWYWx1ZXMsXG4gICAgICBsZWZ0UGFkZGluZzpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZ1xuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nLFxuICAgICAgcmlnaHRQYWRkaW5nOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZ1xuICAgICAgICAgIDogbm9uRGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyxcbiAgICAgIHRvcFBhZGRpbmc6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy5zdGFydFBhZGRpbmdcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyxcbiAgICAgIGJvdHRvbVBhZGRpbmc6XG4gICAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyBub25EYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nLFxuICAgICAgdG90YWxMZWZ0T2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICtcbiAgICAgICAgICAgIGRhdGFBeGlzVmFsdWVzLmxlZnRCdWNrZXRMYWJlbCArXG4gICAgICAgICAgICBkYXRhTGFiZWxTdGFydFBhZGRpbmdcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIG5vbkRhdGFBeGlzVmFsdWVzLm91dGVyR2FwLFxuICAgICAgdG90YWxSaWdodE9mZnNldDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIGRhdGFMYWJlbEVuZFBhZGRpbmdcbiAgICAgICAgICA6IG5vbkRhdGFBeGlzVmFsdWVzLmVuZFBhZGRpbmcgKyBub25EYXRhQXhpc1ZhbHVlcy5vdXRlckdhcCxcbiAgICAgIHRvdGFsVG9wT2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMuc3RhcnRQYWRkaW5nICsgbm9uRGF0YUF4aXNWYWx1ZXMub3V0ZXJHYXBcbiAgICAgICAgICA6IGRhdGFBeGlzVmFsdWVzLnN0YXJ0UGFkZGluZyArIGRhdGFMYWJlbFN0YXJ0UGFkZGluZyxcbiAgICAgIHRvdGFsQm90dG9tT2Zmc2V0OlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gbm9uRGF0YUF4aXNWYWx1ZXMuZW5kUGFkZGluZyArIG5vbkRhdGFBeGlzVmFsdWVzLm91dGVyR2FwXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5lbmRQYWRkaW5nICsgZGF0YUxhYmVsRW5kUGFkZGluZyxcbiAgICAgIHRhcmdldFRpY2tDb3VudDogc2NhbGluZ0NvbmZpZy50YXJnZXRUaWNrQ291bnQsXG4gICAgICBzaXplRm9yRGF0YTogZGF0YUF4aXNWYWx1ZXMuc2l6ZUZvckRhdGEsXG4gICAgICB0b3RhbFdpZHRoOlxuICAgICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gZGF0YUF4aXNWYWx1ZXMudG90YWxTaXplXG4gICAgICAgICAgOiBub25EYXRhQXhpc1ZhbHVlcy50b3RhbFNpemUsXG4gICAgICB0b3RhbEhlaWdodDpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IG5vbkRhdGFBeGlzVmFsdWVzLnRvdGFsU2l6ZVxuICAgICAgICAgIDogZGF0YUF4aXNWYWx1ZXMudG90YWxTaXplLFxuICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IGNvbmZpZy5zaG93RGF0YUxhYmVsc1xuICAgICAgICA/IGRhdGFBeGlzVmFsdWVzLmRhdGFMYWJlbFRleHRTaXplXG4gICAgICAgIDogMCxcbiAgICAgIGhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZTpcbiAgICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAndmVydGljYWwnXG4gICAgICAgICAgPyBkYXRhQXhpc1ZhbHVlcy5idWNrZXRMYWJlbFRleHRTaXplXG4gICAgICAgICAgOiBkYXRhQXhpc1ZhbHVlcy5kYXRhTGFiZWxUZXh0U2l6ZSwgLy9UaWNrcyBhbmQgZGF0YSBsYWJlbHMgdXNlIHRoZSBzYW1lIGZvcm1hdHRpbmcgb24gdGhlIHNhbWUga2luZCBvZiBkYXRhXG4gICAgICB2ZXJ0aWNhbEF4aXNMYWJlbFRleHRTaXplOiBkYXRhQXhpc1ZhbHVlcy5mb250U2l6ZSxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbixcbiAgICAgIGhvcml6b250YWxDb250YWluZXJTY2FsZTogc2NhbGluZ0NvbmZpZy5ob3Jpem9udGFsQ29udGFpbmVyU2NhbGUsXG4gICAgICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlOiBzY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGUsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5vbkRhdGFBeGlzVmFsdWVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHNjYWxpbmdDb25maWc6IE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGVsZW1lbnRTY2FsZXM6IFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0U2l6aW5nOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgKToge1xuICAgIGJhclNpemU6IG51bWJlcjtcbiAgICBiYXJDbHVzdGVyR2FwOiBudW1iZXI7XG4gICAgYnVja2V0R2FwOiBudW1iZXI7XG4gICAgb3V0ZXJHYXA6IG51bWJlcjtcbiAgICBzdGFydFBhZGRpbmc6IG51bWJlcjtcbiAgICBlbmRQYWRkaW5nOiBudW1iZXI7XG4gICAgdG90YWxTaXplOiBudW1iZXI7XG4gICAgc2l6aW5nRXJyb3I/OiBib29sZWFuO1xuICB9IHtcbiAgICBjb25zdCBjaGFydERhdGFEaXJlY3Rpb24gPSBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnKTtcbiAgICBjb25zdCBib3VuZGluZ0RpbWVuc2lvbiA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGRpbWVuc2lvbnMuaGVpZ2h0XG4gICAgICAgIDogZGltZW5zaW9ucy53aWR0aDtcbiAgICBjb25zdCBheGlzU2NhbGUgPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBzY2FsaW5nQ29uZmlnPy52ZXJ0aWNhbEF4aXNTY2FsZVxuICAgICAgICA6IHNjYWxpbmdDb25maWc/Lmhvcml6b250YWxBeGlzU2NhbGU7XG5cbiAgICBjb25zdCBiYXJTaXplQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnYmFyU2l6ZScsXG4gICAgKTtcbiAgICBjb25zdCBiYXJDbHVzdGVyR2FwQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnYmFyQ2x1c3RlckdhcCcsXG4gICAgKTtcbiAgICBjb25zdCBidWNrZXRHYXBDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdidWNrZXRHYXAnLFxuICAgICk7XG4gICAgY29uc3Qgb3V0ZXJHYXBDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdvdXRlckdhcCcsXG4gICAgKTtcbiAgICBjb25zdCBzdGFydFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3RvcFBhZGRpbmcnIDogJ2xlZnRQYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGVuZFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JvdHRvbVBhZGRpbmcnIDogJ3JpZ2h0UGFkZGluZycsXG4gICAgKTtcblxuICAgIGNvbnN0IGJ1Y2tldENvdW50ID0gZGF0YS54Lmxlbmd0aDtcbiAgICBsZXQgYmFyQ291bnQgPSAwO1xuICAgIGxldCBiYXJDbHVzdGVyR2FwQ291bnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVja2V0Q291bnQ7IGkrKykge1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgICBiYXJDb3VudCArPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYnVja2V0Q2x1c3RlckNvdW50ID0gZ2V0Q2x1c3RlckluZm9Gb3JCdWNrZXQoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgYmFyQ291bnQgKz0gYnVja2V0Q2x1c3RlckNvdW50LnRvdGFsO1xuICAgICAgICBiYXJDbHVzdGVyR2FwQ291bnQgKz0gYnVja2V0Q2x1c3RlckNvdW50LnRvdGFsIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYnVja2V0R2FwQ291bnQgPSBidWNrZXRDb3VudCAtIDE7XG5cbiAgICBjb25zdCBiYXJUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgYmFyU2l6ZUNvbmZpZyxcbiAgICAgIGJhckNvdW50LFxuICAgICk7XG4gICAgY29uc3QgY2x1c3RlckdhcFRvdGFsU2l6ZSA9IGRldGVybWluZVBvc3NpYmxlU2l6ZXNPZkVsZW1lbnQoXG4gICAgICBiYXJDbHVzdGVyR2FwQ29uZmlnLFxuICAgICAgYmFyQ2x1c3RlckdhcENvdW50LFxuICAgICk7XG4gICAgY29uc3QgYnVja2V0R2FwVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGJ1Y2tldEdhcENvbmZpZyxcbiAgICAgIGJ1Y2tldEdhcENvdW50LFxuICAgICk7XG4gICAgY29uc3Qgb3V0ZXJHYXBUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgb3V0ZXJHYXBDb25maWcsXG4gICAgICAyLFxuICAgICk7XG4gICAgY29uc3Qgc3RhcnRQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIHN0YXJ0UGFkZGluZ0NvbmZpZyxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBjb25zdCBlbmRQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGVuZFBhZGRpbmdDb25maWcsXG4gICAgICAxLFxuICAgICk7XG5cbiAgICBjb25zdCBjYWxjVGFyZ2V0U2l6ZSA9XG4gICAgICBiYXJUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGNsdXN0ZXJHYXBUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIGJ1Y2tldEdhcFRvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgb3V0ZXJHYXBUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQ7XG5cbiAgICBpZiAoXG4gICAgICBheGlzU2NhbGUgPT09ICduby1zY2FsZScgfHxcbiAgICAgIGNhbGNUYXJnZXRTaXplID09PSBib3VuZGluZ0RpbWVuc2lvbiB8fFxuICAgICAgKGF4aXNTY2FsZSA9PT0gJ2dyb3cnICYmIGNhbGNUYXJnZXRTaXplID4gYm91bmRpbmdEaW1lbnNpb24pIHx8XG4gICAgICAoYXhpc1NjYWxlID09PSAnc2hyaW5rJyAmJiBjYWxjVGFyZ2V0U2l6ZSA8IGJvdW5kaW5nRGltZW5zaW9uKVxuICAgICkge1xuICAgICAgLy9ObyBlbGVtZW50IHNjYWxpbmcgbmVjZXNzYXJ5LCByZXR1cm4gZXZlcnl0aGluZyBhcyBpdCdzIHRhcmdldCB2YWx1ZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFyU2l6ZTogYmFyU2l6ZUNvbmZpZy50YXJnZXQsXG4gICAgICAgIGJhckNsdXN0ZXJHYXA6IGJhckNsdXN0ZXJHYXBDb25maWcudGFyZ2V0LFxuICAgICAgICBidWNrZXRHYXA6IGJ1Y2tldEdhcENvbmZpZy50YXJnZXQsXG4gICAgICAgIG91dGVyR2FwOiBvdXRlckdhcENvbmZpZy50YXJnZXQsXG4gICAgICAgIHN0YXJ0UGFkZGluZzogc3RhcnRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZW5kUGFkZGluZzogZW5kUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIHRvdGFsU2l6ZTogY2FsY1RhcmdldFNpemUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGNNaW5TaXplID1cbiAgICAgIGJhclRvdGFsU2l6ZS5taW4gK1xuICAgICAgY2x1c3RlckdhcFRvdGFsU2l6ZS5taW4gK1xuICAgICAgYnVja2V0R2FwVG90YWxTaXplLm1pbiArXG4gICAgICBvdXRlckdhcFRvdGFsU2l6ZS5taW4gK1xuICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLm1pbiArXG4gICAgICBlbmRQYWRkaW5nVG90YWxTaXplLm1pbjtcblxuICAgIC8vTm90ZTogVGhpcyBpcyBvbmx5IGFjdHVhbGx5IGEgbWF4IHNpemUgaWYgYWxsIGVsZW1lbnRzIGhhdmUgYSBkZWZpbmVkIG1heFxuICAgIGNvbnN0IGNhbGNNYXhTaXplID1cbiAgICAgIGJhclRvdGFsU2l6ZS5tYXggK1xuICAgICAgY2x1c3RlckdhcFRvdGFsU2l6ZS5tYXggK1xuICAgICAgYnVja2V0R2FwVG90YWxTaXplLm1heCArXG4gICAgICBvdXRlckdhcFRvdGFsU2l6ZS5tYXggK1xuICAgICAgc3RhcnRQYWRkaW5nVG90YWxTaXplLm1heCArXG4gICAgICBlbmRQYWRkaW5nVG90YWxTaXplLm1heDtcblxuICAgIGlmIChjYWxjTWluU2l6ZSA+IGJvdW5kaW5nRGltZW5zaW9uKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVGhlIHByb3ZpZGVkIG1pbmltdW0gZWxlbWVudCBzaXplcyBtZWFuIHRoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGlzIHNtYWxsIG9mIGEgc2l6ZScsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFyU2l6ZTogMCxcbiAgICAgICAgYmFyQ2x1c3RlckdhcDogMCxcbiAgICAgICAgYnVja2V0R2FwOiAwLFxuICAgICAgICBvdXRlckdhcDogMCxcbiAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ2hlY2tzID0gW1xuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhiYXJTaXplQ29uZmlnLCBiYXJDb3VudCksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGJhckNsdXN0ZXJHYXBDb25maWcsIGJhckNsdXN0ZXJHYXBDb3VudCksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGJ1Y2tldEdhcENvbmZpZywgYnVja2V0R2FwQ291bnQpLFxuICAgICAgZ2V0Q2hlY2tpbmdJbmZvRm9yRWxlbWVudENvbmZpZyhvdXRlckdhcENvbmZpZywgMiksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKHN0YXJ0UGFkZGluZ0NvbmZpZywgMSksXG4gICAgICBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKGVuZFBhZGRpbmdDb25maWcsIDEpLFxuICAgIF07XG4gICAgbGV0IGN1cnJTY2FsaW5nRmFjdG9yID0gMTtcbiAgICBpZiAoY2FsY1RhcmdldFNpemUgPiBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgLy9TY2FsaW5nIGRvd25cbiAgICAgIGxldCBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKCFmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCkge1xuICAgICAgICBjb25zdCBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50ID0gTWF0aC5tYXgoXG4gICAgICAgICAgLi4uY29uZmlnQ2hlY2tzXG4gICAgICAgICAgICAubWFwKGNoZWNrID0+IGNoZWNrLm1pblNjYWxlRmFjdG9yKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHZhbCk6IHZhbCBpcyBudW1iZXIgPT5cbiAgICAgICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJiAhKHZhbCA+PSBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1NjYWxlRmFjdG9yU2l6ZSA9IGdldFN1bUZvclNjYWxlVmFsdWUoXG4gICAgICAgICAgY29uZmlnQ2hlY2tzLFxuICAgICAgICAgIG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld1NjYWxlRmFjdG9yU2l6ZSA8PSBib3VuZGluZ0RpbWVuc2lvbikge1xuICAgICAgICAgIC8vVGhlcmUncyBhIHNjYWxlIHZhbHVlIHRoYXQnbGwgd29yayBiZXR3ZWVuIHRoZSBjdXJyIGFuZCBuZXcgdmFsdWVzXG4gICAgICAgICAgLy9UaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0J2xsIGp1c3QgYmUgYXQgdGhlaXIgbWluXG4gICAgICAgICAgY29uc3Qgbm9uU2NhbGVhYmxlVmFsdWVzID0gY29uZmlnQ2hlY2tzLmZpbHRlcihcbiAgICAgICAgICAgIGNoZWNrID0+XG4gICAgICAgICAgICAgIGNoZWNrLm1pblNjYWxlRmFjdG9yICYmIGNoZWNrLm1pblNjYWxlRmFjdG9yID49IGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy9UaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IGNhbiBzdGlsbCBiZSBzY2FsZWQgZG93blxuICAgICAgICAgIGNvbnN0IHNjYWxlYWJsZVZhbHVlcyA9IGNvbmZpZ0NoZWNrcy5maWx0ZXIoXG4gICAgICAgICAgICBjaGVjayA9PlxuICAgICAgICAgICAgICAhY2hlY2subWluU2NhbGVGYWN0b3IgfHwgY2hlY2subWluU2NhbGVGYWN0b3IgPCBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHdvcmtpbmdTcGFjZSA9XG4gICAgICAgICAgICBib3VuZGluZ0RpbWVuc2lvbiAtXG4gICAgICAgICAgICBnZXRTdW1Gb3JTY2FsZVZhbHVlKG5vblNjYWxlYWJsZVZhbHVlcywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgICAgICAgIGN1cnJTY2FsaW5nRmFjdG9yID1cbiAgICAgICAgICAgIHdvcmtpbmdTcGFjZSAvIGdldFN1bUZvclNjYWxlVmFsdWUoc2NhbGVhYmxlVmFsdWVzLCAxKTtcbiAgICAgICAgICBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9PbmUgb2YgdGhlIGVsZW1lbnRzIGlzIGhpdHRpbmcgdGhlaXIgbWluU2NhbGVGYWN0b3IsIHNvIGZvciBzaW1wbGljaXR5IHdlJ2xsIGp1c3QgZ28gYWdhaW5cbiAgICAgICAgICBjdXJyU2NhbGluZ0ZhY3RvciA9IG5leHRTY2FsZUZhY3RvckJyZWFrcG9pbnQ7XG5cbiAgICAgICAgICAvL0p1c3QgaW4gY2FzZSwgdGhvdWdoIHByZXZpb3VzIGNoZWNrcyBzaG91bGQgbWFrZSB0aGlzIGltcG9zc2libGVcbiAgICAgICAgICBpZiAoY3VyclNjYWxpbmdGYWN0b3IgPT09IDApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICdUaGUgZ2l2ZW4gc2l6ZSBjYW5ub3QgY29udGFpbiB0aGUgZml4ZWQgc2l6ZXMgZ2l2ZW4gZm9yIHRoZSBlbGVtZW50cycsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmFyU2l6ZTogMCxcbiAgICAgICAgICAgICAgYmFyQ2x1c3RlckdhcDogMCxcbiAgICAgICAgICAgICAgYnVja2V0R2FwOiAwLFxuICAgICAgICAgICAgICBvdXRlckdhcDogMCxcbiAgICAgICAgICAgICAgc3RhcnRQYWRkaW5nOiAwLFxuICAgICAgICAgICAgICBlbmRQYWRkaW5nOiAwLFxuICAgICAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgICAgIHNpemluZ0Vycm9yOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9DaGVja2luZyB0byBzZWUgaWYgYWxsIGVsZW1lbnRzIGhhdmUgYSBkZWZpbmVkIG1heFxuICAgICAgY29uc3QgbWF4aW11bVNpemVQb3NzaWJsZSA9XG4gICAgICAgIGNvbmZpZ0NoZWNrcy5maWx0ZXIoY2hlY2sgPT4gY2hlY2subWF4U2NhbGVGYWN0b3IgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubGVuZ3RoID09PSAwO1xuICAgICAgLy9JZiBhbGwgZWxlbWVudHMgaGF2ZSBhIGRlZmluZWQgbWF4LCBhbmQgdGhhdCBtYXggaXMgbGVzcyB0aGFuIHRoZSBzaXplIHdlJ3JlIHRyeWluZyB0byBncm93IHRvLCBpdCdzIGltcG9zc2libGVcbiAgICAgIGlmIChtYXhpbXVtU2l6ZVBvc3NpYmxlICYmIGNhbGNNYXhTaXplIDwgYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgcHJvdmlkZWQgbWF4aW11bSBlbGVtZW50IHdpZHRocyBtZWFuIHRoZSBjaGFydCBjYW5ub3QgZGlzcGxheSBhdCB0aGlzIGxhcmdlIG9mIGEgc2l6ZScsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmFyU2l6ZTogMCxcbiAgICAgICAgICBiYXJDbHVzdGVyR2FwOiAwLFxuICAgICAgICAgIGJ1Y2tldEdhcDogMCxcbiAgICAgICAgICBvdXRlckdhcDogMCxcbiAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgc2l6aW5nRXJyb3I6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvL1NjYWxpbmcgdXBcbiAgICAgIGxldCBmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKCFmaW5hbFNjYWxpbmdGYWN0b3JGb3VuZCkge1xuICAgICAgICBjb25zdCBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50ID0gTWF0aC5taW4oXG4gICAgICAgICAgLi4uY29uZmlnQ2hlY2tzXG4gICAgICAgICAgICAubWFwKGNoZWNrID0+IGNoZWNrLm1heFNjYWxlRmFjdG9yKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHZhbCk6IHZhbCBpcyBudW1iZXIgPT5cbiAgICAgICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJiAhKHZhbCA8PSBjdXJyU2NhbGluZ0ZhY3RvciksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdTY2FsZUZhY3RvclNpemUgPSBnZXRTdW1Gb3JTY2FsZVZhbHVlKFxuICAgICAgICAgIGNvbmZpZ0NoZWNrcyxcbiAgICAgICAgICBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXdTY2FsZUZhY3RvclNpemUgPj0gYm91bmRpbmdEaW1lbnNpb24gfHxcbiAgICAgICAgICBuZXh0U2NhbGVGYWN0b3JCcmVha3BvaW50ID09PSBJbmZpbml0eVxuICAgICAgICApIHtcbiAgICAgICAgICAvL1RoZXJlJ3MgYSBzY2FsZSB2YWx1ZSB0aGF0J2xsIHdvcmsgYmV0d2VlbiB0aGUgY3VyciBhbmQgbmV3IHZhbHVlc1xuICAgICAgICAgIC8vVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCdsbCBqdXN0IGJlIGF0IHRoZWlyIG1heFxuICAgICAgICAgIGNvbnN0IG5vblNjYWxlYWJsZVZhbHVlcyA9IGNvbmZpZ0NoZWNrcy5maWx0ZXIoXG4gICAgICAgICAgICBjaGVjayA9PlxuICAgICAgICAgICAgICBjaGVjay5tYXhTY2FsZUZhY3RvciAmJiBjaGVjay5tYXhTY2FsZUZhY3RvciA8PSBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCBjYW4gc3RpbGwgYmUgc2NhbGVkIHVwXG4gICAgICAgICAgY29uc3Qgc2NhbGVhYmxlVmFsdWVzID0gY29uZmlnQ2hlY2tzLmZpbHRlcihcbiAgICAgICAgICAgIGNoZWNrID0+XG4gICAgICAgICAgICAgICFjaGVjay5tYXhTY2FsZUZhY3RvciB8fCBjaGVjay5tYXhTY2FsZUZhY3RvciA+IGN1cnJTY2FsaW5nRmFjdG9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ1NwYWNlID1cbiAgICAgICAgICAgIGJvdW5kaW5nRGltZW5zaW9uIC1cbiAgICAgICAgICAgIGdldFN1bUZvclNjYWxlVmFsdWUobm9uU2NhbGVhYmxlVmFsdWVzLCBjdXJyU2NhbGluZ0ZhY3Rvcik7XG4gICAgICAgICAgY3VyclNjYWxpbmdGYWN0b3IgPVxuICAgICAgICAgICAgd29ya2luZ1NwYWNlIC8gZ2V0U3VtRm9yU2NhbGVWYWx1ZShzY2FsZWFibGVWYWx1ZXMsIDEpO1xuICAgICAgICAgIGZpbmFsU2NhbGluZ0ZhY3RvckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvL09uZSBvZiB0aGUgZWxlbWVudHMgaXMgaGl0dGluZyB0aGVpciBtYXhTY2FsZUZhY3Rvciwgc28gZm9yIHNpbXBsaWNpdHkgd2UnbGwganVzdCBnbyBhZ2FpblxuICAgICAgICAgIGN1cnJTY2FsaW5nRmFjdG9yID0gbmV4dFNjYWxlRmFjdG9yQnJlYWtwb2ludDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBiYXJTaXplID0gZ2V0U2NhbGVkRWxlbWVudFNpemUoYmFyU2l6ZUNvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgIGNvbnN0IGJhckNsdXN0ZXJHYXAgPSBnZXRTY2FsZWRFbGVtZW50U2l6ZShcbiAgICAgIGJhckNsdXN0ZXJHYXBDb25maWcsXG4gICAgICBjdXJyU2NhbGluZ0ZhY3RvcixcbiAgICApO1xuICAgIGNvbnN0IGJ1Y2tldEdhcCA9IGdldFNjYWxlZEVsZW1lbnRTaXplKGJ1Y2tldEdhcENvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXJTaXplLFxuICAgICAgYmFyQ2x1c3RlckdhcCxcbiAgICAgIGJ1Y2tldEdhcCxcbiAgICAgIG91dGVyR2FwOiBnZXRTY2FsZWRFbGVtZW50U2l6ZShvdXRlckdhcENvbmZpZywgY3VyclNjYWxpbmdGYWN0b3IpLFxuICAgICAgc3RhcnRQYWRkaW5nOiBnZXRTY2FsZWRFbGVtZW50U2l6ZShzdGFydFBhZGRpbmdDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgIGVuZFBhZGRpbmc6IGdldFNjYWxlZEVsZW1lbnRTaXplKGVuZFBhZGRpbmdDb25maWcsIGN1cnJTY2FsaW5nRmFjdG9yKSxcbiAgICAgIHRvdGFsU2l6ZTogYm91bmRpbmdEaW1lbnNpb24sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZURhdGFBeGlzVmFsdWVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIHNjYWxpbmdDb25maWc6IE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGVsZW1lbnRTY2FsZXM6IFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0U2l6aW5nOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBwaXBlVHJhbnNmb3JtOiAoKHZhbHVlOiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgICBkYXRlRm9ybWF0OiAoKGRhdGU6IERhdGUpID0+IHN0cmluZykgfCBudWxsLFxuICApOiB7XG4gICAgc3RhcnRQYWRkaW5nOiBudW1iZXI7XG4gICAgZW5kUGFkZGluZzogbnVtYmVyO1xuICAgIGxlZnRCdWNrZXRMYWJlbDogbnVtYmVyO1xuICAgIGRhdGFMYWJlbFRleHRTaXplOiBudW1iZXI7XG4gICAgZGF0YUxhYmVsUGFkZGluZzogbnVtYmVyO1xuICAgIGZvbnRTaXplOiBudW1iZXI7XG4gICAgc2l6ZUZvckRhdGE6IG51bWJlcjtcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcbiAgICBidWNrZXRMYWJlbFRleHRTaXplOiBudW1iZXI7XG4gICAgc2l6aW5nRXJyb3I/OiBib29sZWFuO1xuICB9IHtcbiAgICBjb25zdCBjaGFydERhdGFEaXJlY3Rpb24gPSBnZXRDaGFydERhdGFEaXJlY3Rpb24oY29uZmlnKTtcbiAgICBjb25zdCBib3VuZGluZ0RpbWVuc2lvbiA9XG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IGRpbWVuc2lvbnMud2lkdGhcbiAgICAgICAgOiBkaW1lbnNpb25zLmhlaWdodDtcbiAgICBjb25zdCBheGlzU2NhbGUgPVxuICAgICAgY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyBzY2FsaW5nQ29uZmlnLmhvcml6b250YWxBeGlzU2NhbGVcbiAgICAgICAgOiBzY2FsaW5nQ29uZmlnLnZlcnRpY2FsQXhpc1NjYWxlO1xuXG4gICAgY29uc3Qgc3RhcnRQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0UGFkZGluZycgOiAndG9wUGFkZGluZycsXG4gICAgKTtcbiAgICBjb25zdCBlbmRQYWRkaW5nQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICBjaGFydERhdGFEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdyaWdodFBhZGRpbmcnIDogJ2JvdHRvbVBhZGRpbmcnLFxuICAgICk7XG4gICAgY29uc3QgbGVmdExhYmVsQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnbGVmdEJ1Y2tldExhYmVsJyxcbiAgICApO1xuICAgIGNvbnN0IGRhdGFMYWJlbFBhZGRpbmdDb25maWcgPSBnZXRFbGVtZW50U2NhbGluZ0luZm8oXG4gICAgICBlbGVtZW50U2NhbGVzLFxuICAgICAgZGVmYXVsdFNpemluZyxcbiAgICAgICdkYXRhTGFiZWxQYWRkaW5nJyxcbiAgICApO1xuICAgIGNvbnN0IGZvbnRTaXplQ29uZmlnID0gZ2V0RWxlbWVudFNjYWxpbmdJbmZvKFxuICAgICAgZWxlbWVudFNjYWxlcyxcbiAgICAgIGRlZmF1bHRTaXppbmcsXG4gICAgICAnZm9udFNpemUnLFxuICAgICk7XG4gICAgY29uc3QgZm9udFNpemUgPSBmb250U2l6ZUNvbmZpZy50YXJnZXQ7XG4gICAgY29uc3QgZGF0YUxhYmVsVGV4dFNpemluZyA9IGdldERhdGFMYWJlbFNpemUoZGF0YSwgcGlwZVRyYW5zZm9ybSwgZm9udFNpemUpO1xuICAgIC8vV2UgYWx3YXlzIGNhbGN1bGF0ZSBhbmQgcmV0dXJuIGRhdGFMYWJlbFRleHRTaXplLCBzaW5jZSBpdCdzIGFsc28gdXNlZCBmb3IgZGV0ZXJtaW5nIGF4aXMgbGFiZWwgc2l6ZVxuICAgIGNvbnN0IGRhdGFMYWJlbFRleHRTaXplID1cbiAgICAgIGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gZGF0YUxhYmVsVGV4dFNpemluZy5ob3Jpem9udGFsXG4gICAgICAgIDogZGF0YUxhYmVsVGV4dFNpemluZy52ZXJ0aWNhbDtcbiAgICBjb25zdCBkYXRhTGFiZWxGaXhlZFNpemUgPVxuICAgICAgZGF0YUxhYmVsVGV4dFNpemUgKiBnZXREYXRhTGFiZWxTaXppbmdDb3VudChkYXRhLCBjb25maWcpLnRvdGFsO1xuICAgIGNvbnN0IGJ1Y2tldExhYmVsVGV4dFNpemUgPSBnZXRCdWNrZXRMYWJlbFNpemUoZGF0YSwgZm9udFNpemUsIGRhdGVGb3JtYXQpO1xuICAgIC8vRmxvdyBjaGFydHMgaGF2ZSBhIGRhdGEgbGFiZWwgYWJvdmUgZWFjaCBzdWItYnVja2V0XG4gICAgY29uc3QgZmxvd0xhYmVsU2l6ZSA9IGRhdGFMYWJlbFRleHRTaXplICsgZGF0YUxhYmVsUGFkZGluZ0NvbmZpZy50YXJnZXQ7XG5cbiAgICBjb25zdCBzdGFydFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgc3RhcnRQYWRkaW5nQ29uZmlnLFxuICAgICAgMSxcbiAgICApO1xuICAgIGNvbnN0IGVuZFBhZGRpbmdUb3RhbFNpemUgPSBkZXRlcm1pbmVQb3NzaWJsZVNpemVzT2ZFbGVtZW50KFxuICAgICAgZW5kUGFkZGluZ0NvbmZpZyxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhTGFiZWxQYWRkaW5nVG90YWxTaXplID0gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICAgIGRhdGFMYWJlbFBhZGRpbmdDb25maWcsXG4gICAgICBnZXREYXRhTGFiZWxTaXppbmdDb3VudChkYXRhLCBjb25maWcpLnRvdGFsLFxuICAgICk7XG5cbiAgICBsZXQgbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSA9IGxlZnRMYWJlbENvbmZpZy50YXJnZXQ7XG4gICAgaWYgKGNoYXJ0RGF0YURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIGRhdGEudHlwZSA9PT0gJ2xhYmVsZWQnKSB7XG4gICAgICAvL0ZvciBob3Jpem9udGFsIGJhcnMsIHRoZSBzdGFydCBwYWRkaW5nIHdpbGwgc2NhbGUgYmFzZWQgb24gdGhlIGJ1Y2tldCBsYWJlbHNcbiAgICAgIGNvbnN0IGxvbmdlc3RMYWJlbExlbmd0aCA9XG4gICAgICAgIE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LmxhYmVsLmxlbmd0aCkpICpcbiAgICAgICAgKFdJRFRIX1BFUl9MRVRURVIgKiAoZm9udFNpemUgLyBERUZBVUxUX0ZPTlRfU0laRSkpO1xuICAgICAgY29uc3QgbWluTGVuZ3RoID0gbGVmdExhYmVsQ29uZmlnLm1pblxuICAgICAgICA/IE1hdGgubWF4KGxvbmdlc3RMYWJlbExlbmd0aCwgbGVmdExhYmVsQ29uZmlnLm1pbilcbiAgICAgICAgOiBsb25nZXN0TGFiZWxMZW5ndGg7XG4gICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplID0gbGVmdExhYmVsQ29uZmlnLm1heFxuICAgICAgICA/IE1hdGgubWluKG1pbkxlbmd0aCwgbGVmdExhYmVsQ29uZmlnLm1heClcbiAgICAgICAgOiBsb25nZXN0TGFiZWxMZW5ndGg7XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkU2l6ZVZhbHVlID1cbiAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgK1xuICAgICAgZGF0YUxhYmVsRml4ZWRTaXplICtcbiAgICAgIHN0YXJ0UGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgZW5kUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQgK1xuICAgICAgZGF0YUxhYmVsUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQ7XG4gICAgaWYgKGZpeGVkU2l6ZVZhbHVlID4gYm91bmRpbmdEaW1lbnNpb24pIHtcbiAgICAgIC8vU2VlIGlmIGZ1cnRoZXIgdHJ1bmNhdGluZyB0aGUgbGFiZWwgY2FuIGhlbHBcbiAgICAgIGlmIChcbiAgICAgICAgbGVmdExhYmVsQ29uZmlnLm1pbiAmJlxuICAgICAgICBmaXhlZFNpemVWYWx1ZSAtIGJvdW5kaW5nRGltZW5zaW9uIDxcbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplIC0gbGVmdExhYmVsQ29uZmlnLm1pblxuICAgICAgKSB7XG4gICAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgPVxuICAgICAgICAgIGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUgLSAoZml4ZWRTaXplVmFsdWUgLSBib3VuZGluZ0RpbWVuc2lvbik7XG4gICAgICAgIGZpeGVkU2l6ZVZhbHVlID1cbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWxBY3R1YWxTaXplICtcbiAgICAgICAgICBzdGFydFBhZGRpbmdUb3RhbFNpemUudGFyZ2V0ICtcbiAgICAgICAgICBlbmRQYWRkaW5nVG90YWxTaXplLnRhcmdldCArXG4gICAgICAgICAgZGF0YUxhYmVsUGFkZGluZ1RvdGFsU2l6ZS50YXJnZXQ7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBheGlzU2NhbGUgIT09ICdncm93JyAmJlxuICAgICAgICAoYXhpc1NjYWxlICE9PSAnbm8tc2NhbGUnIHx8IHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnKVxuICAgICAgKSB7XG4gICAgICAgIC8vR3Jvd2luZyBhbmQgbm9uLWZpdHRpbmcgZGF0YSBheGVzIGNhbiBzY3JvbGwgaW5zdGVhZFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBwcm92aWRlZCBlbGVtZW50IHNpemVzIG1lYW4gdGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoaXMgc21hbGwgb2YgYSBzaXplJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWw6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogMCxcbiAgICAgICAgICBmb250U2l6ZTogMCxcbiAgICAgICAgICBzaXplRm9yRGF0YTogMCxcbiAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZTogMCxcbiAgICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgYXhpc1NjYWxlID09PSAnc2NhbGUtdG8tZml0JyB8fFxuICAgICAgYXhpc1NjYWxlID09PSAnZ3JvdycgfHxcbiAgICAgIGF4aXNTY2FsZSA9PT0gJ3NocmluaycgfHxcbiAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnXG4gICAgKSB7XG4gICAgICAvL0EgZ3Jvd2luZyBkYXRhIGF4aXMgc2Nyb2xscyByYXRoZXIgdGhhbiBzcXVlZXppbmcgdGhlIGRhdGEgYmVsb3cgaXRzIG1pbmltdW0gc2l6ZVxuICAgICAgY29uc3QgYXZhaWxhYmxlU2l6ZSA9XG4gICAgICAgIGF4aXNTY2FsZSA9PT0gJ2dyb3cnXG4gICAgICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAgICAgYm91bmRpbmdEaW1lbnNpb24gLSBmaXhlZFNpemVWYWx1ZSxcbiAgICAgICAgICAgICAgZ2V0TWluaW11bUdyb3duRGF0YVNpemUoXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgYm91bmRpbmdEaW1lbnNpb24sXG4gICAgICAgICAgICAgICAgZmxvd0xhYmVsU2l6ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGJvdW5kaW5nRGltZW5zaW9uIC0gZml4ZWRTaXplVmFsdWU7XG4gICAgICBjb25zdCBzaXplRm9yRGF0YSA9IGdldEZpdHRlZERhdGFTaXplKFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGF2YWlsYWJsZVNpemUsXG4gICAgICAgIGZsb3dMYWJlbFNpemUsXG4gICAgICApO1xuICAgICAgaWYgKHNpemVGb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIHByb3ZpZGVkIG1pbmltdW0gZGF0YSBlbGVtZW50IHNpemUgbWVhbnMgdGhlIGNoYXJ0IGNhbm5vdCBkaXNwbGF5IGF0IHRoaXMgc21hbGwgb2YgYSBzaXplJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydFBhZGRpbmc6IDAsXG4gICAgICAgICAgZW5kUGFkZGluZzogMCxcbiAgICAgICAgICBsZWZ0QnVja2V0TGFiZWw6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsVGV4dFNpemU6IDAsXG4gICAgICAgICAgZGF0YUxhYmVsUGFkZGluZzogMCxcbiAgICAgICAgICBmb250U2l6ZTogMCxcbiAgICAgICAgICBzaXplRm9yRGF0YTogMCxcbiAgICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZTogMCxcbiAgICAgICAgICBzaXppbmdFcnJvcjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0UGFkZGluZzogc3RhcnRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZW5kUGFkZGluZzogZW5kUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGxlZnRCdWNrZXRMYWJlbDogbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSxcbiAgICAgICAgZGF0YUxhYmVsVGV4dFNpemUsXG4gICAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBmb250U2l6ZTogZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICAgICBzaXplRm9yRGF0YSxcbiAgICAgICAgdG90YWxTaXplOiBmaXhlZFNpemVWYWx1ZSArIGF2YWlsYWJsZVNpemUsXG4gICAgICAgIGJ1Y2tldExhYmVsVGV4dFNpemUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHByaW1hcnlEYXRhTWluLFxuICAgICAgcHJpbWFyeURhdGFNYXgsXG4gICAgICBzY2FsZURvbWFpbk11bHRpcGxlRm9yTWF4LFxuICAgICAgc2NhbGVEb21haW5NdWx0aXBsZUZvck5lZyxcbiAgICB9ID0gY2FsY0RhdGFTY2FsaW5nVmFsdWVzKGRhdGEsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBlZmZlY3RpdmVQcmltYXJ5TWF4Rm9yU2NhbGluZyA9XG4gICAgICBwcmltYXJ5RGF0YU1heCAqIHNjYWxlRG9tYWluTXVsdGlwbGVGb3JNYXg7XG4gICAgY29uc3QgZWZmZWN0aXZlUHJpbWFyeU1pbkZvclNjYWxpbmcgPVxuICAgICAgcHJpbWFyeURhdGFNaW4gPCAwID8gcHJpbWFyeURhdGFNaW4gKiBzY2FsZURvbWFpbk11bHRpcGxlRm9yTmVnIDogMDtcblxuICAgIGlmIChzY2FsaW5nQ29uZmlnLmRhdGFTY2FsZS50eXBlID09PSAnbWF4Jykge1xuICAgICAgY29uc3QgZGF0YVNpemUgPVxuICAgICAgICBzY2FsaW5nQ29uZmlnLmRhdGFTY2FsZS52YWx1ZSAqXG4gICAgICAgICgoZWZmZWN0aXZlUHJpbWFyeU1heEZvclNjYWxpbmcgLSBlZmZlY3RpdmVQcmltYXJ5TWluRm9yU2NhbGluZykgL1xuICAgICAgICAgIGVmZmVjdGl2ZVByaW1hcnlNYXhGb3JTY2FsaW5nKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0UGFkZGluZzogc3RhcnRQYWRkaW5nQ29uZmlnLnRhcmdldCxcbiAgICAgICAgZW5kUGFkZGluZzogZW5kUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICAgIGxlZnRCdWNrZXRMYWJlbDogbGVmdEJ1Y2tldExhYmVsQWN0dWFsU2l6ZSxcbiAgICAgICAgZGF0YUxhYmVsVGV4dFNpemUsXG4gICAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgICBmb250U2l6ZTogZm9udFNpemVDb25maWcudGFyZ2V0LFxuICAgICAgICBzaXplRm9yRGF0YTogZGF0YVNpemUsXG4gICAgICAgIHRvdGFsU2l6ZTpcbiAgICAgICAgICBnZXRTY2FsZWREYXRhVG90YWxTaXplKGRhdGEsIGNvbmZpZywgZGF0YVNpemUsIGZsb3dMYWJlbFNpemUpICtcbiAgICAgICAgICBmaXhlZFNpemVWYWx1ZSxcbiAgICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YVNpemUgPVxuICAgICAgKChlZmZlY3RpdmVQcmltYXJ5TWF4Rm9yU2NhbGluZyAtIGVmZmVjdGl2ZVByaW1hcnlNaW5Gb3JTY2FsaW5nKSAvXG4gICAgICAgIHNjYWxpbmdDb25maWcuZGF0YVNjYWxlLnJhdGlvLnZhbHVlKSAqXG4gICAgICBzY2FsaW5nQ29uZmlnLmRhdGFTY2FsZS5yYXRpby5weDtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRQYWRkaW5nOiBzdGFydFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgZW5kUGFkZGluZzogZW5kUGFkZGluZ0NvbmZpZy50YXJnZXQsXG4gICAgICBsZWZ0QnVja2V0TGFiZWw6IGxlZnRCdWNrZXRMYWJlbEFjdHVhbFNpemUsXG4gICAgICBkYXRhTGFiZWxUZXh0U2l6ZSxcbiAgICAgIGRhdGFMYWJlbFBhZGRpbmc6IGRhdGFMYWJlbFBhZGRpbmdDb25maWcudGFyZ2V0LFxuICAgICAgZm9udFNpemU6IGZvbnRTaXplQ29uZmlnLnRhcmdldCxcbiAgICAgIHNpemVGb3JEYXRhOiBkYXRhU2l6ZSxcbiAgICAgIHRvdGFsU2l6ZTpcbiAgICAgICAgZ2V0U2NhbGVkRGF0YVRvdGFsU2l6ZShkYXRhLCBjb25maWcsIGRhdGFTaXplLCBmbG93TGFiZWxTaXplKSArXG4gICAgICAgIGZpeGVkU2l6ZVZhbHVlLFxuICAgICAgYnVja2V0TGFiZWxUZXh0U2l6ZSxcbiAgICB9O1xuICB9XG5cbiAgLy9UaGUgbGVhc3Qgc3BhY2UgYSBncm93aW5nIGRhdGEgYXhpcyBnaXZlcyB0aGUgZGF0YTogYSBwb3J0aW9uIG9mIHRoZSBwcm92aWRlZCBzaXplLCBvbiB0b3Agb2YgdGhlIHNwYWNlIHRoYXRcbiAgLy8gZWxlbWVudHMgZW5sYXJnZWQgdG8gdGhlIG1pbmltdW0gc2l6ZSBuZWVkIChzbyB0aGUgZGF0YSBzdGF5cyBwcm9wb3J0aW9uYWwgcmF0aGVyIHRoYW4gYWxsIGJlaW5nIHRoZSBtaW5pbXVtKVxuICBmdW5jdGlvbiBnZXRNaW5pbXVtR3Jvd25EYXRhU2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBib3VuZGluZ0RpbWVuc2lvbjogbnVtYmVyLFxuICAgIGxhYmVsU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IG1pbmltdW1FbGVtZW50c1NpemUgPVxuICAgICAgZGF0YS50eXBlID09PSAnZmxvdy1wcm9jZXNzZWQnXG4gICAgICAgID8gZ2V0TWF4Rmxvd0J1Y2tldFNpemUoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKSxcbiAgICAgICAgICAgIGxhYmVsU2l6ZSxcbiAgICAgICAgICApIC0gZ2V0Rmxvd01pZExhYmVsU2l6ZShkYXRhLCBsYWJlbFNpemUpXG4gICAgICAgIDogMDtcbiAgICByZXR1cm4gYm91bmRpbmdEaW1lbnNpb24gKiBHUk9XTl9EQVRBX01JTklNVU1fUkFUSU8gKyBtaW5pbXVtRWxlbWVudHNTaXplO1xuICB9XG5cbiAgLy9Gb3IgZmxvdyBjaGFydHMsIGZpbmRzIHRoZSBzaXplIHRoZSBkYXRhIHNjYWxlIHNob3VsZCBtYXAgdG8gc28gdGhhdCBldmVyeSBidWNrZXQgKGluY2x1ZGluZyBpdHMgb3duIGRhdGEgbGFiZWxzLFxuICAvLyBhbmQgYW55IGVsZW1lbnRzIGVubGFyZ2VkIHRvIHRoZSBtaW5pbXVtIHNpemUpIGZpdHMgaW4gdGhlIGF2YWlsYWJsZSBzaXplXG4gIC8vUmV0dXJucyBudWxsIGlmIHRoZSBtaW5pbXVtIHNpemVzIGFsb25lIGNhbid0IGZpdFxuICBmdW5jdGlvbiBnZXRGaXR0ZWREYXRhU2l6ZShcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhdmFpbGFibGVTaXplOiBudW1iZXIsXG4gICAgbGFiZWxTaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGlmIChkYXRhLnR5cGUgIT09ICdmbG93LXByb2Nlc3NlZCcpIHtcbiAgICAgIHJldHVybiBhdmFpbGFibGVTaXplO1xuICAgIH1cbiAgICBjb25zdCBkYXRhTWF4ID0gTWF0aC5tYXgoLi4uZGF0YS54Lm1hcCh4ID0+IHgudG90YWxDb3VudCkpO1xuICAgIGlmIChkYXRhTWF4IDw9IDApIHtcbiAgICAgIHJldHVybiBhdmFpbGFibGVTaXplO1xuICAgIH1cbiAgICBjb25zdCBtaW5pbXVtU2l6ZSA9IGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKTtcbiAgICBjb25zdCBidWNrZXRBdmFpbGFibGVTaXplID1cbiAgICAgIGF2YWlsYWJsZVNpemUgKyBnZXRGbG93TWlkTGFiZWxTaXplKGRhdGEsIGxhYmVsU2l6ZSk7XG4gICAgLy9DYWxjdWxhdGUgd2hhdCB0aGUgc2l6aW5nIHdvdWxkIG5lZWQgdG8gYmUgZm9yIGVhY2ggaW5kaXZpZHVhbCBjb2x1bW4sXG4gICAgLy8gIHRha2luZyB0aGUgdmFsdWUgdGhhdCBpcyBtb3N0IHJlc3RyaWN0aXZlLiBOb3QgYXBwbHlpbmcgbWluaW11bSBzaXplIHlldFxuICAgIGNvbnN0IHVuZW5sYXJnZWRSYXRpbyA9IE1hdGgubWluKFxuICAgICAgLi4uZGF0YS54XG4gICAgICAgIC5maWx0ZXIoYnVja2V0ID0+IGJ1Y2tldC50b3RhbENvdW50ID4gMClcbiAgICAgICAgLm1hcChcbiAgICAgICAgICBidWNrZXQgPT5cbiAgICAgICAgICAgIChidWNrZXRBdmFpbGFibGVTaXplIC0gKGJ1Y2tldC5zdWJCdWNrZXRzLmxlbmd0aCAtIDEpICogbGFiZWxTaXplKSAvXG4gICAgICAgICAgICBidWNrZXQudG90YWxDb3VudCxcbiAgICAgICAgKSxcbiAgICApO1xuICAgIGlmIChcbiAgICAgIG1pbmltdW1TaXplID09PSAwIHx8XG4gICAgICBnZXRNYXhGbG93QnVja2V0U2l6ZShkYXRhLCB1bmVubGFyZ2VkUmF0aW8sIG1pbmltdW1TaXplLCBsYWJlbFNpemUpIDw9XG4gICAgICAgIGJ1Y2tldEF2YWlsYWJsZVNpemVcbiAgICApIHtcbiAgICAgIHJldHVybiB1bmVubGFyZ2VkUmF0aW8gKiBkYXRhTWF4O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBnZXRNYXhGbG93QnVja2V0U2l6ZShkYXRhLCAwLCBtaW5pbXVtU2l6ZSwgbGFiZWxTaXplKSA+XG4gICAgICBidWNrZXRBdmFpbGFibGVTaXplXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy9Ob3csIHdlIGFwcGx5IG1pbmltdW0gc2l6ZSB0byB0aGUgYmFycyB0byBjYWxjdWxhdGUgb3VyIHRydWUgcmF0aW8gKGZvdW5kIHRocm91Z2ggYmluYXJ5IHNlYXJjaClcbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgaGlnaCA9IHVuZW5sYXJnZWRSYXRpbztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspIHtcbiAgICAgIGNvbnN0IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7XG4gICAgICBpZiAoXG4gICAgICAgIGdldE1heEZsb3dCdWNrZXRTaXplKGRhdGEsIG1pZCwgbWluaW11bVNpemUsIGxhYmVsU2l6ZSkgPlxuICAgICAgICBidWNrZXRBdmFpbGFibGVTaXplXG4gICAgICApIHtcbiAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvdyA9IG1pZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvdyAqIGRhdGFNYXg7XG4gIH1cblxuICAvL1RoZSBzaXplIG5lZWRlZCBhbG9uZyB0aGUgZGF0YSBheGlzIGJleW9uZCB0aGUgZml4ZWQgc2l6ZVxuICAvL0ZvciBmbG93IGNoYXJ0cywgdGhpcyBpcyBiYXNlZCBvbiB0aGUgdGFsbGVzdCBidWNrZXQgKGluY2x1ZGluZyBpdHMgb3duIGRhdGEgbGFiZWxzIGFuZCBhbnkgZW5sYXJnZWQgZWxlbWVudHMpLFxuICAvLyByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgYnVja2V0IHdpdGggdGhlIG1vc3QgZGF0YSBhbHNvIGhhcyB0aGUgbW9zdCBzdWItYnVja2V0c1xuICBmdW5jdGlvbiBnZXRTY2FsZWREYXRhVG90YWxTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGRhdGFTaXplOiBudW1iZXIsXG4gICAgbGFiZWxTaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgcmV0dXJuIGRhdGFTaXplO1xuICAgIH1cbiAgICBjb25zdCBkYXRhTWF4ID0gTWF0aC5tYXgoLi4uZGF0YS54Lm1hcCh4ID0+IHgudG90YWxDb3VudCkpO1xuICAgIGlmIChkYXRhTWF4IDw9IDApIHtcbiAgICAgIHJldHVybiBkYXRhU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGdldE1heEZsb3dCdWNrZXRTaXplKFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhU2l6ZSAvIGRhdGFNYXgsXG4gICAgICAgIGdldE1pbmltdW1EYXRhRWxlbWVudFNpemUoY29uZmlnKSxcbiAgICAgICAgbGFiZWxTaXplLFxuICAgICAgKSAtIGdldEZsb3dNaWRMYWJlbFNpemUoZGF0YSwgbGFiZWxTaXplKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREYXRhTGFiZWxTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIHBpcGVUcmFuc2Zvcm06ICgodmFsdWU6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4pID0+IHN0cmluZykgfCBudWxsLFxuICAgIGZvbnRTaXplOiBudW1iZXIsXG4gICk6IHsgaG9yaXpvbnRhbDogbnVtYmVyOyB2ZXJ0aWNhbDogbnVtYmVyIH0ge1xuICAgIGxldCBub3JtSG9yaXpvbnRhbE1heExlbmd0aCA9IDA7XG4gICAgbGV0IG5vcm1TdXBwTWF4TGVuZ3RoID0gMDtcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmxvdy1wcm9jZXNzZWQnICYmIHBpcGVUcmFuc2Zvcm0gIT09IG51bGwpIHtcbiAgICAgIG5vcm1Ib3Jpem9udGFsTWF4TGVuZ3RoID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLmRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAuLi55LnZhbHVlcy5tYXAoKHZhbCwgeEluZGV4KSA9PlxuICAgICAgICAgICAgICBjaGVja0xhYmVsTGVuZ3RoKFxuICAgICAgICAgICAgICAgIHBpcGVUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgICBjaGVja0lmU2Vjb25kYXJ5KGRhdGEsIHlJbmRleCwgeEluZGV4LCBmYWxzZSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBub3JtU3VwcE1heExlbmd0aCA9IE1hdGgubWF4KFxuICAgICAgICAuLi4oZGF0YS5zdXBwbGVtZW50YXJ5WXMgPz8gW10pLm1hcCgoeSwgeUluZGV4KSA9PlxuICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgLi4ueS52YWx1ZXMubWFwKCh2YWwsIHhJbmRleCkgPT5cbiAgICAgICAgICAgICAgY2hlY2tMYWJlbExlbmd0aChcbiAgICAgICAgICAgICAgICBwaXBlVHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tJZlNlY29uZGFyeShkYXRhLCB5SW5kZXgsIHhJbmRleCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkYXRhLnR5cGUgPT09ICdmbG93LXByb2Nlc3NlZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvcml6b250YWw6IE1hdGgubWF4KG5vcm1Ib3Jpem9udGFsTWF4TGVuZ3RoLCBub3JtU3VwcE1heExlbmd0aCksXG4gICAgICAgIHZlcnRpY2FsOiBmb250U2l6ZSAqIDIsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaG9yaXpvbnRhbDogTWF0aC5tYXgobm9ybUhvcml6b250YWxNYXhMZW5ndGgsIG5vcm1TdXBwTWF4TGVuZ3RoKSxcbiAgICAgIHZlcnRpY2FsOiBmb250U2l6ZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnVja2V0TGFiZWxTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NEYXRhLFxuICAgIGZvbnRTaXplOiBudW1iZXIsXG4gICAgZGF0ZUZvcm1hdDogKChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpIHwgbnVsbCxcbiAgKSB7XG4gICAgaWYgKGRhdGVGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdsYWJlbGVkJykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgICAgLi4uZGF0YS54Lm1hcCh4ID0+IGNoZWNrTGFiZWxMZW5ndGgoeC5sYWJlbCwgZm9udFNpemUpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAndGltZXNlcmllcycpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgIC4uLmRhdGEueC5tYXAoeCA9PlxuICAgICAgICAgICAgY2hlY2tMYWJlbExlbmd0aChkYXRlRm9ybWF0KG5ldyBEYXRlKHgpKSwgZm9udFNpemUpLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tMYWJlbExlbmd0aCh2YWx1ZTogc3RyaW5nLCBmb250U2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwZXJpb2RDb3VudCA9ICh2YWx1ZS5tYXRjaCgvXFwuL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgY29uc3Qgc2xhc2hDb3VudCA9ICh2YWx1ZS5tYXRjaCgvXFwvL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgY29uc3QgZm9udFNjYWxlRmFjdG9yID0gZm9udFNpemUgLyBERUZBVUxUX0ZPTlRfU0laRTtcbiAgICByZXR1cm4gKFxuICAgICAgKHZhbHVlLmxlbmd0aCAtIChwZXJpb2RDb3VudCArIHNsYXNoQ291bnQpKSAqXG4gICAgICAgIChXSURUSF9QRVJfTlVNQkVSICogZm9udFNjYWxlRmFjdG9yKSArXG4gICAgICBwZXJpb2RDb3VudCAqIChXSURUSF9QRVJfUEVSSU9EICogZm9udFNjYWxlRmFjdG9yKSArXG4gICAgICBzbGFzaENvdW50ICogKFdJRFRIX1BFUl9TTEFTSCAqIGZvbnRTY2FsZUZhY3RvcilcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQmFyVHlwZSh0eXBlOiBDaGFydC5DaGFydFR5cGUpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSAnYmFyJyB8fFxuICAgICAgdHlwZSA9PT0gJ2hvcml6b250YWwtYmFyJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dhdGVyZmFsbCcgfHxcbiAgICAgIHR5cGUgPT09ICdmdW5uZWwnXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy9Pbmx5IGJhci10eXBlIGFuZCBmbG93IGNoYXJ0cyBoYXZlIGRpc2NyZXRlIGRhdGEgZWxlbWVudHMgdGhhdCB0aGUgbWluaW11bSBzaXplIGFwcGxpZXMgdG9cbiAgZnVuY3Rpb24gZ2V0TWluaW11bURhdGFFbGVtZW50U2l6ZShjb25maWc6IENvbmZpZyk6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnR5cGUgPT09ICdkb251dCcgfHxcbiAgICAgIGNvbmZpZy50eXBlID09PSAnbGluZScgfHxcbiAgICAgIGNvbmZpZy50eXBlID09PSAnYXJlYSdcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnLnNjYWxpbmdDb25maWc/LmRhdGFTY2FsZT8ubWluaW11bURhdGFFbGVtZW50U2l6ZSA/PyAwO1xuICB9XG5cbiAgLy9BbnkgZGF0YSBlbGVtZW50IHdpdGggYSBub24temVybyB2YWx1ZSBpcyBrZXB0IGF0IG9yIGFib3ZlIHRoZSBtaW5pbXVtIHNpemVcbiAgZnVuY3Rpb24gYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgIHNpemU6IG51bWJlcixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIG1pbmltdW1TaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSAwID8gTWF0aC5tYXgoc2l6ZSwgbWluaW11bVNpemUpIDogc2l6ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZsb3dTdWJCdWNrZXRTaXplcyhcbiAgICBzdWJCdWNrZXQ6IEZsb3dTdWJCdWNrZXQsXG4gICAgdmFsdWVUb1NpemU6ICh2YWx1ZTogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgbWluaW11bVNpemU6IG51bWJlcixcbiAgKToge1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIGNvbnRpbnVpbmdTaXplOiBudW1iZXI7XG4gICAgY29ubmVjdGlvblNpemVzOiBudW1iZXJbXTtcbiAgfSB7XG4gICAgY29uc3QgY29ubmVjdGlvblNpemVzID0gc3ViQnVja2V0LmNvbm5lY3Rpb25zLm1hcChjb25uZWN0aW9uID0+XG4gICAgICBhcHBseU1pbmltdW1EYXRhRWxlbWVudFNpemUoXG4gICAgICAgIHZhbHVlVG9TaXplKGNvbm5lY3Rpb24uY291bnQpLFxuICAgICAgICBjb25uZWN0aW9uLmNvdW50LFxuICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICksXG4gICAgKTtcbiAgICBjb25zdCBzdW1TaXplcyA9IChkaXJlY3Rpb246IEZsb3dDb25uZWN0aW9uWydkaXJlY3Rpb24nXSk6IG51bWJlciA9PlxuICAgICAgc3VtKFxuICAgICAgICBjb25uZWN0aW9uU2l6ZXMuZmlsdGVyKFxuICAgICAgICAgIChfLCBpKSA9PiBzdWJCdWNrZXQuY29ubmVjdGlvbnNbaV0uZGlyZWN0aW9uID09PSBkaXJlY3Rpb24sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIGNvbnN0IGNvbnRpbnVpbmdTaXplID0gc3VtU2l6ZXMoJ2ZvcndhcmQnKTtcbiAgICBjb25zdCBiYWNrd2FyZFNpemUgPSBzdW1TaXplcygnYmFja3dhcmQnKTtcbiAgICBjb25zdCBub25Db250aW51aW5nQ291bnQgPVxuICAgICAgc3ViQnVja2V0LmNvdW50IC1cbiAgICAgIHN1bShcbiAgICAgICAgc3ViQnVja2V0LmNvbm5lY3Rpb25zXG4gICAgICAgICAgLmZpbHRlcihjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uZGlyZWN0aW9uID09PSAnZm9yd2FyZCcpXG4gICAgICAgICAgLm1hcChjb25uZWN0aW9uID0+IGNvbm5lY3Rpb24uY291bnQpLFxuICAgICAgKTtcbiAgICAvL1RoZSBzdWItYnVja2V0IG11c3QgYmUgYmlnIGVub3VnaCB0byBob2xkIGFsbCBvZiBpdHMgKHBvc3NpYmx5IGVubGFyZ2VkKSBjb25uZWN0aW9ucyBvbiBlaXRoZXIgc2lkZVxuICAgIGNvbnN0IHRvdGFsU2l6ZSA9IE1hdGgubWF4KFxuICAgICAgYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICB2YWx1ZVRvU2l6ZShzdWJCdWNrZXQuY291bnQpLFxuICAgICAgICBzdWJCdWNrZXQuY291bnQsXG4gICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgKSxcbiAgICAgIGNvbnRpbnVpbmdTaXplICtcbiAgICAgICAgYXBwbHlNaW5pbXVtRGF0YUVsZW1lbnRTaXplKFxuICAgICAgICAgIHZhbHVlVG9TaXplKG5vbkNvbnRpbnVpbmdDb3VudCksXG4gICAgICAgICAgbm9uQ29udGludWluZ0NvdW50LFxuICAgICAgICAgIG1pbmltdW1TaXplLFxuICAgICAgICApLFxuICAgICAgYmFja3dhcmRTaXplLFxuICAgICk7XG4gICAgLy9FdmVyeSB1bml0IGluIGEgc3ViLWJ1Y2tldCBhcnJpdmVzIHRocm91Z2ggaXRzIGJhY2t3YXJkIGNvbm5lY3Rpb25zLCBzbyB0aGV5J3JlIHN0cmV0Y2hlZCB0byBmaWxsIHRoZVxuICAgIC8vIHN1Yi1idWNrZXQgd2hlbiBpdCBoYXMgYmVlbiBlbmxhcmdlZCBiZXlvbmQgdGhlbVxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFNpemUsXG4gICAgICBjb250aW51aW5nU2l6ZSxcbiAgICAgIGNvbm5lY3Rpb25TaXplczogY29ubmVjdGlvblNpemVzLm1hcCgoc2l6ZSwgaSkgPT5cbiAgICAgICAgc3ViQnVja2V0LmNvbm5lY3Rpb25zW2ldLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyAmJiBiYWNrd2FyZFNpemUgPiAwXG4gICAgICAgICAgPyAoc2l6ZSAqIHRvdGFsU2l6ZSkgLyBiYWNrd2FyZFNpemVcbiAgICAgICAgICA6IHNpemUsXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvL1RoZSBzaXplIG9mIHRoZSB0YWxsZXN0IGZsb3cgYnVja2V0IGZvciB0aGUgZ2l2ZW4gc2NhbGluZyByYXRpbywgaW5jbHVkaW5nIHRoZSBkYXRhIGxhYmVscyBiZXR3ZWVuIGl0cyBzdWItYnVja2V0c1xuICAvLyAgVGhlIGxhYmVsIGFib3ZlIHRoZSBmaXJzdCBzdWItYnVja2V0IGlzIGV4Y2x1ZGVkLCBzaW5jZSBpdCdzIHBhcnQgb2YgdGhlIHRvcCBvZmZzZXRcbiAgZnVuY3Rpb24gZ2V0TWF4Rmxvd0J1Y2tldFNpemUoXG4gICAgZGF0YTogUHJvY2Vzc2VkRmxvd0RhdGEsXG4gICAgcHhQZXJWYWx1ZTogbnVtYmVyLFxuICAgIG1pbmltdW1TaXplOiBudW1iZXIsXG4gICAgbGFiZWxTaXplOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgLi4uZGF0YS54Lm1hcChcbiAgICAgICAgYnVja2V0ID0+XG4gICAgICAgICAgc3VtKFxuICAgICAgICAgICAgYnVja2V0LnN1YkJ1Y2tldHMubWFwKFxuICAgICAgICAgICAgICBzdWJCdWNrZXQgPT5cbiAgICAgICAgICAgICAgICBnZXRGbG93U3ViQnVja2V0U2l6ZXMoXG4gICAgICAgICAgICAgICAgICBzdWJCdWNrZXQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9PiB2YWx1ZSAqIHB4UGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICBtaW5pbXVtU2l6ZSxcbiAgICAgICAgICAgICAgICApLnRvdGFsU2l6ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSArXG4gICAgICAgICAgKGJ1Y2tldC5zdWJCdWNrZXRzLmxlbmd0aCAtIDEpICogbGFiZWxTaXplLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy9UaGUgZml4ZWQgc2l6ZSByZXNlcnZlcyByb29tIGZvciB0aGUgbGFiZWxzIGJldHdlZW4gc3ViLWJ1Y2tldHMgYXMgaWYgZXZlcnkgYnVja2V0IGhhZCBhcyBtYW55IHN1Yi1idWNrZXRzIGFzIHRoZVxuICAvLyBidWNrZXQgd2l0aCB0aGUgbW9zdCwgc28gdGhpcyBpcyB0aGUgcG9ydGlvbiBvZiB0aGUgZml4ZWQgc2l6ZSB0aGF0IGVhY2ggYnVja2V0IGNhbiBpbnN0ZWFkIHVzZSBiYXNlZCBvbiBpdHMgb3duIGxhYmVsc1xuICBmdW5jdGlvbiBnZXRGbG93TWlkTGFiZWxTaXplKFxuICAgIGRhdGE6IFByb2Nlc3NlZEZsb3dEYXRhLFxuICAgIGxhYmVsU2l6ZTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICAoTWF0aC5tYXgoLi4uZGF0YS54Lm1hcChidWNrZXQgPT4gYnVja2V0LnN1YkJ1Y2tldHMubGVuZ3RoKSkgLSAxKSAqXG4gICAgICBsYWJlbFNpemVcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTdGFja2VkRGF0YShjb25maWc6IENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2JhcicgfHwgY29uZmlnLnR5cGUgPT09ICdob3Jpem9udGFsLWJhcicpIHtcbiAgICAgIGlmIChjb25maWcuZ3JvdXBpbmdUeXBlID09PSAnc3RhY2tlZCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2FyZWEnIHx8IGNvbmZpZy50eXBlID09PSAnd2F0ZXJmYWxsJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ2x1c3RlcmVkRGF0YShcbiAgICBkYXRhOiBOb25GbG93RGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBpbmNsdWRlU3VwcGxlbWVudGFyeTogYm9vbGVhbixcbiAgKTogYm9vbGVhbiB7XG4gICAgLy9JdCB2YXJpZXMgd2hldGhlciB3ZSB3YW50IHRvIGluY2x1ZGUgc3VwcGxlbWVudGFyeSBkYXRhIGluIHRoaXMgY2hlY2tcbiAgICBpZiAoaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YSkgJiYgaW5jbHVkZVN1cHBsZW1lbnRhcnkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAoY29uZmlnLnR5cGUgPT09ICdiYXInIHx8IGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSAmJlxuICAgICAgY29uZmlnLmdyb3VwaW5nVHlwZSA9PT0gJ2NsdXN0ZXJlZCdcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdmdW5uZWwnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy9JbiBzb21lIGNhc2VzLCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBjbHVzdGVyZWQgYW5kIHN0YWNrZWQgZG9lc24ndCBtYXR0ZXJcbiAgZnVuY3Rpb24gaXNHcm91cGluZ1R5cGVFeGNlcHRpb24oZGF0YTogTm9uRmxvd0RhdGEsIGNvbmZpZzogQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEueXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy9DaGVja2luZyBmb3IgYSAnbWV0cmljJyBjaGFydHMsIHdoaWNoIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBob3Jpem9udGFsIGJhciBjaGFydHMsXG4gICAgLy8gd2hlcmUgZWFjaCBzZXJpZXMgaXMgYWxzbyBhIGJ1Y2tldCAoYW5kIHZpY2UgdmVyc2EpXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGEueC5sZW5ndGggPT09IGRhdGEueXMubGVuZ3RoICYmXG4gICAgICAgIGRhdGEueXMubGVuZ3RoID09PVxuICAgICAgICAgIGRhdGEueXMuZmlsdGVyKHkgPT4geS52YWx1ZXMuZmlsdGVyKHZhbCA9PiB2YWwgIT09IDApLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIC5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzU3VwcGxlbWVudGFyeURhdGEoZGF0YTogSW5wdXREYXRhKTogZGF0YSBpcyBOb25GbG93RGF0YSAmIHtcbiAgICBzdXBwbGVtZW50YXJ5WXM6IE5vbk51bGxhYmxlPE5vbkZsb3dEYXRhWydzdXBwbGVtZW50YXJ5WXMnXT47XG4gIH0ge1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdmbG93Jykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zdXBwbGVtZW50YXJ5WXMgJiYgZGF0YS5zdXBwbGVtZW50YXJ5WXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVsZW1lbnRTY2FsaW5nSW5mbyhcbiAgICBlbGVtZW50U2NhbGVzOiBQYXJ0aWFsRWxlbWVudFNjYWxpbmdDb25maWcgfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFNjYWxpbmdDb25maWc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBlbGVtZW50OiBDaGFydFNjYWxlRWxlbWVudCxcbiAgKTogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBkZWZhdWx0RWxlbWVudENvbmZpZyA9IGRlZmF1bHRTY2FsaW5nQ29uZmlnW2VsZW1lbnRdO1xuICAgIGxldCBpbnB1dENvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uIHwgbnVsbDtcbiAgICBpZiAoZWxlbWVudFNjYWxlcykge1xuICAgICAgY29uc3QgcG9zc2libGVDb25maWcgPSBlbGVtZW50U2NhbGVzW2VsZW1lbnRdO1xuICAgICAgaWYgKHBvc3NpYmxlQ29uZmlnKSB7XG4gICAgICAgIGlucHV0Q29uZmlnID0gcG9zc2libGVDb25maWc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dENvbmZpZyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Q29uZmlnID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXRDb25maWcgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJldHVybkNvbmZpZyA9IGlucHV0Q29uZmlnIGFzIEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbjtcbiAgICAgIHJldHVybiByZXR1cm5Db25maWc7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0RWxlbWVudENvbmZpZy50YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmV0dXJuQ29uZmlnID0gZGVmYXVsdEVsZW1lbnRDb25maWcgYXMgRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uO1xuICAgICAgcmV0dXJuIHJldHVybkNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogMCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGV0ZXJtaW5lUG9zc2libGVTaXplc09mRWxlbWVudChcbiAgICBlbGVtZW50Q29uZmlnOiBFbGVtZW50U2NhbGluZ0NvbmZpZ3VyYXRpb24sXG4gICAgZWxlbWVudENvdW50OiBudW1iZXIsXG4gICk6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyOyB0YXJnZXQ6IG51bWJlciB9IHtcbiAgICBjb25zdCBpbmRNaW4gPSBlbGVtZW50Q29uZmlnLm1pbiAhPT0gdW5kZWZpbmVkID8gZWxlbWVudENvbmZpZy5taW4gOiAwO1xuICAgIGNvbnN0IGluZE1heCA9IGVsZW1lbnRDb25maWcubWF4ICE9PSB1bmRlZmluZWQgPyBlbGVtZW50Q29uZmlnLm1heCA6IDA7XG4gICAgY29uc3QgaW5kVGFyZ2V0ID0gZWxlbWVudENvbmZpZy50YXJnZXQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbjogaW5kTWluICogZWxlbWVudENvdW50LFxuICAgICAgbWF4OiBpbmRNYXggKiBlbGVtZW50Q291bnQsXG4gICAgICB0YXJnZXQ6IGluZFRhcmdldCAqIGVsZW1lbnRDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGV0ZXJtaW5lVG90YWxTY2FsZWRTaXplT2ZFbGVtZW50KFxuICAgIGVsZW1lbnRDb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgICBlbGVtZW50Q291bnQ6IG51bWJlcixcbiAgICBzY2FsZVZhbHVlOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3Qgc2NhbGVkVmFsID0gZ2V0U2NhbGVkRWxlbWVudFNpemUoZWxlbWVudENvbmZpZywgc2NhbGVWYWx1ZSk7XG4gICAgcmV0dXJuIHNjYWxlZFZhbCAqIGVsZW1lbnRDb3VudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNjYWxlZEVsZW1lbnRTaXplKFxuICAgIGVsZW1lbnRDb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbixcbiAgICBzY2FsZVZhbHVlOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3Qgc2NhbGVkVGFyZ2V0ID0gZWxlbWVudENvbmZpZy50YXJnZXQgKiBzY2FsZVZhbHVlO1xuICAgIGlmIChzY2FsZVZhbHVlIDwgMSkge1xuICAgICAgaWYgKGVsZW1lbnRDb25maWcubWluICYmIGVsZW1lbnRDb25maWcubWluID4gc2NhbGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Q29uZmlnLm1pbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzY2FsZWRUYXJnZXQ7XG4gICAgfVxuICAgIGlmIChzY2FsZVZhbHVlID4gMSkge1xuICAgICAgaWYgKGVsZW1lbnRDb25maWcubWF4ICYmIGVsZW1lbnRDb25maWcubWF4IDwgc2NhbGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Q29uZmlnLm1heDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzY2FsZWRUYXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZWRUYXJnZXQ7XG4gIH1cblxuICB0eXBlIEVsZW1lbnRTY2FsZUNoZWNrSW5mbyA9IHtcbiAgICBjb25maWc6IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbjtcbiAgICBtaW5TY2FsZUZhY3Rvcj86IG51bWJlcjtcbiAgICBtYXhTY2FsZUZhY3Rvcj86IG51bWJlcjtcbiAgICBlbGVtZW50Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRDaGVja2luZ0luZm9Gb3JFbGVtZW50Q29uZmlnKFxuICAgIGNvbmZpZzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uLFxuICAgIGVsZW1lbnRDb3VudDogbnVtYmVyLFxuICApOiBFbGVtZW50U2NhbGVDaGVja0luZm8ge1xuICAgIGxldCBtaW5TY2FsZUZhY3RvcjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcubWluKSB7XG4gICAgICBtaW5TY2FsZUZhY3RvciA9XG4gICAgICAgIGNvbmZpZy50YXJnZXQgIT09IDAgPyBjb25maWcubWluIC8gY29uZmlnLnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IG1heFNjYWxlRmFjdG9yOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5tYXgpIHtcbiAgICAgIG1heFNjYWxlRmFjdG9yID1cbiAgICAgICAgY29uZmlnLnRhcmdldCAhPT0gMCA/IGNvbmZpZy5tYXggLyBjb25maWcudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnLFxuICAgICAgbWluU2NhbGVGYWN0b3IsXG4gICAgICBtYXhTY2FsZUZhY3RvcixcbiAgICAgIGVsZW1lbnRDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3VtRm9yU2NhbGVWYWx1ZShcbiAgICBjaGVja0luZm9zOiBFbGVtZW50U2NhbGVDaGVja0luZm9bXSxcbiAgICBzY2FsZVZhbHVlOiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja0luZm9zKSB7XG4gICAgICBzdW0gKz0gZGV0ZXJtaW5lVG90YWxTY2FsZWRTaXplT2ZFbGVtZW50KFxuICAgICAgICBjaGVjay5jb25maWcsXG4gICAgICAgIGNoZWNrLmVsZW1lbnRDb3VudCxcbiAgICAgICAgc2NhbGVWYWx1ZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICBmdW5jdGlvbiBnZXREYXRhTGFiZWxTaXppbmdDb3VudChcbiAgICBkYXRhOiBQcm9jZXNzRGF0YSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgKTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgdG90YWw6IG51bWJlciB9IHtcbiAgICBpZiAoY29uZmlnLnNob3dEYXRhTGFiZWxzICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgZW5kOiAwLFxuICAgICAgICB0b3RhbDogMCxcbiAgICAgIH07XG4gICAgfVxuICAgIC8vRGF0YSBsYWJlbHMgYXJlIGFsd2F5cyBzaG93biBhYm92ZSB0aGUgZGF0YSBmb3IgYWxsIGJ1dCB0aGVzZSAzIHR5cGVzXG4gICAgaWYgKFxuICAgICAgY29uZmlnLnR5cGUgIT09ICdiYXInICYmXG4gICAgICBjb25maWcudHlwZSAhPT0gJ2hvcml6b250YWwtYmFyJyAmJlxuICAgICAgY29uZmlnLnR5cGUgIT09ICd3YXRlcmZhbGwnICYmXG4gICAgICBjb25maWcudHlwZSAhPT0gJ2Zsb3cnXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogMSxcbiAgICAgICAgZW5kOiAwLFxuICAgICAgICB0b3RhbDogMSxcbiAgICAgIH07XG4gICAgfVxuICAgIGxldCBzdGFydENvdW50ID0gMDtcbiAgICBsZXQgbWlkQ291bnQgPSAwO1xuICAgIGxldCBlbmRDb3VudCA9IDA7XG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2Zsb3ctcHJvY2Vzc2VkJykge1xuICAgICAgaWYgKGRhdGEueXMuZmluZCh5ID0+IHkudmFsdWVzLmZpbmQodmFsID0+IHZhbCA+PSAwKSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICAgICAgZW5kQ291bnQgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydENvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkYXRhLnlzLmZpbmQoeSA9PiB5LnZhbHVlcy5maW5kKHZhbCA9PiB2YWwgPCAwKSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICAgICAgc3RhcnRDb3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZENvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRDb3VudCA9IDE7XG4gICAgICBtaWRDb3VudCA9IE1hdGgubWF4KC4uLmRhdGEueC5tYXAoeCA9PiB4LnN1YkJ1Y2tldHMubGVuZ3RoKSkgLSAxO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHN0YXJ0Q291bnQsXG4gICAgICBlbmQ6IGVuZENvdW50LFxuICAgICAgdG90YWw6IHN0YXJ0Q291bnQgKyBtaWRDb3VudCArIGVuZENvdW50LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJZkhvdmVyT3V0T2ZCb3VuZHMoXG4gICAgLy9Qb3NpdGlvbiBub3QgYWNjb3VudGluZyBmb3Igc2Nyb2xsaW5nXG4gICAgcmVsUG9zWDogbnVtYmVyLFxuICAgIHJlbFBvc1k6IG51bWJlcixcbiAgICAvL1Bvc2l0aW9uIGFjY291bnRpbmcgZm9yIHNjcm9sbGluZ1xuICAgIHJlYWxQb3NYOiBudW1iZXIsXG4gICAgcmVhbFBvc1k6IG51bWJlcixcbiAgICBjaGFydFNpemluZ1ZhbHVlczogRnVsbENoYXJ0U2NhbGVWYWx1ZXMgfCBudWxsLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vQ2hlY2sgaWYgd2UncmUgb24gdG9wIG9mIG9uZSBvZiB0aGUgc2Nyb2xsYmFyc1xuICAgIGlmIChyZWxQb3NYID4gZGltZW5zaW9ucy53aWR0aCB8fCByZWxQb3NZID4gZGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY2hhcnRTaXppbmdWYWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIC8vSWYgY2hhcnRTaXppbmdWYWx1ZXMgYXJlbid0IHByb3ZpZGVkLCBubyBtb3JlIGNoZWNrc1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL0NoZWNrIGlmIHdlJ3JlIGluIG9uZSBvZiB0aGUgcGFkZGluZyBhcmVhc1xuICAgIGlmIChcbiAgICAgIHJlYWxQb3NYIDwgY2hhcnRTaXppbmdWYWx1ZXMubGVmdFBhZGRpbmcgfHxcbiAgICAgIHJlYWxQb3NYID5cbiAgICAgICAgY2hhcnRTaXppbmdWYWx1ZXMudG90YWxXaWR0aCAtIGNoYXJ0U2l6aW5nVmFsdWVzLnJpZ2h0UGFkZGluZyB8fFxuICAgICAgcmVhbFBvc1kgPCBjaGFydFNpemluZ1ZhbHVlcy50b3BQYWRkaW5nIHx8XG4gICAgICByZWFsUG9zWSA+IGNoYXJ0U2l6aW5nVmFsdWVzLnRvdGFsSGVpZ2h0IC0gY2hhcnRTaXppbmdWYWx1ZXMuYm90dG9tUGFkZGluZ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWc6IENvbmZpZyk6IENoYXJ0RGF0YURpcmVjdGlvbiB7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgICByZXR1cm4gJ2hvcml6b250YWwnO1xuICAgIH1cbiAgICByZXR1cm4gJ3ZlcnRpY2FsJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbWJpbmVTY2FsaW5nSW5mbyhcbiAgICBjb25maWc6IENvbmZpZ1dpdGhGdWxsU2NhbGluZyxcbiAgICBkZWZhdWx0Q29uZmlnOiBEZWZhdWx0U2NhbGluZ0NvbmZpZyxcbiAgKTogTm9uRWxlbWVudFNjYWxpbmdDb25maWcge1xuICAgIGNvbnN0IHByb3ZpZGVkU2NhbGluZ0NvbmZpZyA9IGNvbmZpZy5zY2FsaW5nQ29uZmlnO1xuICAgIGNvbnN0IGNoYXJ0RGF0YURpcmVjdGlvbiA9IGdldENoYXJ0RGF0YURpcmVjdGlvbihjb25maWcpO1xuXG4gICAgLy9JZiB0aGUgdXNlciBwcm92aWRlcyBhIGRhdGEgc2NhbGUsIHdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgdGhhdCB1bmxlc3MgdGhleSBhbHNvIHByb3ZpZGVkIGEgc3BlY2lmaWMgc2NhbGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGF4aXNcbiAgICBjb25zdCBkYXRhU2NhbGUgPVxuICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnICYmIHByb3ZpZGVkU2NhbGluZ0NvbmZpZy5kYXRhU2NhbGVcbiAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLmRhdGFTY2FsZTtcbiAgICBsZXQgdmVydGljYWxBeGlzU2NhbGUgPSBwcm92aWRlZFNjYWxpbmdDb25maWc/LnZlcnRpY2FsQXhpc1NjYWxlO1xuICAgIGlmICh2ZXJ0aWNhbEF4aXNTY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hhcnREYXRhRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnKSB7XG4gICAgICAgIHZlcnRpY2FsQXhpc1NjYWxlID0gZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLnZlcnRpY2FsQXhpc1NjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9UaGUgdmVydGljYWwgYXhpcyBpcyB0aGUgZGF0YSBheGlzLCB0aGUgZGF0YVNjYWxlIGhhcyBhIHVzZXItaW5wdXR0ZWQgdmFsdWUsIGFuZCB0aGVyZSBpc24ndCBhIHVzZXItaW5wdXR0ZWQgdmVydGljYWxBeGlzU2NhbGVcbiAgICAgICAgLy8gU28sIHdlJ2xsIHByZXZlbnQgdGhlIGF4aXMgc2NhbGluZyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIGRhdGFTY2FsZVxuICAgICAgICB2ZXJ0aWNhbEF4aXNTY2FsZSA9ICduby1zY2FsZSc7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBob3Jpem9udGFsQXhpc1NjYWxlID0gcHJvdmlkZWRTY2FsaW5nQ29uZmlnPy5ob3Jpem9udGFsQXhpc1NjYWxlO1xuICAgIGlmIChob3Jpem9udGFsQXhpc1NjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjaGFydERhdGFEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgfHwgZGF0YVNjYWxlLnR5cGUgPT09ICdmaXQnKSB7XG4gICAgICAgIGhvcml6b250YWxBeGlzU2NhbGUgPVxuICAgICAgICAgIGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy5ob3Jpem9udGFsQXhpc1NjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9UaGUgaG9yaXpvbnRhbCBheGlzIGlzIHRoZSBkYXRhIGF4aXMsIHRoZSBkYXRhU2NhbGUgaGFzIGEgdXNlci1pbnB1dHRlZCB2YWx1ZSwgYW5kIHRoZXJlIGlzbid0IGEgdXNlci1pbnB1dHRlZCBob3Jpem9udGFsQXhpc1NjYWxlXG4gICAgICAgIC8vIFNvLCB3ZSdsbCBwcmV2ZW50IHRoZSBheGlzIHNjYWxpbmcgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBkYXRhU2NhbGVcbiAgICAgICAgaG9yaXpvbnRhbEF4aXNTY2FsZSA9ICduby1zY2FsZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkYXRhU2NhbGU6XG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJiBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcuZGF0YVNjYWxlXG4gICAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMuZGF0YVNjYWxlLFxuICAgICAgaG9yaXpvbnRhbEF4aXNTY2FsZSxcbiAgICAgIHZlcnRpY2FsQXhpc1NjYWxlLFxuICAgICAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiYgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZVxuICAgICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLmhvcml6b250YWxDb250YWluZXJTY2FsZVxuICAgICAgICAgIDogZGVmYXVsdENvbmZpZy5ub25FbGVtZW50U2NhbGVzLmhvcml6b250YWxDb250YWluZXJTY2FsZSxcbiAgICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6XG4gICAgICAgIHByb3ZpZGVkU2NhbGluZ0NvbmZpZyAmJiBwcm92aWRlZFNjYWxpbmdDb25maWcudmVydGljYWxDb250YWluZXJTY2FsZVxuICAgICAgICAgID8gcHJvdmlkZWRTY2FsaW5nQ29uZmlnLnZlcnRpY2FsQ29udGFpbmVyU2NhbGVcbiAgICAgICAgICA6IGRlZmF1bHRDb25maWcubm9uRWxlbWVudFNjYWxlcy52ZXJ0aWNhbENvbnRhaW5lclNjYWxlLFxuICAgICAgdGFyZ2V0VGlja0NvdW50OlxuICAgICAgICBwcm92aWRlZFNjYWxpbmdDb25maWcgJiZcbiAgICAgICAgcHJvdmlkZWRTY2FsaW5nQ29uZmlnLnRhcmdldFRpY2tDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBwcm92aWRlZFNjYWxpbmdDb25maWcudGFyZ2V0VGlja0NvdW50XG4gICAgICAgICAgOiBkZWZhdWx0Q29uZmlnLm5vbkVsZW1lbnRTY2FsZXMudGFyZ2V0VGlja0NvdW50LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpc0RlRW1waGFzaXplZChcbiAgICBjb25maWc6IEZsb3dDb25maWcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBpc0RhcmtlbmVkOiBib29sZWFuLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZEJ1Y2tldHMgPSBjb25maWcuZmxvd0NvbmZpZy5zdWJCdWNrZXRzQ29uZmlnXG4gICAgICAuZmlsdGVyKHNiYyA9PiBzYmMuaXNIaWdobGlnaHRlZCA9PT0gdHJ1ZSlcbiAgICAgIC5tYXAoc2JjID0+IHNiYy5idWNrZXRJZCk7XG4gICAgaWYgKGhpZ2hsaWdodGVkQnVja2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlzRGFya2VuZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaGlnaGxpZ2h0ZWRCdWNrZXRzLnNvbWUoaGIgPT4gaGIgPT09IGlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZUZsb3dDb25uZWN0aW9uUGF0aChcbiAgICBjb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvblJlbmRlcixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBkeCA9IGNvbm5lY3Rpb24udG9wTGluZS54MiAtIGNvbm5lY3Rpb24udG9wTGluZS54MTtcbiAgICBjb25zdCBjdXJ2ZSA9IE1hdGguYWJzKGR4KSAqIEZMT1dfQ09OTkVDVElPTl9DVVJWRV9DT05TVEFOVDtcblxuICAgIGNvbnN0IHBhdGggPSBgXG4gICAgICBNICR7Y29ubmVjdGlvbi50b3BMaW5lLngxfSwke2Nvbm5lY3Rpb24udG9wTGluZS55MX1cblxuICAgICAgQyAke2Nvbm5lY3Rpb24udG9wTGluZS54MSArIGN1cnZlfSwke2Nvbm5lY3Rpb24udG9wTGluZS55MX1cbiAgICAgICAgJHtjb25uZWN0aW9uLnRvcExpbmUueDIgLSBjdXJ2ZX0sJHtjb25uZWN0aW9uLnRvcExpbmUueTJ9XG4gICAgICAgICR7Y29ubmVjdGlvbi50b3BMaW5lLngyfSwke2Nvbm5lY3Rpb24udG9wTGluZS55Mn1cblxuICAgICAgTCAke2Nvbm5lY3Rpb24uYm90dG9tTGluZS54Mn0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTJ9XG5cbiAgICAgIEMgJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueDIgLSBjdXJ2ZX0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTJ9XG4gICAgICAgICR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLngxICsgY3VydmV9LCR7Y29ubmVjdGlvbi5ib3R0b21MaW5lLnkxfVxuICAgICAgICAke2Nvbm5lY3Rpb24uYm90dG9tTGluZS54MX0sJHtjb25uZWN0aW9uLmJvdHRvbUxpbmUueTF9XG5cbiAgICAgIFpcbiAgICBgO1xuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBjdWJpYyhcbiAgICBhOiBudW1iZXIsXG4gICAgYjogbnVtYmVyLFxuICAgIGM6IG51bWJlcixcbiAgICBkOiBudW1iZXIsXG4gICAgdDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IG10ID0gMSAtIHQ7XG4gICAgcmV0dXJuIG10ICoqIDMgKiBhICsgMyAqIG10ICoqIDIgKiB0ICogYiArIDMgKiBtdCAqIHQgKiogMiAqIGMgKyB0ICoqIDMgKiBkO1xuICB9XG5cbiAgZnVuY3Rpb24gYmV6aWVyWUF0WChcbiAgICB4OiBudW1iZXIsXG4gICAgbGluZToge1xuICAgICAgeDE6IG51bWJlcjtcbiAgICAgIHkxOiBudW1iZXI7XG4gICAgICB4MjogbnVtYmVyO1xuICAgICAgeTI6IG51bWJlcjtcbiAgICB9LFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnZlID0gTWF0aC5hYnMobGluZS54MiAtIGxpbmUueDEpICogRkxPV19DT05ORUNUSU9OX0NVUlZFX0NPTlNUQU5UO1xuICAgIGNvbnN0IHAwID0geyB4OiBsaW5lLngxLCB5OiBsaW5lLnkxIH07XG4gICAgY29uc3QgcDEgPSB7IHg6IGxpbmUueDEgKyBjdXJ2ZSwgeTogbGluZS55MSB9O1xuICAgIGNvbnN0IHAyID0geyB4OiBsaW5lLngyIC0gY3VydmUsIHk6IGxpbmUueTIgfTtcbiAgICBjb25zdCBwMyA9IHsgeDogbGluZS54MiwgeTogbGluZS55MiB9O1xuXG4gICAgbGV0IGxvID0gMDtcbiAgICBsZXQgaGkgPSAxO1xuXG4gICAgLy8gQmluYXJ5IHNlYXJjaCBmb3IgdCB3aGVyZSBiZXppZXJYKHQpIH49IHhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSAobG8gKyBoaSkgLyAyO1xuICAgICAgY29uc3QgYnggPSBjdWJpYyhwMC54LCBwMS54LCBwMi54LCBwMy54LCB0KTtcblxuICAgICAgaWYgKGJ4IDwgeCkgbG8gPSB0O1xuICAgICAgZWxzZSBoaSA9IHQ7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IChsbyArIGhpKSAvIDI7XG4gICAgcmV0dXJuIGN1YmljKHAwLnksIHAxLnksIHAyLnksIHAzLnksIHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tJZlBvaW50V2l0aGluQ29ubmVjdGlvbihcbiAgICBjb25uZWN0aW9uOiBGbG93Q29ubmVjdGlvblJlbmRlcixcbiAgICBwb2ludFg6IG51bWJlcixcbiAgICBwb2ludFk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9wWSA9IGJlemllcllBdFgocG9pbnRYLCBjb25uZWN0aW9uLnRvcExpbmUpO1xuXG4gICAgY29uc3QgYm90dG9tWSA9IGJlemllcllBdFgocG9pbnRYLCBjb25uZWN0aW9uLmJvdHRvbUxpbmUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHBvaW50WCA+PSBjb25uZWN0aW9uLnRvcExpbmUueDEgJiZcbiAgICAgIHBvaW50WCA8PSBjb25uZWN0aW9uLnRvcExpbmUueDIgJiZcbiAgICAgIHBvaW50WSA+PSBNYXRoLm1pbih0b3BZLCBib3R0b21ZKSAmJlxuICAgICAgcG9pbnRZIDw9IE1hdGgubWF4KHRvcFksIGJvdHRvbVkpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZsb3dCdWNrZXRJbmRleEZvckhvdmVyKFxuICAgIGNoYXJ0U2l6aW5nVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyxcbiAgICB4UG9zOiBudW1iZXIsXG4gICk6IHsgaW5kZXg6IG51bWJlcjsgYXJlYTogJ2JhcicgfCAnY29ubmVjdGlvbicgfSB8IG51bGwge1xuICAgIGxldCBidWNrZXRJbmRleCA9IDA7XG4gICAgY29uc3QgYnVja2V0TGVmdEVkZ2UgPSBjaGFydFNpemluZ1ZhbHVlcy50b3RhbExlZnRPZmZzZXQ7XG4gICAgY29uc3QgdG90YWxCdWNrZXRHYXAgPVxuICAgICAgY2hhcnRTaXppbmdWYWx1ZXMuYmFyU2l6ZSArIGNoYXJ0U2l6aW5nVmFsdWVzLmJ1Y2tldEdhcDtcbiAgICBpZiAoYnVja2V0TGVmdEVkZ2UgPiB4UG9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgd2hpbGUgKGJ1Y2tldExlZnRFZGdlICsgYnVja2V0SW5kZXggKiB0b3RhbEJ1Y2tldEdhcCA8IHhQb3MpIHtcbiAgICAgIGlmIChidWNrZXRMZWZ0RWRnZSArIChidWNrZXRJbmRleCArIDEpICogdG90YWxCdWNrZXRHYXAgPiB4UG9zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBidWNrZXRMZWZ0RWRnZSArXG4gICAgICAgICAgICBidWNrZXRJbmRleCAqIHRvdGFsQnVja2V0R2FwICtcbiAgICAgICAgICAgIGNoYXJ0U2l6aW5nVmFsdWVzLmJhclNpemUgPlxuICAgICAgICAgIHhQb3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBidWNrZXRJbmRleCxcbiAgICAgICAgICAgIGFyZWE6ICdiYXInLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBidWNrZXRJbmRleCxcbiAgICAgICAgICAgIGFyZWE6ICdjb25uZWN0aW9uJyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBidWNrZXRJbmRleCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vVGhlc2Ugb3ZlcmxvYWRzIGVuc3VyZSB0aGUgZnVuY3Rpb24ga25vd3MgdGhhdCwgaWYgd2lkdGggYW5kIGhlaWdodCBhcmUgZGVmaW5lZCBvbiBpbnB1dCwgdGhleSdsbCBiZSBkZWZpbmVkIG9uIG91dHB1dFxuICBmdW5jdGlvbiBjaGVja0FuY2hvcnNBZ2FpbnN0Qm91bmQoXG4gICAgYW5jaG9yWDogbnVtYmVyLFxuICAgIGFuY2hvclk6IG51bWJlcixcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiB7IGFuY2hvclg6IG51bWJlcjsgYW5jaG9yWTogbnVtYmVyIH07XG5cbiAgZnVuY3Rpb24gY2hlY2tBbmNob3JzQWdhaW5zdEJvdW5kKFxuICAgIGFuY2hvclg6IG51bWJlcixcbiAgICBhbmNob3JZOiBudW1iZXIsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApOiB7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBhbmNob3JXaWR0aDogbnVtYmVyO1xuICAgIGFuY2hvckhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrQW5jaG9yc0FnYWluc3RCb3VuZChcbiAgICBhbmNob3JYOiBudW1iZXIsXG4gICAgYW5jaG9yWTogbnVtYmVyLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICAgd2lkdGg/OiBudW1iZXIsXG4gICAgaGVpZ2h0PzogbnVtYmVyLFxuICApOiB7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBhbmNob3JXaWR0aD86IG51bWJlcjtcbiAgICBhbmNob3JIZWlnaHQ/OiBudW1iZXI7XG4gIH0ge1xuICAgIGxldCByZXRBbmNob3JYID0gYW5jaG9yWDtcbiAgICBsZXQgcmV0QW5jaG9yWSA9IGFuY2hvclk7XG4gICAgbGV0IHJldFdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQgPSB3aWR0aDtcbiAgICBsZXQgcmV0SGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSBoZWlnaHQ7XG4gICAgaWYgKHJldEFuY2hvclggPiBkaW1lbnNpb25zLndpZHRoKSB7XG4gICAgICByZXRBbmNob3JYID0gZGltZW5zaW9ucy53aWR0aDtcbiAgICAgIGlmIChyZXRXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldEFuY2hvclggPCAwKSB7XG4gICAgICByZXRBbmNob3JYID0gMDtcbiAgICAgIGlmIChyZXRXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldFdpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldEFuY2hvclkgPiBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgcmV0QW5jaG9yWSA9IGRpbWVuc2lvbnMuaGVpZ2h0O1xuICAgICAgaWYgKHJldEhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldEhlaWdodCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXRBbmNob3JZIDwgMCkge1xuICAgICAgcmV0QW5jaG9yWSA9IDA7XG4gICAgICBpZiAocmV0SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0SGVpZ2h0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yWDogcmV0QW5jaG9yWCxcbiAgICAgIGFuY2hvclk6IHJldEFuY2hvclksXG4gICAgICBhbmNob3JXaWR0aDogcmV0V2lkdGgsXG4gICAgICBhbmNob3JIZWlnaHQ6IHJldEhlaWdodCxcbiAgICB9O1xuICB9XG59XG4iXX0=