@wavemaker/app-ng-runtime 11.10.2-rc.203 → 11.10.3-next.25128

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 (170) hide show
  1. package/build-task/bundles/index.umd.js +5 -3
  2. package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +4 -2
  3. package/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -3
  4. package/build-task/fesm2022/index.mjs +5 -3
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/basic/default/bundles/index.umd.js +68 -71
  7. package/components/basic/default/esm2022/anchor/anchor.component.mjs +18 -18
  8. package/components/basic/default/esm2022/icon/icon.component.mjs +12 -13
  9. package/components/basic/default/esm2022/iframe/iframe.component.mjs +9 -10
  10. package/components/basic/default/esm2022/picture/picture.directive.mjs +2 -5
  11. package/components/basic/default/esm2022/spinner/spinner.component.mjs +21 -21
  12. package/components/basic/default/esm2022/video/video.component.mjs +14 -15
  13. package/components/basic/default/fesm2022/index.mjs +68 -71
  14. package/components/basic/default/fesm2022/index.mjs.map +1 -1
  15. package/components/basic/progress/bundles/index.umd.js +16 -17
  16. package/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +7 -8
  17. package/components/basic/progress/fesm2022/index.mjs +8 -9
  18. package/components/basic/progress/fesm2022/index.mjs.map +1 -1
  19. package/components/basic/rich-text-editor/bundles/index.umd.js +11 -12
  20. package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +8 -9
  21. package/components/basic/rich-text-editor/fesm2022/index.mjs +7 -8
  22. package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  23. package/components/basic/search/bundles/index.umd.js +63 -67
  24. package/components/basic/search/esm2022/search.component.mjs +63 -67
  25. package/components/basic/search/esm2022/search.module.mjs +2 -2
  26. package/components/basic/search/fesm2022/index.mjs +63 -67
  27. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  28. package/components/chart/bundles/index.umd.js +17 -17
  29. package/components/chart/esm2022/chart.component.mjs +18 -18
  30. package/components/chart/fesm2022/index.mjs +17 -17
  31. package/components/chart/fesm2022/index.mjs.map +1 -1
  32. package/components/containers/panel/bundles/index.umd.js +39 -39
  33. package/components/containers/panel/esm2022/panel.component.mjs +40 -40
  34. package/components/containers/panel/fesm2022/index.mjs +39 -39
  35. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  36. package/components/containers/tabs/bundles/index.umd.js +29 -29
  37. package/components/containers/tabs/esm2022/tabs.component.mjs +30 -30
  38. package/components/containers/tabs/fesm2022/index.mjs +29 -29
  39. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/wizard/bundles/index.umd.js +49 -49
  41. package/components/containers/wizard/esm2022/wizard.component.mjs +50 -50
  42. package/components/containers/wizard/fesm2022/index.mjs +49 -49
  43. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  44. package/components/data/card/bundles/index.umd.js +29 -29
  45. package/components/data/card/esm2022/card.component.mjs +30 -30
  46. package/components/data/card/fesm2022/index.mjs +29 -29
  47. package/components/data/card/fesm2022/index.mjs.map +1 -1
  48. package/components/data/form/bundles/index.umd.js +91 -96
  49. package/components/data/form/esm2022/form.component.mjs +92 -97
  50. package/components/data/form/fesm2022/index.mjs +91 -96
  51. package/components/data/form/fesm2022/index.mjs.map +1 -1
  52. package/components/data/list/bundles/index.umd.js +171 -173
  53. package/components/data/list/esm2022/list.component.mjs +171 -173
  54. package/components/data/list/esm2022/list.module.mjs +2 -2
  55. package/components/data/list/fesm2022/index.mjs +171 -173
  56. package/components/data/list/fesm2022/index.mjs.map +1 -1
  57. package/components/data/pagination/bundles/index.umd.js +32 -32
  58. package/components/data/pagination/esm2022/pagination.component.mjs +33 -33
  59. package/components/data/pagination/fesm2022/index.mjs +32 -32
  60. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  61. package/components/data/table/bundles/index.umd.js +69 -39
  62. package/components/data/table/esm2022/table-column/table-column.directive.mjs +2 -1
  63. package/components/data/table/esm2022/table-column/table-column.props.mjs +2 -1
  64. package/components/data/table/esm2022/table-filter.directive.mjs +29 -2
  65. package/components/data/table/esm2022/table.component.mjs +40 -39
  66. package/components/data/table/esm2022/table.props.mjs +2 -1
  67. package/components/data/table/fesm2022/index.mjs +72 -41
  68. package/components/data/table/fesm2022/index.mjs.map +1 -1
  69. package/components/data/table/table-column/table-column.directive.d.ts +1 -0
  70. package/components/data/table/table-filter.directive.d.ts +1 -0
  71. package/components/dialogs/default/bundles/index.umd.js +66 -95
  72. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +67 -96
  73. package/components/dialogs/default/fesm2022/index.mjs +66 -95
  74. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  75. package/components/dialogs/design-dialog/bundles/index.umd.js +7 -7
  76. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -8
  77. package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -7
  78. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/dialogs/iframe-dialog/bundles/index.umd.js +24 -25
  80. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +15 -16
  81. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +14 -15
  82. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  83. package/components/dialogs/partial-dialog/bundles/index.umd.js +8 -8
  84. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +9 -9
  85. package/components/dialogs/partial-dialog/fesm2022/index.mjs +8 -8
  86. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  87. package/components/input/chips/bundles/index.umd.js +21 -21
  88. package/components/input/chips/esm2022/chips.component.mjs +22 -22
  89. package/components/input/chips/fesm2022/index.mjs +21 -21
  90. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  91. package/components/input/default/bundles/index.umd.js +201 -209
  92. package/components/input/default/esm2022/button/button.component.mjs +18 -18
  93. package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +68 -69
  94. package/components/input/default/esm2022/radioset/radioset.component.mjs +68 -69
  95. package/components/input/default/esm2022/select/select.component.mjs +21 -27
  96. package/components/input/default/esm2022/switch/switch.component.mjs +24 -24
  97. package/components/input/default/esm2022/textarea/textarea.component.mjs +8 -8
  98. package/components/input/default/fesm2022/index.mjs +201 -209
  99. package/components/input/default/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/bundles/index.umd.js +171 -164
  101. package/components/input/epoch/esm2022/date/date.component.mjs +14 -15
  102. package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +64 -59
  103. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +18 -19
  104. package/components/input/epoch/esm2022/picker/picker.component.mjs +26 -25
  105. package/components/input/epoch/esm2022/time/time.component.mjs +17 -18
  106. package/components/input/epoch/fesm2022/index.mjs +124 -117
  107. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  108. package/components/input/file-upload/bundles/index.umd.js +111 -114
  109. package/components/input/file-upload/esm2022/file-upload.component.mjs +112 -115
  110. package/components/input/file-upload/fesm2022/index.mjs +111 -114
  111. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  112. package/components/input/rating/bundles/index.umd.js +14 -14
  113. package/components/input/rating/esm2022/rating.component.mjs +15 -15
  114. package/components/input/rating/fesm2022/index.mjs +14 -14
  115. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  116. package/components/input/slider/bundles/index.umd.js +39 -40
  117. package/components/input/slider/esm2022/slider.component.mjs +10 -11
  118. package/components/input/slider/fesm2022/index.mjs +9 -10
  119. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  120. package/components/navigation/breadcrumb/bundles/index.umd.js +16 -15
  121. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +17 -16
  122. package/components/navigation/breadcrumb/fesm2022/index.mjs +16 -15
  123. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  124. package/components/navigation/menu/bundles/index.umd.js +82 -74
  125. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +14 -4
  126. package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +7 -7
  127. package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +15 -15
  128. package/components/navigation/menu/esm2022/menu.component.mjs +22 -26
  129. package/components/navigation/menu/esm2022/menu.module.mjs +4 -4
  130. package/components/navigation/menu/esm2022/nav/nav.component.mjs +26 -24
  131. package/components/navigation/menu/fesm2022/index.mjs +82 -74
  132. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  133. package/components/navigation/menu/menu-adapator.component.d.ts +1 -0
  134. package/components/navigation/navbar/bundles/index.umd.js +12 -12
  135. package/components/navigation/navbar/esm2022/navbar.component.mjs +13 -13
  136. package/components/navigation/navbar/fesm2022/index.mjs +12 -12
  137. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  138. package/mobile/components/basic/default/bundles/index.umd.js +102 -111
  139. package/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +39 -40
  140. package/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.component.mjs +35 -44
  141. package/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +27 -28
  142. package/mobile/components/basic/default/fesm2022/index.mjs +98 -107
  143. package/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
  144. package/mobile/components/containers/segmented-control/bundles/index.umd.js +16 -16
  145. package/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +8 -9
  146. package/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +10 -10
  147. package/mobile/components/containers/segmented-control/fesm2022/index.mjs +16 -16
  148. package/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
  149. package/mobile/components/data/media-list/bundles/index.umd.js +28 -28
  150. package/mobile/components/data/media-list/esm2022/media-list.component.mjs +29 -29
  151. package/mobile/components/data/media-list/fesm2022/index.mjs +28 -28
  152. package/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
  153. package/mobile/components/page/mobile-navbar/bundles/index.umd.js +29 -29
  154. package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.component.mjs +30 -30
  155. package/mobile/components/page/mobile-navbar/fesm2022/index.mjs +29 -29
  156. package/mobile/components/page/mobile-navbar/fesm2022/index.mjs.map +1 -1
  157. package/mobile/components/page/tab-bar/bundles/index.umd.js +28 -28
  158. package/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +29 -29
  159. package/mobile/components/page/tab-bar/fesm2022/index.mjs +28 -28
  160. package/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
  161. package/npm-shrinkwrap.json +2 -2
  162. package/package-lock.json +2 -2
  163. package/package.json +1 -1
  164. package/runtime/base/bundles/index.umd.js +219 -215
  165. package/runtime/base/esm2022/components/app-component/app.component.mjs +38 -41
  166. package/runtime/base/esm2022/components/app-spinner.component.mjs +25 -21
  167. package/runtime/base/esm2022/components/custom-toaster.component.mjs +18 -16
  168. package/runtime/base/fesm2022/index.mjs +99 -95
  169. package/runtime/base/fesm2022/index.mjs.map +1 -1
  170. package/scripts/datatable/datatable.js +1 -0
@@ -77,29 +77,29 @@
77
77
  const _c1 = a0 => ({ "full-width": a0 });
78
78
  const _c2 = (a0, a1) => ({ "active": a0, "disabled": a1 });
79
79
  const _c3 = (a0, a1, a2) => ({ "no-drag": a0, "chip-duplicate bg-danger": a1, "chip-picture": a2 });
80
- function ChipsComponent_li_0_img_2_Template(rf, ctx) { if (rf & 1) {
81
- i0__namespace.ɵɵelement(0, "img", 9);
80
+ function ChipsComponent_For_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
81
+ i0__namespace.ɵɵelement(0, "img", 6);
82
82
  } if (rf & 2) {
83
83
  const item_r3 = i0__namespace.ɵɵnextContext().$implicit;
84
84
  i0__namespace.ɵɵproperty("src", item_r3.imgSrc, i0__namespace.ɵɵsanitizeUrl);
85
85
  } }
86
- function ChipsComponent_li_0_button_4_Template(rf, ctx) { if (rf & 1) {
86
+ function ChipsComponent_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
87
87
  const _r10 = i0__namespace.ɵɵgetCurrentView();
88
- i0__namespace.ɵɵelementStart(0, "button", 10);
89
- i0__namespace.ɵɵlistener("click", function ChipsComponent_li_0_button_4_Template_button_click_0_listener($event) { i0__namespace.ɵɵrestoreView(_r10); const ctx_r10 = i0__namespace.ɵɵnextContext(); const item_r3 = ctx_r10.$implicit; const $index_r6 = ctx_r10.index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.removeItem($event, item_r3, $index_r6)); });
90
- i0__namespace.ɵɵelement(1, "i", 11);
88
+ i0__namespace.ɵɵelementStart(0, "button", 9);
89
+ i0__namespace.ɵɵlistener("click", function ChipsComponent_For_1_Conditional_4_Template_button_click_0_listener($event) { i0__namespace.ɵɵrestoreView(_r10); const ctx_r10 = i0__namespace.ɵɵnextContext(); const item_r3 = ctx_r10.$implicit; const $index_r6 = ctx_r10.$index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.removeItem($event, item_r3, $index_r6)); });
90
+ i0__namespace.ɵɵelement(1, "i", 10);
91
91
  i0__namespace.ɵɵelementEnd();
92
92
  } if (rf & 2) {
93
93
  const item_r3 = i0__namespace.ɵɵnextContext().$implicit;
94
94
  i0__namespace.ɵɵattribute("aria-label", "Clear " + item_r3.label);
95
95
  } }
96
- function ChipsComponent_li_0_Template(rf, ctx) { if (rf & 1) {
96
+ function ChipsComponent_For_1_Template(rf, ctx) { if (rf & 1) {
97
97
  const _r2 = i0__namespace.ɵɵgetCurrentView();
98
98
  i0__namespace.ɵɵelementStart(0, "li", 4)(1, "a", 5);
99
- i0__namespace.ɵɵlistener("click", function ChipsComponent_li_0_Template_a_click_1_listener($event) { const item_r3 = i0__namespace.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.handleChipClick($event, item_r3)); })("keydown.delete", function ChipsComponent_li_0_Template_a_keydown_delete_1_listener($event) { const ctx_r4 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r4.$implicit; const $index_r6 = ctx_r4.index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onDelete($event, item_r3, $index_r6)); })("keydown.backspace", function ChipsComponent_li_0_Template_a_keydown_backspace_1_listener($event) { const ctx_r6 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r6.$implicit; const $index_r6 = ctx_r6.index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onBackspace($event, item_r3, $index_r6)); })("keydown.arrowleft", function ChipsComponent_li_0_Template_a_keydown_arrowleft_1_listener() { const ctx_r7 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r7.$implicit; const $index_r6 = ctx_r7.index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onArrowLeft(item_r3, $index_r6)); })("keydown.arrowright", function ChipsComponent_li_0_Template_a_keydown_arrowright_1_listener() { const ctx_r8 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r8.$implicit; const $index_r6 = ctx_r8.index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onArrowRight(item_r3, $index_r6)); })("focus", function ChipsComponent_li_0_Template_a_focus_1_listener($event) { const item_r3 = i0__namespace.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.handleChipFocus($event, item_r3)); })("blur", function ChipsComponent_li_0_Template_a_blur_1_listener() { const item_r3 = i0__namespace.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.readonly ? 0 : item_r3.active = false); });
100
- i0__namespace.ɵɵtemplate(2, ChipsComponent_li_0_img_2_Template, 1, 1, "img", 6);
99
+ i0__namespace.ɵɵlistener("click", function ChipsComponent_For_1_Template_a_click_1_listener($event) { const item_r3 = i0__namespace.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.handleChipClick($event, item_r3)); })("keydown.delete", function ChipsComponent_For_1_Template_a_keydown_delete_1_listener($event) { const ctx_r4 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r4.$implicit; const $index_r6 = ctx_r4.$index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onDelete($event, item_r3, $index_r6)); })("keydown.backspace", function ChipsComponent_For_1_Template_a_keydown_backspace_1_listener($event) { const ctx_r6 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r6.$implicit; const $index_r6 = ctx_r6.$index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onBackspace($event, item_r3, $index_r6)); })("keydown.arrowleft", function ChipsComponent_For_1_Template_a_keydown_arrowleft_1_listener() { const ctx_r7 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r7.$implicit; const $index_r6 = ctx_r7.$index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onArrowLeft(item_r3, $index_r6)); })("keydown.arrowright", function ChipsComponent_For_1_Template_a_keydown_arrowright_1_listener() { const ctx_r8 = i0__namespace.ɵɵrestoreView(_r2); const item_r3 = ctx_r8.$implicit; const $index_r6 = ctx_r8.$index; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.onArrowRight(item_r3, $index_r6)); })("focus", function ChipsComponent_For_1_Template_a_focus_1_listener($event) { const item_r3 = i0__namespace.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.handleChipFocus($event, item_r3)); })("blur", function ChipsComponent_For_1_Template_a_blur_1_listener() { const item_r3 = i0__namespace.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r3.readonly ? 0 : item_r3.active = false); });
100
+ i0__namespace.ɵɵtemplate(2, ChipsComponent_For_1_Conditional_2_Template, 1, 1, "img", 6);
101
101
  i0__namespace.ɵɵelement(3, "span", 7);
102
- i0__namespace.ɵɵtemplate(4, ChipsComponent_li_0_button_4_Template, 2, 1, "button", 8);
102
+ i0__namespace.ɵɵtemplate(4, ChipsComponent_For_1_Conditional_4_Template, 2, 1, "button", 8);
103
103
  i0__namespace.ɵɵelementEnd()();
104
104
  } if (rf & 2) {
105
105
  const item_r3 = ctx.$implicit;
@@ -109,11 +109,11 @@
109
109
  i0__namespace.ɵɵadvance();
110
110
  i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction3(12, _c3, !ctx_r3.enablereorder, item_r3.isDuplicate, item_r3.imgSrc));
111
111
  i0__namespace.ɵɵadvance();
112
- i0__namespace.ɵɵproperty("ngIf", item_r3.imgSrc);
112
+ i0__namespace.ɵɵconditional(item_r3.imgSrc ? 2 : -1);
113
113
  i0__namespace.ɵɵadvance();
114
114
  i0__namespace.ɵɵproperty("textContent", item_r3.label)("title", item_r3.label);
115
115
  i0__namespace.ɵɵadvance();
116
- i0__namespace.ɵɵproperty("ngIf", !ctx_r3.readonly);
116
+ i0__namespace.ɵɵconditional(!ctx_r3.readonly ? 4 : -1);
117
117
  } }
118
118
  const WIDGET_CONFIG = {
119
119
  widgetType: 'wm-chips',
@@ -706,24 +706,24 @@
706
706
  } }, features: [i0__namespace.ɵɵProvidersFeature([
707
707
  i3.provideAs(ChipsComponent, forms.NG_VALUE_ACCESSOR, true),
708
708
  i3.provideAsWidgetRef(ChipsComponent)
709
- ]), i0__namespace.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 4, vars: 4, consts: [["search", ""], [3, "class", "ngClass", 4, "ngFor", "ngForOf"], [1, "app-chip-search", 3, "ngClass"], ["wmSearch", "", "name", "app-chip-search", "submit.event", "addItem($event, widget)", "beforeservicecall.event", "invokeOnBeforeServiceCall(inputData)", "disabled.bind", "disabled || readonly || saturate", "datafield.bind", "datafield", "allowonlyselect.bind", "allowonlyselect", "searchkey.bind", "searchkey", "orderby.bind", "orderby", "placeholder.bind", "saturate ? maxSizeReached : placeholder", "showsearchicon.bind", "showsearchicon", "tabindex.bind", "tabindex", "minchars.bind", "minchars", "debouncetime.bind", "debouncetime", "matchmode.bind", "matchmode", "datacompletemsg.bind", "datacompletemsg", "groupby.bind", "groupby", "match.bind", "match", "dateformat.bind", "dateformat", 1, "app-chip-input", 3, "keydown.enter", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright"], [3, "ngClass"], ["href", "javascript:void(0)", 1, "app-chip", 3, "click", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright", "focus", "blur", "ngClass"], ["data-identifier", "img", "alt", "Chip Image", "class", "button-image-icon", 3, "src", 4, "ngIf"], [1, "app-chip-title", 3, "textContent", "title"], ["type", "button", "class", "btn btn-transparent", 3, "click", 4, "ngIf"], ["data-identifier", "img", "alt", "Chip Image", 1, "button-image-icon", 3, "src"], ["type", "button", 1, "btn", "btn-transparent", 3, "click"], [1, "app-icon", "wi", "wi-close"]], template: function ChipsComponent_Template(rf, ctx) { if (rf & 1) {
709
+ ]), i0__namespace.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 5, vars: 3, consts: [["search", ""], [3, "class", "ngClass"], [1, "app-chip-search", 3, "ngClass"], ["wmSearch", "", "name", "app-chip-search", "submit.event", "addItem($event, widget)", "beforeservicecall.event", "invokeOnBeforeServiceCall(inputData)", "disabled.bind", "disabled || readonly || saturate", "datafield.bind", "datafield", "allowonlyselect.bind", "allowonlyselect", "searchkey.bind", "searchkey", "orderby.bind", "orderby", "placeholder.bind", "saturate ? maxSizeReached : placeholder", "showsearchicon.bind", "showsearchicon", "tabindex.bind", "tabindex", "minchars.bind", "minchars", "debouncetime.bind", "debouncetime", "matchmode.bind", "matchmode", "datacompletemsg.bind", "datacompletemsg", "groupby.bind", "groupby", "match.bind", "match", "dateformat.bind", "dateformat", 1, "app-chip-input", 3, "keydown.enter", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright"], [3, "ngClass"], ["href", "javascript:void(0)", 1, "app-chip", 3, "click", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright", "focus", "blur", "ngClass"], ["data-identifier", "img", "alt", "Chip Image", 1, "button-image-icon", 3, "src"], [1, "app-chip-title", 3, "textContent", "title"], ["type", "button", 1, "btn", "btn-transparent"], ["type", "button", 1, "btn", "btn-transparent", 3, "click"], [1, "app-icon", "wi", "wi-close"]], template: function ChipsComponent_Template(rf, ctx) { if (rf & 1) {
710
710
  const _r1 = i0__namespace.ɵɵgetCurrentView();
711
- i0__namespace.ɵɵtemplate(0, ChipsComponent_li_0_Template, 5, 16, "li", 1);
712
- i0__namespace.ɵɵelementStart(1, "li", 2)(2, "div", 3, 0);
713
- i0__namespace.ɵɵlistener("keydown.enter", function ChipsComponent_Template_div_keydown_enter_2_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.stopEvent($event)); })("keydown.delete", function ChipsComponent_Template_div_keydown_delete_2_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onTextDelete($event)); })("keydown.backspace", function ChipsComponent_Template_div_keydown_backspace_2_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onInputClear($event)); })("keydown.arrowleft", function ChipsComponent_Template_div_keydown_arrowleft_2_listener() { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onArrowLeft()); })("keydown.arrowright", function ChipsComponent_Template_div_keydown_arrowright_2_listener() { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onArrowRight()); });
711
+ i0__namespace.ɵɵrepeaterCreate(0, ChipsComponent_For_1_Template, 5, 16, "li", 1, i0__namespace.ɵɵrepeaterTrackByIdentity);
712
+ i0__namespace.ɵɵelementStart(2, "li", 2)(3, "div", 3, 0);
713
+ i0__namespace.ɵɵlistener("keydown.enter", function ChipsComponent_Template_div_keydown_enter_3_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.stopEvent($event)); })("keydown.delete", function ChipsComponent_Template_div_keydown_delete_3_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onTextDelete($event)); })("keydown.backspace", function ChipsComponent_Template_div_keydown_backspace_3_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onInputClear($event)); })("keydown.arrowleft", function ChipsComponent_Template_div_keydown_arrowleft_3_listener() { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onArrowLeft()); })("keydown.arrowright", function ChipsComponent_Template_div_keydown_arrowright_3_listener() { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onArrowRight()); });
714
714
  i0__namespace.ɵɵelementEnd()();
715
715
  } if (rf & 2) {
716
- i0__namespace.ɵɵproperty("ngForOf", ctx.chipsList);
717
- i0__namespace.ɵɵadvance();
718
- i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(2, _c1, ctx.inputwidth === "full"));
719
- } }, dependencies: [i1__namespace.NgClass, i1__namespace.NgForOf, i1__namespace.NgIf, i2__namespace.SearchComponent, i3__namespace.TextContentDirective], encapsulation: 2 }); }
716
+ i0__namespace.ɵɵrepeater(ctx.chipsList);
717
+ i0__namespace.ɵɵadvance(2);
718
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(1, _c1, ctx.inputwidth === "full"));
719
+ } }, dependencies: [i1__namespace.NgClass, i2__namespace.SearchComponent, i3__namespace.TextContentDirective], encapsulation: 2 }); }
720
720
  }
721
721
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassMetadata(ChipsComponent, [{
722
722
  type: i0.Component,
723
723
  args: [{ selector: '[wmChips]', providers: [
724
724
  i3.provideAs(ChipsComponent, forms.NG_VALUE_ACCESSOR, true),
725
725
  i3.provideAsWidgetRef(ChipsComponent)
726
- ], template: "<li class=\"chip-item {{chipclass && !bindChipclass ? chipclass : ''}}\"\n *ngFor=\"let item of chipsList; let $index = index;\"\n [ngClass]=\"{'active': item.active, 'disabled': disabled}\">\n <a href=\"javascript:void(0)\" class=\"app-chip\"\n (click)=\"handleChipClick($event, item)\"\n (keydown.delete)=\"onDelete($event, item, $index)\"\n (keydown.backspace)=\"onBackspace($event, item, $index)\"\n (keydown.arrowleft)=\"onArrowLeft(item, $index)\"\n (keydown.arrowright)=\"onArrowRight(item, $index)\"\n (focus)=\"handleChipFocus($event, item)\"\n (blur)=\"readonly ? 0 : item.active = false\"\n [ngClass]=\"{'no-drag': !enablereorder,'chip-duplicate bg-danger': item.isDuplicate, 'chip-picture': item.imgSrc}\">\n <img data-identifier=\"img\" alt=\"Chip Image\" class=\"button-image-icon\" [src]=\"item.imgSrc\" *ngIf=\"item.imgSrc\"/>\n <span class=\"app-chip-title\" [textContent]=\"item.label\" [title]=\"item.label\"></span>\n <button type=\"button\" [attr.aria-label]=\"'Clear ' + item.label\" class=\"btn btn-transparent\"\n (click)=\"removeItem($event, item, $index);\" *ngIf=\"!readonly\">\n <i class=\"app-icon wi wi-close\"></i>\n </button>\n </a>\n</li>\n<li class=\"app-chip-search\" [ngClass]=\"{'full-width': inputwidth === 'full'}\">\n <div #search wmSearch class=\"app-chip-input\"\n name=\"app-chip-search\"\n submit.event=\"addItem($event, widget)\"\n beforeservicecall.event=\"invokeOnBeforeServiceCall(inputData)\"\n disabled.bind=\"disabled || readonly || saturate\"\n datafield.bind=\"datafield\"\n allowonlyselect.bind=\"allowonlyselect\"\n searchkey.bind=\"searchkey\"\n orderby.bind=\"orderby\"\n placeholder.bind=\"saturate ? maxSizeReached : placeholder\"\n showsearchicon.bind=\"showsearchicon\"\n tabindex.bind=\"tabindex\"\n minchars.bind=\"minchars\"\n debouncetime.bind=\"debouncetime\"\n matchmode.bind=\"matchmode\"\n datacompletemsg.bind = \"datacompletemsg\"\n groupby.bind=\"groupby\"\n match.bind=\"match\"\n dateformat.bind=\"dateformat\"\n (keydown.enter)=\"stopEvent($event)\"\n (keydown.delete)=\"onTextDelete($event)\"\n (keydown.backspace)=\"onInputClear($event)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight()\">\n </div>\n</li>\n" }]
726
+ ], template: "@for (item of chipsList; track item) {\n <li class=\"chip-item {{chipclass && !bindChipclass ? chipclass : ''}}\"\n [ngClass]=\"{'active': item.active, 'disabled': disabled}\">\n <a href=\"javascript:void(0)\" class=\"app-chip\"\n (click)=\"handleChipClick($event, item)\"\n (keydown.delete)=\"onDelete($event, item, $index)\"\n (keydown.backspace)=\"onBackspace($event, item, $index)\"\n (keydown.arrowleft)=\"onArrowLeft(item, $index)\"\n (keydown.arrowright)=\"onArrowRight(item, $index)\"\n (focus)=\"handleChipFocus($event, item)\"\n (blur)=\"readonly ? 0 : item.active = false\"\n [ngClass]=\"{'no-drag': !enablereorder,'chip-duplicate bg-danger': item.isDuplicate, 'chip-picture': item.imgSrc}\">\n @if (item.imgSrc) {\n <img data-identifier=\"img\" alt=\"Chip Image\" class=\"button-image-icon\" [src]=\"item.imgSrc\"/>\n }\n <span class=\"app-chip-title\" [textContent]=\"item.label\" [title]=\"item.label\"></span>\n @if (!readonly) {\n <button type=\"button\" [attr.aria-label]=\"'Clear ' + item.label\" class=\"btn btn-transparent\"\n (click)=\"removeItem($event, item, $index);\">\n <i class=\"app-icon wi wi-close\"></i>\n </button>\n }\n </a>\n </li>\n}\n<li class=\"app-chip-search\" [ngClass]=\"{'full-width': inputwidth === 'full'}\">\n <div #search wmSearch class=\"app-chip-input\"\n name=\"app-chip-search\"\n submit.event=\"addItem($event, widget)\"\n beforeservicecall.event=\"invokeOnBeforeServiceCall(inputData)\"\n disabled.bind=\"disabled || readonly || saturate\"\n datafield.bind=\"datafield\"\n allowonlyselect.bind=\"allowonlyselect\"\n searchkey.bind=\"searchkey\"\n orderby.bind=\"orderby\"\n placeholder.bind=\"saturate ? maxSizeReached : placeholder\"\n showsearchicon.bind=\"showsearchicon\"\n tabindex.bind=\"tabindex\"\n minchars.bind=\"minchars\"\n debouncetime.bind=\"debouncetime\"\n matchmode.bind=\"matchmode\"\n datacompletemsg.bind = \"datacompletemsg\"\n groupby.bind=\"groupby\"\n match.bind=\"match\"\n dateformat.bind=\"dateformat\"\n (keydown.enter)=\"stopEvent($event)\"\n (keydown.delete)=\"onTextDelete($event)\"\n (keydown.backspace)=\"onInputClear($event)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight()\">\n </div>\n</li>\n" }]
727
727
  }], () => [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
728
728
  type: i0.Attribute,
729
729
  args: ['displayfield.bind']
@@ -14,29 +14,29 @@ const _c0 = ["wmChips", ""];
14
14
  const _c1 = a0 => ({ "full-width": a0 });
15
15
  const _c2 = (a0, a1) => ({ "active": a0, "disabled": a1 });
16
16
  const _c3 = (a0, a1, a2) => ({ "no-drag": a0, "chip-duplicate bg-danger": a1, "chip-picture": a2 });
17
- function ChipsComponent_li_0_img_2_Template(rf, ctx) { if (rf & 1) {
18
- i0.ɵɵelement(0, "img", 9);
17
+ function ChipsComponent_For_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelement(0, "img", 6);
19
19
  } if (rf & 2) {
20
20
  const item_r3 = i0.ɵɵnextContext().$implicit;
21
21
  i0.ɵɵproperty("src", item_r3.imgSrc, i0.ɵɵsanitizeUrl);
22
22
  } }
23
- function ChipsComponent_li_0_button_4_Template(rf, ctx) { if (rf & 1) {
23
+ function ChipsComponent_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
24
24
  const _r10 = i0.ɵɵgetCurrentView();
25
- i0.ɵɵelementStart(0, "button", 10);
26
- i0.ɵɵlistener("click", function ChipsComponent_li_0_button_4_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r10 = i0.ɵɵnextContext(); const item_r3 = ctx_r10.$implicit; const $index_r6 = ctx_r10.index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.removeItem($event, item_r3, $index_r6)); });
27
- i0.ɵɵelement(1, "i", 11);
25
+ i0.ɵɵelementStart(0, "button", 9);
26
+ i0.ɵɵlistener("click", function ChipsComponent_For_1_Conditional_4_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r10 = i0.ɵɵnextContext(); const item_r3 = ctx_r10.$implicit; const $index_r6 = ctx_r10.$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.removeItem($event, item_r3, $index_r6)); });
27
+ i0.ɵɵelement(1, "i", 10);
28
28
  i0.ɵɵelementEnd();
29
29
  } if (rf & 2) {
30
30
  const item_r3 = i0.ɵɵnextContext().$implicit;
31
31
  i0.ɵɵattribute("aria-label", "Clear " + item_r3.label);
32
32
  } }
33
- function ChipsComponent_li_0_Template(rf, ctx) { if (rf & 1) {
33
+ function ChipsComponent_For_1_Template(rf, ctx) { if (rf & 1) {
34
34
  const _r2 = i0.ɵɵgetCurrentView();
35
35
  i0.ɵɵelementStart(0, "li", 4)(1, "a", 5);
36
- i0.ɵɵlistener("click", function ChipsComponent_li_0_Template_a_click_1_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.handleChipClick($event, item_r3)); })("keydown.delete", function ChipsComponent_li_0_Template_a_keydown_delete_1_listener($event) { const ctx_r4 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r4.$implicit; const $index_r6 = ctx_r4.index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onDelete($event, item_r3, $index_r6)); })("keydown.backspace", function ChipsComponent_li_0_Template_a_keydown_backspace_1_listener($event) { const ctx_r6 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r6.$implicit; const $index_r6 = ctx_r6.index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onBackspace($event, item_r3, $index_r6)); })("keydown.arrowleft", function ChipsComponent_li_0_Template_a_keydown_arrowleft_1_listener() { const ctx_r7 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r7.$implicit; const $index_r6 = ctx_r7.index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onArrowLeft(item_r3, $index_r6)); })("keydown.arrowright", function ChipsComponent_li_0_Template_a_keydown_arrowright_1_listener() { const ctx_r8 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r8.$implicit; const $index_r6 = ctx_r8.index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onArrowRight(item_r3, $index_r6)); })("focus", function ChipsComponent_li_0_Template_a_focus_1_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.handleChipFocus($event, item_r3)); })("blur", function ChipsComponent_li_0_Template_a_blur_1_listener() { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.readonly ? 0 : item_r3.active = false); });
37
- i0.ɵɵtemplate(2, ChipsComponent_li_0_img_2_Template, 1, 1, "img", 6);
36
+ i0.ɵɵlistener("click", function ChipsComponent_For_1_Template_a_click_1_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.handleChipClick($event, item_r3)); })("keydown.delete", function ChipsComponent_For_1_Template_a_keydown_delete_1_listener($event) { const ctx_r4 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r4.$implicit; const $index_r6 = ctx_r4.$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onDelete($event, item_r3, $index_r6)); })("keydown.backspace", function ChipsComponent_For_1_Template_a_keydown_backspace_1_listener($event) { const ctx_r6 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r6.$implicit; const $index_r6 = ctx_r6.$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onBackspace($event, item_r3, $index_r6)); })("keydown.arrowleft", function ChipsComponent_For_1_Template_a_keydown_arrowleft_1_listener() { const ctx_r7 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r7.$implicit; const $index_r6 = ctx_r7.$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onArrowLeft(item_r3, $index_r6)); })("keydown.arrowright", function ChipsComponent_For_1_Template_a_keydown_arrowright_1_listener() { const ctx_r8 = i0.ɵɵrestoreView(_r2); const item_r3 = ctx_r8.$implicit; const $index_r6 = ctx_r8.$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onArrowRight(item_r3, $index_r6)); })("focus", function ChipsComponent_For_1_Template_a_focus_1_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.handleChipFocus($event, item_r3)); })("blur", function ChipsComponent_For_1_Template_a_blur_1_listener() { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.readonly ? 0 : item_r3.active = false); });
37
+ i0.ɵɵtemplate(2, ChipsComponent_For_1_Conditional_2_Template, 1, 1, "img", 6);
38
38
  i0.ɵɵelement(3, "span", 7);
39
- i0.ɵɵtemplate(4, ChipsComponent_li_0_button_4_Template, 2, 1, "button", 8);
39
+ i0.ɵɵtemplate(4, ChipsComponent_For_1_Conditional_4_Template, 2, 1, "button", 8);
40
40
  i0.ɵɵelementEnd()();
41
41
  } if (rf & 2) {
42
42
  const item_r3 = ctx.$implicit;
@@ -46,11 +46,11 @@ function ChipsComponent_li_0_Template(rf, ctx) { if (rf & 1) {
46
46
  i0.ɵɵadvance();
47
47
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(12, _c3, !ctx_r3.enablereorder, item_r3.isDuplicate, item_r3.imgSrc));
48
48
  i0.ɵɵadvance();
49
- i0.ɵɵproperty("ngIf", item_r3.imgSrc);
49
+ i0.ɵɵconditional(item_r3.imgSrc ? 2 : -1);
50
50
  i0.ɵɵadvance();
51
51
  i0.ɵɵproperty("textContent", item_r3.label)("title", item_r3.label);
52
52
  i0.ɵɵadvance();
53
- i0.ɵɵproperty("ngIf", !ctx_r3.readonly);
53
+ i0.ɵɵconditional(!ctx_r3.readonly ? 4 : -1);
54
54
  } }
55
55
  const WIDGET_CONFIG = {
56
56
  widgetType: 'wm-chips',
@@ -643,24 +643,24 @@ export class ChipsComponent extends DatasetAwareFormComponent {
643
643
  } }, features: [i0.ɵɵProvidersFeature([
644
644
  provideAs(ChipsComponent, NG_VALUE_ACCESSOR, true),
645
645
  provideAsWidgetRef(ChipsComponent)
646
- ]), i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 4, vars: 4, consts: [["search", ""], [3, "class", "ngClass", 4, "ngFor", "ngForOf"], [1, "app-chip-search", 3, "ngClass"], ["wmSearch", "", "name", "app-chip-search", "submit.event", "addItem($event, widget)", "beforeservicecall.event", "invokeOnBeforeServiceCall(inputData)", "disabled.bind", "disabled || readonly || saturate", "datafield.bind", "datafield", "allowonlyselect.bind", "allowonlyselect", "searchkey.bind", "searchkey", "orderby.bind", "orderby", "placeholder.bind", "saturate ? maxSizeReached : placeholder", "showsearchicon.bind", "showsearchicon", "tabindex.bind", "tabindex", "minchars.bind", "minchars", "debouncetime.bind", "debouncetime", "matchmode.bind", "matchmode", "datacompletemsg.bind", "datacompletemsg", "groupby.bind", "groupby", "match.bind", "match", "dateformat.bind", "dateformat", 1, "app-chip-input", 3, "keydown.enter", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright"], [3, "ngClass"], ["href", "javascript:void(0)", 1, "app-chip", 3, "click", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright", "focus", "blur", "ngClass"], ["data-identifier", "img", "alt", "Chip Image", "class", "button-image-icon", 3, "src", 4, "ngIf"], [1, "app-chip-title", 3, "textContent", "title"], ["type", "button", "class", "btn btn-transparent", 3, "click", 4, "ngIf"], ["data-identifier", "img", "alt", "Chip Image", 1, "button-image-icon", 3, "src"], ["type", "button", 1, "btn", "btn-transparent", 3, "click"], [1, "app-icon", "wi", "wi-close"]], template: function ChipsComponent_Template(rf, ctx) { if (rf & 1) {
646
+ ]), i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 5, vars: 3, consts: [["search", ""], [3, "class", "ngClass"], [1, "app-chip-search", 3, "ngClass"], ["wmSearch", "", "name", "app-chip-search", "submit.event", "addItem($event, widget)", "beforeservicecall.event", "invokeOnBeforeServiceCall(inputData)", "disabled.bind", "disabled || readonly || saturate", "datafield.bind", "datafield", "allowonlyselect.bind", "allowonlyselect", "searchkey.bind", "searchkey", "orderby.bind", "orderby", "placeholder.bind", "saturate ? maxSizeReached : placeholder", "showsearchicon.bind", "showsearchicon", "tabindex.bind", "tabindex", "minchars.bind", "minchars", "debouncetime.bind", "debouncetime", "matchmode.bind", "matchmode", "datacompletemsg.bind", "datacompletemsg", "groupby.bind", "groupby", "match.bind", "match", "dateformat.bind", "dateformat", 1, "app-chip-input", 3, "keydown.enter", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright"], [3, "ngClass"], ["href", "javascript:void(0)", 1, "app-chip", 3, "click", "keydown.delete", "keydown.backspace", "keydown.arrowleft", "keydown.arrowright", "focus", "blur", "ngClass"], ["data-identifier", "img", "alt", "Chip Image", 1, "button-image-icon", 3, "src"], [1, "app-chip-title", 3, "textContent", "title"], ["type", "button", 1, "btn", "btn-transparent"], ["type", "button", 1, "btn", "btn-transparent", 3, "click"], [1, "app-icon", "wi", "wi-close"]], template: function ChipsComponent_Template(rf, ctx) { if (rf & 1) {
647
647
  const _r1 = i0.ɵɵgetCurrentView();
648
- i0.ɵɵtemplate(0, ChipsComponent_li_0_Template, 5, 16, "li", 1);
649
- i0.ɵɵelementStart(1, "li", 2)(2, "div", 3, 0);
650
- i0.ɵɵlistener("keydown.enter", function ChipsComponent_Template_div_keydown_enter_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.stopEvent($event)); })("keydown.delete", function ChipsComponent_Template_div_keydown_delete_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onTextDelete($event)); })("keydown.backspace", function ChipsComponent_Template_div_keydown_backspace_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputClear($event)); })("keydown.arrowleft", function ChipsComponent_Template_div_keydown_arrowleft_2_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowLeft()); })("keydown.arrowright", function ChipsComponent_Template_div_keydown_arrowright_2_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowRight()); });
648
+ i0.ɵɵrepeaterCreate(0, ChipsComponent_For_1_Template, 5, 16, "li", 1, i0.ɵɵrepeaterTrackByIdentity);
649
+ i0.ɵɵelementStart(2, "li", 2)(3, "div", 3, 0);
650
+ i0.ɵɵlistener("keydown.enter", function ChipsComponent_Template_div_keydown_enter_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.stopEvent($event)); })("keydown.delete", function ChipsComponent_Template_div_keydown_delete_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onTextDelete($event)); })("keydown.backspace", function ChipsComponent_Template_div_keydown_backspace_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputClear($event)); })("keydown.arrowleft", function ChipsComponent_Template_div_keydown_arrowleft_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowLeft()); })("keydown.arrowright", function ChipsComponent_Template_div_keydown_arrowright_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onArrowRight()); });
651
651
  i0.ɵɵelementEnd()();
652
652
  } if (rf & 2) {
653
- i0.ɵɵproperty("ngForOf", ctx.chipsList);
654
- i0.ɵɵadvance();
655
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c1, ctx.inputwidth === "full"));
656
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.SearchComponent, i3.TextContentDirective], encapsulation: 2 }); }
653
+ i0.ɵɵrepeater(ctx.chipsList);
654
+ i0.ɵɵadvance(2);
655
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c1, ctx.inputwidth === "full"));
656
+ } }, dependencies: [i1.NgClass, i2.SearchComponent, i3.TextContentDirective], encapsulation: 2 }); }
657
657
  }
658
658
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChipsComponent, [{
659
659
  type: Component,
660
660
  args: [{ selector: '[wmChips]', providers: [
661
661
  provideAs(ChipsComponent, NG_VALUE_ACCESSOR, true),
662
662
  provideAsWidgetRef(ChipsComponent)
663
- ], template: "<li class=\"chip-item {{chipclass && !bindChipclass ? chipclass : ''}}\"\n *ngFor=\"let item of chipsList; let $index = index;\"\n [ngClass]=\"{'active': item.active, 'disabled': disabled}\">\n <a href=\"javascript:void(0)\" class=\"app-chip\"\n (click)=\"handleChipClick($event, item)\"\n (keydown.delete)=\"onDelete($event, item, $index)\"\n (keydown.backspace)=\"onBackspace($event, item, $index)\"\n (keydown.arrowleft)=\"onArrowLeft(item, $index)\"\n (keydown.arrowright)=\"onArrowRight(item, $index)\"\n (focus)=\"handleChipFocus($event, item)\"\n (blur)=\"readonly ? 0 : item.active = false\"\n [ngClass]=\"{'no-drag': !enablereorder,'chip-duplicate bg-danger': item.isDuplicate, 'chip-picture': item.imgSrc}\">\n <img data-identifier=\"img\" alt=\"Chip Image\" class=\"button-image-icon\" [src]=\"item.imgSrc\" *ngIf=\"item.imgSrc\"/>\n <span class=\"app-chip-title\" [textContent]=\"item.label\" [title]=\"item.label\"></span>\n <button type=\"button\" [attr.aria-label]=\"'Clear ' + item.label\" class=\"btn btn-transparent\"\n (click)=\"removeItem($event, item, $index);\" *ngIf=\"!readonly\">\n <i class=\"app-icon wi wi-close\"></i>\n </button>\n </a>\n</li>\n<li class=\"app-chip-search\" [ngClass]=\"{'full-width': inputwidth === 'full'}\">\n <div #search wmSearch class=\"app-chip-input\"\n name=\"app-chip-search\"\n submit.event=\"addItem($event, widget)\"\n beforeservicecall.event=\"invokeOnBeforeServiceCall(inputData)\"\n disabled.bind=\"disabled || readonly || saturate\"\n datafield.bind=\"datafield\"\n allowonlyselect.bind=\"allowonlyselect\"\n searchkey.bind=\"searchkey\"\n orderby.bind=\"orderby\"\n placeholder.bind=\"saturate ? maxSizeReached : placeholder\"\n showsearchicon.bind=\"showsearchicon\"\n tabindex.bind=\"tabindex\"\n minchars.bind=\"minchars\"\n debouncetime.bind=\"debouncetime\"\n matchmode.bind=\"matchmode\"\n datacompletemsg.bind = \"datacompletemsg\"\n groupby.bind=\"groupby\"\n match.bind=\"match\"\n dateformat.bind=\"dateformat\"\n (keydown.enter)=\"stopEvent($event)\"\n (keydown.delete)=\"onTextDelete($event)\"\n (keydown.backspace)=\"onInputClear($event)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight()\">\n </div>\n</li>\n" }]
663
+ ], template: "@for (item of chipsList; track item) {\n <li class=\"chip-item {{chipclass && !bindChipclass ? chipclass : ''}}\"\n [ngClass]=\"{'active': item.active, 'disabled': disabled}\">\n <a href=\"javascript:void(0)\" class=\"app-chip\"\n (click)=\"handleChipClick($event, item)\"\n (keydown.delete)=\"onDelete($event, item, $index)\"\n (keydown.backspace)=\"onBackspace($event, item, $index)\"\n (keydown.arrowleft)=\"onArrowLeft(item, $index)\"\n (keydown.arrowright)=\"onArrowRight(item, $index)\"\n (focus)=\"handleChipFocus($event, item)\"\n (blur)=\"readonly ? 0 : item.active = false\"\n [ngClass]=\"{'no-drag': !enablereorder,'chip-duplicate bg-danger': item.isDuplicate, 'chip-picture': item.imgSrc}\">\n @if (item.imgSrc) {\n <img data-identifier=\"img\" alt=\"Chip Image\" class=\"button-image-icon\" [src]=\"item.imgSrc\"/>\n }\n <span class=\"app-chip-title\" [textContent]=\"item.label\" [title]=\"item.label\"></span>\n @if (!readonly) {\n <button type=\"button\" [attr.aria-label]=\"'Clear ' + item.label\" class=\"btn btn-transparent\"\n (click)=\"removeItem($event, item, $index);\">\n <i class=\"app-icon wi wi-close\"></i>\n </button>\n }\n </a>\n </li>\n}\n<li class=\"app-chip-search\" [ngClass]=\"{'full-width': inputwidth === 'full'}\">\n <div #search wmSearch class=\"app-chip-input\"\n name=\"app-chip-search\"\n submit.event=\"addItem($event, widget)\"\n beforeservicecall.event=\"invokeOnBeforeServiceCall(inputData)\"\n disabled.bind=\"disabled || readonly || saturate\"\n datafield.bind=\"datafield\"\n allowonlyselect.bind=\"allowonlyselect\"\n searchkey.bind=\"searchkey\"\n orderby.bind=\"orderby\"\n placeholder.bind=\"saturate ? maxSizeReached : placeholder\"\n showsearchicon.bind=\"showsearchicon\"\n tabindex.bind=\"tabindex\"\n minchars.bind=\"minchars\"\n debouncetime.bind=\"debouncetime\"\n matchmode.bind=\"matchmode\"\n datacompletemsg.bind = \"datacompletemsg\"\n groupby.bind=\"groupby\"\n match.bind=\"match\"\n dateformat.bind=\"dateformat\"\n (keydown.enter)=\"stopEvent($event)\"\n (keydown.delete)=\"onTextDelete($event)\"\n (keydown.backspace)=\"onInputClear($event)\"\n (keydown.arrowleft)=\"onArrowLeft()\"\n (keydown.arrowright)=\"onArrowRight()\">\n </div>\n</li>\n" }]
664
664
  }], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
665
665
  type: Attribute,
666
666
  args: ['displayfield.bind']
@@ -689,4 +689,4 @@ export class ChipsComponent extends DatasetAwareFormComponent {
689
689
  args: [SearchComponent, /* TODO: add static flag */ { static: true }]
690
690
  }] }); })();
691
691
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChipsComponent, { className: "ChipsComponent", filePath: "chips.component.ts", lineNumber: 53 }); })();
692
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NoaXBzL3NyYy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvY2hpcHMvc3JjL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFlLHFCQUFxQixFQUFFLHNCQUFzQixFQUFpQixTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEwsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEVBQUUsT0FBTyxFQUNoQixPQUFPLEVBQ1AsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUM3QixLQUFLLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLFdBQVcsQ0FB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aUJBQU0sRUFDTDs7WUE3Q2dCLHVDQUFjO1lBbUJQLGNBQWlEO1lBQWpELCtFQUFpRDs7O2lGRGdDaEUsY0FBYztjQVIxQixTQUFTOzJCQUNJLFdBQVcsYUFFVjtvQkFDUCxTQUFTLGlCQUFpQixpQkFBaUIsRUFBRSxJQUFJLENBQUM7b0JBQ2xELGtCQUFrQixnQkFBZ0I7aUJBQ3JDOztzQkF5Q0ksU0FBUzt1QkFBQyxtQkFBbUI7O3NCQUM3QixTQUFTO3VCQUFDLHdCQUF3Qjs7c0JBQ2xDLFNBQVM7dUJBQUMsc0JBQXNCOztzQkFDaEMsU0FBUzt1QkFBQyxnQkFBZ0I7O3NCQUMxQixTQUFTO3VCQUFDLGNBQWM7O3NCQUN4QixTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTdCK0IsZUFBZTtrQkFBdEYsU0FBUzttQkFBQyxlQUFlLEVBQUUsMkJBQTJCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOztrRkFoQjdELGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGRlYm91bmNlLFxuICAgIGlzQXBwbGVQcm9kdWN0LFxuICAgIGlzRGVmaW5lZCxcbiAgICB0b0Jvb2xlYW5cbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQUxMRklFTERTLCBjb25maWd1cmVEbkQsIERhdGFTZXRJdGVtLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldFVuaXFPYmpzQnlEYXRhRmllbGQsIElXaWRnZXRDb25maWcsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9zZWFyY2gnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jaGlwcy5wcm9wcyc7XG5pbXBvcnQge1xuICAgIGNsb25lLFxuICAgIGZpbHRlcixcbiAgICBmaW5kLFxuICAgIGZpbmRJbmRleCxcbiAgICBmb3JFYWNoLCBpc0FycmF5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNPYmplY3QsIG1heCwgcHVsbEF0LCByZWR1Y2UsXG4gICAgc2xpY2UsXG4gICAgdG9TdHJpbmcsXG4gICAgdHJpbVxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWNoaXBzJyxcbiAgICBob3N0Q2xhc3M6ICdhcHAtY2hpcHMgbmF2IG5hdi1waWxscyBsaXN0LWlubGluZSdcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtQ2hpcHNdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoQ2hpcHNDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoaXBzQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hpcHNDb21wb25lbnQgZXh0ZW5kcyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIHB1YmxpYyBhbGxvd29ubHlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHVibGljIGVuYWJsZXJlb3JkZXI6IGJvb2xlYW47XG4gICAgcHVibGljIG1heHNpemU6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5wdXR3aWR0aDogYW55O1xuICAgIHByaXZhdGUgZGVib3VuY2V0aW1lOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY2hpcHNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXhTaXplUmVhY2hlZCA9ICdNYXggc2l6ZSByZWFjaGVkJztcbiAgICBwcml2YXRlIHNhdHVyYXRlOiBib29sZWFuO1xuICAgIHByaXZhdGUgbmV4dEl0ZW1JbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgZ2V0VHJhbnNmb3JtZWREYXRhOiAoZGF0YSwgaXRlbUluZGV4PykgPT4gRGF0YVNldEl0ZW1bXTtcbiAgICBwcml2YXRlIGlucHV0cG9zaXRpb246IHN0cmluZztcbiAgICBwcml2YXRlIHNob3dzZWFyY2hpY29uOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZChTZWFyY2hDb21wb25lbnQsIC8qIFRPRE86IGFkZCBzdGF0aWMgZmxhZyAqLyB7c3RhdGljOiB0cnVlfSkgc2VhcmNoQ29tcG9uZW50OiBTZWFyY2hDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICBwcml2YXRlIHNlYXJjaGtleTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbDogYW55O1xuICAgIHByaXZhdGUgbGltaXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jbGFzc0V4cHI6IGFueTtcbiAgICBwcml2YXRlIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBtYXRjaG1vZGU6IHN0cmluZztcblxuICAgIC8vIGdldHRlciBzZXR0ZXIgaXMgYWRkZWQgdG8gcGFzcyB0aGUgZGF0YXNvdXJjZSB0byBzZWFyY2hjb21wb25lbnQuXG4gICAgZ2V0IGRhdGFzb3VyY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXNvdXJjZShudikge1xuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gbnY7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzb3VyY2UgPSBudjtcbiAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsKHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlmaWVsZC5iaW5kJykgcHJpdmF0ZSBiaW5kRGlzcGxheUZpZWxkLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5ZXhwcmVzc2lvbi5iaW5kJykgcHJpdmF0ZSBiaW5kRGlzcGxheUV4cHIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlpbWFnZXNyYy5iaW5kJykgcHJpdmF0ZSBiaW5kRGlzcGxheUltZ1NyYyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YWZpZWxkLmJpbmQnKSBwcml2YXRlIGJpbmREYXRhRmllbGQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHByaXZhdGUgYmluZERhdGFTZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2NoaXBjbGFzcy5iaW5kJykgcHJpdmF0ZSBiaW5kQ2hpcGNsYXNzLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICAvLyBzZXQgdGhlIHNob3dzZWFyY2hpY29uIGFzIGZhbHNlIGJ5IGRlZmF1bHQuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuc2hvd3NlYXJjaGljb24pKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dzZWFyY2hpY29uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uZXh0SXRlbUluZGV4ID0gMDsgLy8gZGVmYXVsdCBjaGlwIGluZGV4XG5cbiAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsID0gZGVib3VuY2UoKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVyeU1vZGVsKHZhbCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmluZENoaXBjbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHRoaXMuY2hpcHNMaXN0LCAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGl0ZW0sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDE1MCk7XG5cbiAgICAgICAgY29uc3QgZGF0YXNldFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXNldCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgICAgICAvLyBjbGVhcmluZyB0aGUgbGFzdCByZXN1bHRzIHdoZW4gZGF0YXNldCBpcyByZWFzc2lnbmVkXG4gICAgICAgICAgICAodGhpcy5zZWFyY2hDb21wb25lbnQgYXMgYW55KS5fbGFzdFJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubmV4dEl0ZW1JbmRleCA9IHRoaXMuZGF0YXNldEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCh0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXZhbHVlJC5zdWJzY3JpYmUoKHZhbDogQXJyYXk8c3RyaW5nPiB8IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHF1ZXJ5TW9kZWwgb25seSB3aGVuIHBhcmVudFJlZiBpcyBhdmFpbGFibGUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhZmllbGQgaXMgQUxMRklMRURTIGRvIG5vdCBmZXRjaCB0aGUgcmVjb3Jkc1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcXVlcnkgbW9kZWwgd2l0aCB0aGUgdmFsdWVzIHdlIGhhdmVcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlpbWFnZXNyYyA9IHRoaXMuYmluZERpc3BsYXlJbWdTcmM7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRpc3BsYXlpbWFnZXNyYyA9IHRoaXMuZGlzcGxheWltYWdlc3JjO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWxhYmVsID0gdGhpcy5iaW5kRGlzcGxheUV4cHI7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRpc3BsYXlsYWJlbCA9IHRoaXMuZGlzcGxheWZpZWxkO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhZmllbGQgPSB0aGlzLmJpbmREYXRhRmllbGQgfHwgdGhpcy5kYXRhZmllbGQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkYXRhc2V0ID0gdGhpcy5iaW5kRGF0YVNldDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YXNldCA9IHRoaXMuZGF0YXNldDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuc2VhcmNoa2V5ID0gdGhpcy5zZWFyY2hrZXk7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmxpbWl0ID0gdGhpcy5saW1pdDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGVib3VuY2V0aW1lID0gdGhpcy5kZWJvdW5jZXRpbWU7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lm1hdGNobW9kZSA9IHRoaXMubWF0Y2htb2RlO1xuXG4gICAgICAgIHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhID0gKHZhbCwgaXNDdXN0b20pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaENvbXBvbmVudC5nZXRUcmFuc2Zvcm1lZERhdGEoW3ZhbF0sIHRoaXMubmV4dEl0ZW1JbmRleCsrLCBpc0N1c3RvbSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGV2YWx1YXRlZCBjbGFzcyBleHByZXNzaW9uLlxuICAgICAqIEBwYXJhbSAkaW5kZXggaW5kZXggb2YgdGhlIGNoaXBcbiAgICAgKiBAcGFyYW0gaXRlbSBjaGlwIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXksIHZhbHVlLCBsYWJlbFxuICAgICAqIEByZXR1cm5zIHthbnl9IGV2YWx1YXRlZCBjbGFzcyBleHByZXNzaW9uIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWdpc3RlckNoaXBJdGVtQ2xhc3MoaXRlbSwgJGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRDaGlwY2xhc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X2NoaXBJdGVtQ2xhc3NfJHskaW5kZXh9YDtcbiAgICAgICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IHNhbWUgYXMgbGlzdCBpdGVtIGNsYXNzXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCh0aGlzLmJpbmRDaGlwY2xhc3MsIHRoaXMudmlld1BhcmVudCwge2l0ZW0sICRpbmRleH0sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5SXRlbUNsYXNzKGdldENvbmRpdGlvbmFsQ2xhc3Nlcyhudiwgb3YpLCAkaW5kZXgpO1xuICAgICAgICAgICAgfSwgd2F0Y2hOYW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5SXRlbUNsYXNzKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgY2hpcEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNoaXAtaXRlbScpLml0ZW0oaW5kZXgpO1xuICAgICAgICAkKGNoaXBJdGVtKS5yZW1vdmVDbGFzcyh2YWwudG9SZW1vdmUpLmFkZENsYXNzKHZhbC50b0FkZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVzKCkge1xuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IGdldFVuaXFPYmpzQnlEYXRhRmllbGQodGhpcy5jaGlwc0xpc3QsIHRoaXMuZGF0YWZpZWxkLCB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgcXVlcnlNb2RlbC5cbiAgICAvLyBkZWZhdWx0IGNhbGwgdG8gZ2V0IHRoZSBkZWZhdWx0IGRhdGEgY2FuIGJlIGRvbmUgb25seSB3aGVuIGRlZmF1bHRRdWVyeSBpcyB0cnVlLlxuICAgIHByaXZhdGUgdXBkYXRlUXVlcnlNb2RlbChkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xvbmUgdGhlIGRhdGEgYXMgdGhlIHVwZGF0aW9ucyBvbiBkYXRhIHdpbGwgY2hhbmdlIHRoZSBkYXRhdmFsdWUuXG4gICAgICAgIGxldCBkYXRhVmFsdWUgPSBjbG9uZShkYXRhKTtcbiAgICAgICAgY29uc3QgcHJldkNoaXBzTGlzdCA9IHRoaXMuY2hpcHNMaXN0O1xuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgbW9kZWwgd2hlbiBtb2RlbCBoYXMgaXRlbXMgbW9yZSB0aGFuIG1heHNpemVcbiAgICAgICAgaWYgKHRoaXMubWF4c2l6ZSAmJiBkYXRhVmFsdWUubGVuZ3RoID4gdGhpcy5tYXhzaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBkYXRhVmFsdWUgPSBzbGljZShkYXRhVmFsdWUsIDAsIHRoaXMubWF4c2l6ZSk7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoUXVlcnk6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIGVhY2ggdmFsdWUgaW4gZGF0YXZhbHVlLFxuICAgICAgICAgKiAxLiBjaGVjayB3aGV0aGVyIHZhbHVlIGlzIGluIGRhdGFzZXRJdGVtcywgaWYgaXRlbSBpcyBmb3VuZCwgYWRkZCB0byB0aGUgY2hpcHNMaXN0LlxuICAgICAgICAgKiAyLiBlbHNlIG1ha2UgYSBkZWZhdWx0IHF1ZXJ5IHRvIHRoZSBmaWx0ZXIgYW5kIGdldCB0aGUgcmVjb3JkLlxuICAgICAgICAgKiAzLiBJbiBzdGVwIDIsIGlmIGRhdGF2YWx1ZSBpcyBub3QgQUxMRklFTERTLCB0aGVuIG1ha2UgYSBxdWVyeS4gRXh0cmFjdCB0aGUgY2hpcHNMaXN0IGZyb20gdGhlIHF1ZXJ5IHJlc3BvbnNlLlxuICAgICAgICAgKiA0LiBJZiB0aGVyZSBpcyBubyByZXNwb25zZSBmb3IgdGhlIHZhbHVlIGFuZCBhbGxvd29ubHlzZWxlY3QgaXMgdHJ1ZSwgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhdmFsdWUuIFNvIHRoYXQgZGF0YXZhbHVlIGp1c3QgY29udGFpbnMgdGhlIHZhbGlkIHZhbHVlcy5cbiAgICAgICAgICogNS4gSW4gc3RlcCAyLCBpZiBkYXRhdmFsdWUgaXMgQUxMRklFTERTIGFuZCB2YWx1ZSBpcyBvYmplY3QsIHRoZW4ganVzdCBwcmVwYXJlIHRoZSBkYXRhc2V0SXRlbSBmcm9tIHRoZSB2YWx1ZS5cbiAgICAgICAgICogNi4gSWYgdmFsdWUgaXMgbm90IG9iamVjdCBhbmQgYWxsb3dvbmx5c2VsZWN0IGlzIGZhbHNlLCB0aGVuIGNyZWF0ZSBhIGN1c3RvbU1vZGVsIGFuZCByZXBsYWNlIHRoaXMgdmFsdWUgd2l0aCBjdXN0b21Nb2RlbCBhbmQgcHJlcGFyZSBkYXRhc2V0SXRlbSBmcm9tIHRoaXMgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWw6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRm91bmQgPSBmaW5kKHRoaXMuZGF0YXNldEl0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBpc0VxdWFsKGl0ZW0udmFsdWUsIHZhbCkgOiB0b1N0cmluZyhpdGVtLnZhbHVlKSA9PT0gdG9TdHJpbmcodmFsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXRlbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChpdGVtRm91bmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCAhPT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUXVlcnkucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFPYmosIGlzQ3VzdG9tID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSB0aGlzLmNyZWF0ZUN1c3RvbURhdGFNb2RlbCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpLCAxLCBkYXRhT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGN1c3RvbSBjaGlwcyBpcyBhbHJlYWR5IGdlbmVyYXRlZCwgdmFsIHdpbGwgYmUgb2JqZWN0IGFzIHsnZGF0YUZpZWxkX3ZhbCc6ICdlbnRlcmVkX3ZhbCd9XG4gICAgICAgICAgICAgICAgICAgIC8vIEhlbmNlIGNoZWNrIHRoaXMgdmFsIGluIHByZXZpb3VzIGNoaXBMaXN0IGFuZCBhc3NpZ24gdGhlIGlzY3VzdG9tIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkNoaXBPYmogPSBwcmV2Q2hpcHNMaXN0LmZpbmQob2JqID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKG9iai52YWx1ZSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Q2hpcE9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNDdXN0b20gPSBwcmV2Q2hpcE9iai5pc2N1c3RvbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YU9iaiB8fCB2YWw7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShkYXRhT2JqLCBpc0N1c3RvbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDdXN0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgKGNoaXBPYmogYXMgYW55KS5pc2N1c3RvbSA9IGlzQ3VzdG9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBtYWtlIGRlZmF1bHQgcXVlcnkgd2l0aCBhbGwgdGhlIHZhbHVlcyBhbmQgaWYgcmVzcG9uc2UgZm9yIHRoZSB2YWx1ZSBpcyBub3QgaW4gZGF0YXZhbHVlIHRoZW4gYWRkIGEgY3VzdG9tIGNoaXAgb2JqZWN0LlxuICAgICAgICBpZiAoc2VhcmNoUXVlcnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZ2V0RGVmYXVsdE1vZGVsKHNlYXJjaFF1ZXJ5LCB0aGlzLm5leHRJdGVtSW5kZXgpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IHRoaXMuY2hpcHNMaXN0LmNvbmNhdChyZXNwb25zZSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWw6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0V4aXN0cyA9IGZpbmQodGhpcy5jaGlwc0xpc3QsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGxvd29ubHlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKHZhbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hpcE9iaiBhcyBhbnkpLmlzY3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZhdWx0IGNoaXAgZGF0YSBpcyBhZGRpbmcgZm9jdXMgb24gdG8gdGhlIHNlYXJjaCBpbnB1dC4gSGVuY2UgdGhpcyBmbGFnIGhlbHBzIG5vdCB0byBmb2N1cy5cbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKHRydWUpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGVzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlYXJjaE1vZGVsKGRlZmF1bHRRdWVyeT86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIC8vIGNsZWFyIHNlYXJjaCB3aWxsIGVtcHR5IHRoZSBxdWVyeSBtb2RlbCBhbmQgZ2V0cyB0aGUgZGF0YSB3aGVuIG1pbmNoYXJzIGlzIDAgKGkuZS4gYXV0b2NvbXBsZXRlKSBvbiBmb2N1c1xuICAgICAgICAvLyBkZWZhdWx0UXVlcnkgZmxhZyBpcyBzZXQgd2hlbiB3aWRnZXQgaXMgbm90IGFjdGl2ZS4gVGhpcyB3aWxsIG9ubHkgbG9hZCB0aGUgYXV0b2NvbXBsZXRlIGRyb3B1cCB3aXRoIG1pbmNoYXJzIGFzIDAgd2hlbiB3aWRnZXQgaXMgZm9jdXNlZC9hY3RpdmVcbiAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuY2xlYXJTZWFyY2godW5kZWZpbmVkLCAhdGhpcy5taW5jaGFycyAmJiAhZGVmYXVsdFF1ZXJ5KTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3SXRlbSB0byB0aGUgbGlzdFxuICAgIHByaXZhdGUgYWRkSXRlbSgkZXZlbnQ6IEV2ZW50LCB3aWRnZXQ/OiBTZWFyY2hDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoQ29tcG9uZW50ID0gd2lkZ2V0O1xuICAgICAgICBsZXQgYWxsb3dBZGQ7XG4gICAgICAgIGxldCBjaGlwT2JqO1xuXG4gICAgICAgIGlmIChzZWFyY2hDb21wb25lbnQgJiYgaXNEZWZpbmVkKHNlYXJjaENvbXBvbmVudC5kYXRhdmFsdWUpICYmIHNlYXJjaENvbXBvbmVudC5xdWVyeU1vZGVsICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKCFzZWFyY2hDb21wb25lbnQucXVlcnkgfHwgIXRyaW0oc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaXBPYmogPSBzZWFyY2hDb21wb25lbnQucXVlcnlNb2RlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93b25seXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkYXRhT2JqO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSAmJiB0cmltKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gdGhpcy5jcmVhdGVDdXN0b21EYXRhTW9kZWwodGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gaWYgdGhlIGN1c3RvbSBjaGlwIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhT2JqIHx8IHRyaW0odGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShkYXRhLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjaGlwT2JqID0gdHJhbnNmb3JtZWREYXRhWzBdO1xuICAgICAgICAgICAgICAgIGNoaXBPYmouaXNjdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQoY2hpcE9iaikgfHwgY2hpcE9iaiA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsbG93QWRkID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVhZGQnLCB7JGV2ZW50LCBuZXdJdGVtOiBjaGlwT2JqfSk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChhbGxvd0FkZCkgJiYgIXRvQm9vbGVhbihhbGxvd0FkZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRHVwbGljYXRlKGNoaXBPYmopKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTW9kZWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hpcEl0ZW1DbGFzcyhjaGlwT2JqLCB0aGlzLmNoaXBzTGlzdC5sZW5ndGgpO1xuICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuXG4gICAgICAgIGlmICghdGhpcy5kYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IFtjaGlwT2JqLnZhbHVlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IFsuLi50aGlzLl9tb2RlbEJ5VmFsdWUsIGNoaXBPYmoudmFsdWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlT25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5fbW9kZWxCeVZhbHVlLCAkZXZlbnQgfHwge30sIHRydWUpO1xuXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYWRkJywgeyRldmVudCwgJGl0ZW06IGNoaXBPYmp9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcblxuICAgICAgICAvLyByZXNldCBpbnB1dCBib3ggd2hlbiBpdGVtIGlzIGFkZGVkLlxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTW9kZWwoKTtcblxuICAgICAgICAvLyBzdG9wIHRoZSBldmVudCB0byBub3QgdG8gY2FsbCB0aGUgc3VibWl0IGV2ZW50IG9uIGVudGVyIHByZXNzLlxuICAgICAgICBpZiAoJGV2ZW50ICYmICgoJGV2ZW50IGFzIGFueSkua2V5ID09PSAnRW50ZXInIHx8ICgkZXZlbnQgYXMgYW55KS5rZXlDb2RlID09PSAxMykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcEV2ZW50KCRldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGRhdGF2YWx1ZSBvYmplY3QgZnJvbSBhIHN0cmluZyhqdW5rKSB2YWx1ZSB3aGVuIGRhdGFmaWVsZCBpcyBhbGxGaWVsZHMuXG4gICAgcHJpdmF0ZSBjcmVhdGVDdXN0b21EYXRhTW9kZWwodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5kaXNwbGF5ZmllbGQgfHwgKHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMgPyB0aGlzLmRhdGFmaWVsZCA6IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tT2JqID0ge307XG4gICAgICAgICAgICBjdXN0b21PYmpba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBjdXN0b21PYmo7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBuZXdJdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgcHJpdmF0ZSBpc0R1cGxpY2F0ZShpdGVtOiBEYXRhU2V0SXRlbSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLmNoaXBzTGlzdCwge3ZhbHVlOiBpdGVtLnZhbHVlfSkgPiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluZEluZGV4KHRoaXMuY2hpcHNMaXN0LCB7a2V5OiBpdGVtLmtleX0pID4gLTE7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgbWF4IHNpemUgaXMgcmVhY2hlZFxuICAgIHByaXZhdGUgdXBkYXRlTWF4U2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zYXR1cmF0ZSA9IHRoaXMubWF4c2l6ZSA+IDAgJiYgdGhpcy5jaGlwc0xpc3QubGVuZ3RoID09PSB0aGlzLm1heHNpemU7XG4gICAgfVxuXG4gICAgLy8gTWFrZXMgY2FsbCB0byBzZWFyY2hDb21wb25lbnQgdG8gZmlsdGVyIHRoZSBkYXRhU291cmNlIGJhc2VkIG9uIHRoZSBxdWVyeS5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdE1vZGVsKHF1ZXJ5OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ29tcG9uZW50LmdldERhdGFTb3VyY2UocXVlcnksIHRydWUsIGluZGV4KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIocXVlcnksIHF1ZXJ5VmFsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmluZChyZXNwb25zZSwge3ZhbHVlOiBxdWVyeVZhbH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGlwQ2xpY2soJGV2ZW50OiBFdmVudCwgY2hpcDogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoJGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgYW55KS5mb2N1cygpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoaXBjbGljaycsIHskZXZlbnQsICRpdGVtOiBjaGlwfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGlwRm9jdXMoJGV2ZW50OiBFdmVudCwgY2hpcDogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoY2hpcCBhcyBhbnkpLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hpcHNlbGVjdCcsIHskZXZlbnQsICRpdGVtOiBjaGlwfSk7XG4gICAgfVxuXG4gICAgLy8gVG8gYXZvaWQgZm9ybSBzdWJtaXQgb24gcHJlc3NpbmcgZW50ZXIga2V5XG4gICAgcHVibGljIHN0b3BFdmVudCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGV4dERlbGV0ZSgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmIChpc0FwcGxlUHJvZHVjdCkge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2xlYXIoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbklucHV0Q2xlYXIoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hpcHNMaXN0IHx8ICF0aGlzLmNoaXBzTGlzdC5sZW5ndGggfHwgdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5sYXN0KCkuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQmFja3NwYWNlKCRldmVudDogRXZlbnQsICRpdGVtOiBEYXRhU2V0SXRlbSwgJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oJGV2ZW50LCAkaXRlbSwgJGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlKCRldmVudDogRXZlbnQsICRpdGVtOiBEYXRhU2V0SXRlbSwgJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oJGV2ZW50LCAkaXRlbSwgJGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BcnJvd0xlZnQoJGl0ZW0/OiBEYXRhU2V0SXRlbSwgJGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBsZWZ0IGFycm93IGNsaWNrIHdoZW4gc2VhcmNoIGlucHV0IHF1ZXJ5IGlzIGVtcHR5LlxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5ICYmICFpc0RlZmluZWQoJGluZGV4KSAmJiAhaXNEZWZpbmVkKCRpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykubGFzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZ2V0KCRpbmRleCAtIDEpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BcnJvd1JpZ2h0KCRpdGVtPzogRGF0YVNldEl0ZW0sICRpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9uIHJpZ2h0IGFycm93IGNsaWNrIHdoZW4gc2VhcmNoIGlucHV0IHF1ZXJ5IGlzIGVtcHR5LlxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5ICYmICFpc0RlZmluZWQoJGluZGV4KSAmJiAhaXNEZWZpbmVkKCRpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRpbmRleCA8ICh0aGlzLmNoaXBzTGlzdC5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZ2V0KCRpbmRleCArIDEpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb2N1cyBzZWFyY2ggYm94LlxuICAgIHByaXZhdGUgZm9jdXNTZWFyY2hCb3goKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1jaGlwLWlucHV0ID4gaW5wdXQuYXBwLXRleHRib3gnKS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgaXRlbSBmcm9tIGxpc3RcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oJGV2ZW50OiBFdmVudCwgaXRlbTogRGF0YVNldEl0ZW0sIGluZGV4OiBudW1iZXIsIGNhbkZvY3VzPzogYm9vbGVhbikge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IGlzQXJyYXkoaW5kZXgpID8gaW5kZXggOiBbaW5kZXhdO1xuICAgICAgICBjb25zdCBmb2N1c0luZGV4ID0gbWF4KGluZGV4ZXMpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcmVkdWNlKGluZGV4ZXMsIChyZXN1bHQsIGkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpcHNMaXN0W2ldKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlbGV0aW9uIGlmIHRoZSBiZWZvcmUtcmVtb3ZlIGV2ZW50IGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAgICAgICAgY29uc3QgYWxsb3dSZW1vdmUgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlbW92ZScsIHskZXZlbnQsICRpdGVtOiBpdGVtcy5sZW5ndGggPT09IDEgPyBpdGVtc1swXSA6IGl0ZW1zfSk7XG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dSZW1vdmUpICYmICF0b0Jvb2xlYW4oYWxsb3dSZW1vdmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2RGF0YXZhbHVlID0gY2xvbmUodGhpcy5kYXRhdmFsdWUpO1xuXG4gICAgICAgIC8vIGZvY3VzIG5leHQgY2hpcCBhZnRlciBkZWxldGlvbi5cbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIGNoaXBzIGluIHRoZSBsaXN0IGZvY3VzIHNlYXJjaCBib3hcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlwc0xlbmd0aCA9IHRoaXMuY2hpcHNMaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0ICRjaGlwc0xpc3QgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKTtcblxuICAgICAgICAgICAgaWYgKCFjaGlwc0xlbmd0aCB8fCAhY2FuRm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChjaGlwc0xlbmd0aCAtIDEpIDwgZm9jdXNJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGZvY3VzIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBjaGlwcyBsZW5ndGggc2VsZWN0IGxhc3QgY2hpcFxuICAgICAgICAgICAgICAgICRjaGlwc0xpc3QuZ2V0KGNoaXBzTGVuZ3RoIC0gMSkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgc2V0IHRoZSBzdWNjZWVkaW5nIGNoaXAgYXMgYWN0aXZlIGlmIHRoZXJlIGlzIGEgY2hpcCBuZXh0IHRvIHRoZSBjdXJyZW50IGNoaXAuXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3RbZm9jdXNJbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAkY2hpcHNMaXN0LmdldChmb2N1c0luZGV4KS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwdWxsZWRJdGVtcyA9IHB1bGxBdCh0aGlzLmNoaXBzTGlzdCwgaW5kZXhlcyk7XG5cbiAgICAgICAgcHVsbGVkSXRlbXMuZm9yRWFjaChkYXRhc2V0SXRlbSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBmaWx0ZXIodGhpcy5fbW9kZWxCeVZhbHVlLCB2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhKGlzT2JqZWN0KHZhbCkgPyBpc0VxdWFsKHZhbCwgZGF0YXNldEl0ZW0udmFsdWUpIDogdG9TdHJpbmcodmFsKSA9PT0gdG9TdHJpbmcoZGF0YXNldEl0ZW0udmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgeyRldmVudCwgbmV3VmFsOiB0aGlzLmRhdGF2YWx1ZSwgb2xkVmFsOiBwcmV2RGF0YXZhbHVlfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVNYXhTaXplKCk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyZW1vdmUnLCB7JGV2ZW50LCAkaXRlbTogaXRlbXMubGVuZ3RoID09PSAxID8gaXRlbXNbMF0gOiBpdGVtc30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN3YXBzIGl0ZW1zIGluIGFuIGFycmF5IGlmIHByb3ZpZGVkIHdpdGggaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0gZGF0YSA6LSBhcnJheSB0byBiZSBzd2FwcGVkXG4gICAgICogQHBhcmFtIG5ld0luZGV4IDotIG5ldyBpbmRleCBmb3IgdGhlIGVsZW1lbnQgdG8gYmUgcGxhY2VkXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCA6LSB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN3YXBFbGVtZW50c0luQXJyYXkoZGF0YTogQXJyYXk8YW55PiwgbmV3SW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW0gPSBwdWxsQXQoZGF0YSwgY3VycmVudEluZGV4KVswXTtcbiAgICAgICAgZGF0YS5zcGxpY2UobmV3SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWxzIHRoZSByZW9yZGVyIGJ5IHJlc2V0aW5nIHRoZSBlbGVtZW50cyB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldFJlb3JkZXIoKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlRGF0YSgnb2xkSW5kZXgnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGludm9rZU9uQmVmb3JlU2VydmljZUNhbGwoaW5wdXREYXRhKSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlc2VydmljZWNhbGwnLCB7aW5wdXREYXRhfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdyZW1vdmUnIHx8IGV2ZW50TmFtZSA9PT0gJ2JlZm9yZXJlbW92ZScgfHwgZXZlbnROYW1lID09PSAnY2hpcHNlbGVjdCdcbiAgICAgICAgICAgIHx8IGV2ZW50TmFtZSA9PT0gJ2NoaXBjbGljaycgfHwgZXZlbnROYW1lID09PSAnYWRkJyB8fCBldmVudE5hbWUgPT09ICdyZW9yZGVyJyB8fCBldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlndXJlcyB0aGUgcmVvcmRhYmxlIGZlYXR1cmUgaW4gY2hpcHMgd2lkZ2V0cy5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZURuRCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGl0ZW1zOiAnPiBsaTpub3QoLmFwcC1jaGlwLXNlYXJjaCknLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdjaGlwLXBsYWNlaG9sZGVyJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbmZpZ3VyZURuRCh0aGlzLiRlbGVtZW50LCBvcHRpb25zLCB0aGlzLm9uUmVvcmRlclN0YXJ0LmJpbmQodGhpcyksIHRoaXMudXBkYXRlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJlZCBvbiBkcmFnIHN0YXJ0IHdoaWxlIHJlb3JkZXJpbmcuXG4gICAgcHJpdmF0ZSBvblJlb3JkZXJTdGFydChldnQ6IEV2ZW50LCB1aTogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGhlbHBlciA9ICh1aSBhcyBhbnkpLmhlbHBlcjtcbiAgICAgICAgLy8gaW5jcmVhc2luZyB0aGUgd2lkdGggb2YgdGhlIGRyYWdnZWQgaXRlbSBieSAxXG4gICAgICAgIGhlbHBlci53aWR0aChoZWxwZXIud2lkdGgoKSArIDEpO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmRhdGEoJ29sZEluZGV4JywgKHVpIGFzIGFueSkuaXRlbS5pbmRleCgpIC0gKHRoaXMuaW5wdXRwb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IDEgOiAwKSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlcyB0aGUgY2hpcHNMaXN0IGFuZCBkYXRhdmFsdWUgb24gcmVvcmRlci5cbiAgICBwcml2YXRlIHVwZGF0ZSgkZXZlbnQ6IEV2ZW50LCB1aTogT2JqZWN0KSB7XG4gICAgICAgIGxldCBjaGFuZ2VkSXRlbSxcbiAgICAgICAgICAgIG5ld0luZGV4LFxuICAgICAgICAgICAgb2xkSW5kZXg7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgaXRlbSBhdCBwb3NpdGlvbiBiZWZvcmUgZHJhZyBhbmQgYWZ0ZXIgdGhlIHJlb3JkZXIuXG4gICAgICAgIG5ld0luZGV4ID0gKHVpIGFzIGFueSkuaXRlbS5pbmRleCgpIC0gKHRoaXMuaW5wdXRwb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IDEgOiAwKTtcbiAgICAgICAgb2xkSW5kZXggPSB0aGlzLiRlbGVtZW50LmRhdGEoJ29sZEluZGV4Jyk7XG5cbiAgICAgICAgbmV3SW5kZXggPSB0aGlzLmNoaXBzTGlzdC5sZW5ndGggPT09IG5ld0luZGV4ID8gbmV3SW5kZXggLSAxIDogbmV3SW5kZXg7XG4gICAgICAgIGNoYW5nZWRJdGVtID0ge1xuICAgICAgICAgICAgb2xkSW5kZXg6IG9sZEluZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICAgICAgaXRlbTogdGhpcy5jaGlwc0xpc3Rbb2xkSW5kZXhdXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0luZGV4ID09PSBvbGRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlb3JkZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2VkSXRlbS5pdGVtID0gdGhpcy5jaGlwc0xpc3Rbb2xkSW5kZXhdO1xuXG4gICAgICAgIGNvbnN0IGFsbG93UmVvcmRlciA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVvcmRlcicsIHskZXZlbnQsICRkYXRhOiB0aGlzLmNoaXBzTGlzdCwgJGNoYW5nZWRJdGVtOiBjaGFuZ2VkSXRlbX0pO1xuXG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dSZW9yZGVyKSAmJiB0b0Jvb2xlYW4oYWxsb3dSZW9yZGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZW9yZGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb2RpZnkgdGhlIGNoaXBzTGlzdCBhbmQgZGF0YXZhbHVlIGFmdGVyIHRoZSByZW9yZGVyLlxuICAgICAgICB0aGlzLnN3YXBFbGVtZW50c0luQXJyYXkodGhpcy5jaGlwc0xpc3QsIG5ld0luZGV4LCBvbGRJbmRleCk7XG4gICAgICAgIHRoaXMuc3dhcEVsZW1lbnRzSW5BcnJheSh0aGlzLl9tb2RlbEJ5VmFsdWUsIG5ld0luZGV4LCBvbGRJbmRleCk7XG5cbiAgICAgICAgY2hhbmdlZEl0ZW0uaXRlbSA9IHRoaXMuY2hpcHNMaXN0W25ld0luZGV4XTtcblxuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFsuLi50aGlzLmNoaXBzTGlzdF07XG5cbiAgICAgICAgdGhpcy5yZXNldFJlb3JkZXIoKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyZW9yZGVyJywgeyRldmVudCwgJGRhdGE6IHRoaXMuY2hpcHNMaXN0LCAkY2hhbmdlZEl0ZW06IGNoYW5nZWRJdGVtfSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y6IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFvcHRpb25zJykge1xuICAgICAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuZGF0YW9wdGlvbnMgPSBudjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YWZpZWxkJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YWZpZWxkID0gdGhpcy5kYXRhZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlmaWVsZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRpc3BsYXlsYWJlbCA9IHRoaXMuZGlzcGxheWZpZWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5ZXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5bGFiZWwgPSB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbiA/IHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uIDogdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWltYWdlc3JjJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlpbWFnZXNyYyA9IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyA/IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyA6IHRoaXMuZGlzcGxheWltYWdlc3JjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmxpbWl0ID0gdGhpcy5saW1pdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnbWF0Y2htb2RlJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubWF0Y2htb2RlID0gdGhpcy5tYXRjaG1vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2dyb3VwYnknKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5ncm91cGJ5ID0gdGhpcy5ncm91cGJ5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdlbmFibGVyZW9yZGVyJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3VpLXNvcnRhYmxlJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnNvcnRhYmxlKCdvcHRpb24nLCAnZGlzYWJsZWQnLCAhbnYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRG5EKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFkZCB0aGlzIGJsb2NrIHRvIGhhbmRsZSBkcmFnIHByZXZlbnRpb25cbiAgICAgICAgICAgIGNvbnN0IGNoaXBFbGVtZW50cyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmNoaXAtaXRlbSBhLmFwcC1jaGlwJyk7XG4gICAgICAgICAgICBpZiAoIW52KSB7XG4gICAgICAgICAgICAgICAgY2hpcEVsZW1lbnRzLmFkZENsYXNzKCduby1kcmFnJyk7XG4gICAgICAgICAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGRyYWcgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICBjaGlwRWxlbWVudHMub24oJ2RyYWdzdGFydCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlwRWxlbWVudHMucmVtb3ZlQ2xhc3MoJ25vLWRyYWcnKTtcbiAgICAgICAgICAgICAgICBjaGlwRWxlbWVudHMub2ZmKCdkcmFnc3RhcnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAncmVhZG9ubHknKSB7XG4gICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdyZWFkb25seScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdyZWFkb25seScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdpbnB1dHBvc2l0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgJGlucHV0RWwgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmFwcC1jaGlwLXNlYXJjaCcpO1xuICAgICAgICAgICAgaWYgKG52ID09PSAnZmlyc3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5wcmVwZW5kKCRpbnB1dEVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hcHBlbmQoJGlucHV0RWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdhdXRvZm9jdXMnICYmIG52KSB7XG4gICAgICAgICAgICAvLyBzZXR0aW5nIHRoZSBhdXRvZm9jdXMgb24gdGhlIGlucHV0IG9uY2UgYWZ0ZXIgZG9tIGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRjaGlwc0xpc3QgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtY2hpcC1pbnB1dCA+IGlucHV0LmFwcC10ZXh0Ym94Jyk7XG4gICAgICAgICAgICAgICAgaWYgKCRjaGlwc0xpc3QgJiYgJGNoaXBzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaEJveCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cbn1cbiIsIjxsaSBjbGFzcz1cImNoaXAtaXRlbSB7e2NoaXBjbGFzcyAmJiAhYmluZENoaXBjbGFzcyA/IGNoaXBjbGFzcyA6ICcnfX1cIlxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoaXBzTGlzdDsgbGV0ICRpbmRleCA9IGluZGV4O1wiXG4gICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpdGVtLmFjdGl2ZSwgJ2Rpc2FibGVkJzogZGlzYWJsZWR9XCI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiYXBwLWNoaXBcIlxuICAgICAgIChjbGljayk9XCJoYW5kbGVDaGlwQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgKGtleWRvd24uZGVsZXRlKT1cIm9uRGVsZXRlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uQmFja3NwYWNlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAgKGtleWRvd24uYXJyb3dsZWZ0KT1cIm9uQXJyb3dMZWZ0KGl0ZW0sICRpbmRleClcIlxuICAgICAgIChrZXlkb3duLmFycm93cmlnaHQpPVwib25BcnJvd1JpZ2h0KGl0ZW0sICRpbmRleClcIlxuICAgICAgIChmb2N1cyk9XCJoYW5kbGVDaGlwRm9jdXMoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgKGJsdXIpPVwicmVhZG9ubHkgPyAwIDogaXRlbS5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyduby1kcmFnJzogIWVuYWJsZXJlb3JkZXIsJ2NoaXAtZHVwbGljYXRlIGJnLWRhbmdlcic6IGl0ZW0uaXNEdXBsaWNhdGUsICdjaGlwLXBpY3R1cmUnOiBpdGVtLmltZ1NyY31cIj5cbiAgICAgICAgPGltZyBkYXRhLWlkZW50aWZpZXI9XCJpbWdcIiBhbHQ9XCJDaGlwIEltYWdlXCIgY2xhc3M9XCJidXR0b24taW1hZ2UtaWNvblwiIFtzcmNdPVwiaXRlbS5pbWdTcmNcIiAqbmdJZj1cIml0ZW0uaW1nU3JjXCIvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFwcC1jaGlwLXRpdGxlXCIgW3RleHRDb250ZW50XT1cIml0ZW0ubGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQ2xlYXIgJyArIGl0ZW0ubGFiZWxcIiBjbGFzcz1cImJ0biBidG4tdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKCRldmVudCwgaXRlbSwgJGluZGV4KTtcIiAqbmdJZj1cIiFyZWFkb25seVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB3aSB3aS1jbG9zZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9hPlxuPC9saT5cbjxsaSBjbGFzcz1cImFwcC1jaGlwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cInsnZnVsbC13aWR0aCc6IGlucHV0d2lkdGggPT09ICdmdWxsJ31cIj5cbiAgICA8ZGl2ICNzZWFyY2ggd21TZWFyY2ggY2xhc3M9XCJhcHAtY2hpcC1pbnB1dFwiXG4gICAgICAgICBuYW1lPVwiYXBwLWNoaXAtc2VhcmNoXCJcbiAgICAgICAgIHN1Ym1pdC5ldmVudD1cImFkZEl0ZW0oJGV2ZW50LCB3aWRnZXQpXCJcbiAgICAgICAgIGJlZm9yZXNlcnZpY2VjYWxsLmV2ZW50PVwiaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpXCJcbiAgICAgICAgIGRpc2FibGVkLmJpbmQ9XCJkaXNhYmxlZCB8fCByZWFkb25seSB8fCBzYXR1cmF0ZVwiXG4gICAgICAgICBkYXRhZmllbGQuYmluZD1cImRhdGFmaWVsZFwiXG4gICAgICAgICBhbGxvd29ubHlzZWxlY3QuYmluZD1cImFsbG93b25seXNlbGVjdFwiXG4gICAgICAgICBzZWFyY2hrZXkuYmluZD1cInNlYXJjaGtleVwiXG4gICAgICAgICBvcmRlcmJ5LmJpbmQ9XCJvcmRlcmJ5XCJcbiAgICAgICAgIHBsYWNlaG9sZGVyLmJpbmQ9XCJzYXR1cmF0ZSA/IG1heFNpemVSZWFjaGVkIDogcGxhY2Vob2xkZXJcIlxuICAgICAgICAgc2hvd3NlYXJjaGljb24uYmluZD1cInNob3dzZWFyY2hpY29uXCJcbiAgICAgICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgICAgICBtaW5jaGFycy5iaW5kPVwibWluY2hhcnNcIlxuICAgICAgICAgZGVib3VuY2V0aW1lLmJpbmQ9XCJkZWJvdW5jZXRpbWVcIlxuICAgICAgICAgbWF0Y2htb2RlLmJpbmQ9XCJtYXRjaG1vZGVcIlxuICAgICAgICAgZGF0YWNvbXBsZXRlbXNnLmJpbmQgPSBcImRhdGFjb21wbGV0ZW1zZ1wiXG4gICAgICAgICBncm91cGJ5LmJpbmQ9XCJncm91cGJ5XCJcbiAgICAgICAgIG1hdGNoLmJpbmQ9XCJtYXRjaFwiXG4gICAgICAgICBkYXRlZm9ybWF0LmJpbmQ9XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInN0b3BFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvblRleHREZWxldGUoJGV2ZW50KVwiXG4gICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwib25JbnB1dENsZWFyKCRldmVudClcIlxuICAgICAgICAgKGtleWRvd24uYXJyb3dsZWZ0KT1cIm9uQXJyb3dMZWZ0KClcIlxuICAgICAgICAgKGtleWRvd24uYXJyb3dyaWdodCk9XCJvbkFycm93UmlnaHQoKVwiPlxuICAgIDwvZGl2PlxuPC9saT5cbiJdfQ==
692
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NoaXBzL3NyYy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvY2hpcHMvc3JjL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFlLHFCQUFxQixFQUFFLHNCQUFzQixFQUFpQixTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEwsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEVBQUUsT0FBTyxFQUNoQixPQUFPLEVBQ1AsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUM3QixLQUFLLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLFdBQVcsQ0FB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LEVBQ0g7O1lBbkRMLDRCQXdCQztZQUMyQixlQUFpRDtZQUFqRCwrRUFBaUQ7OztpRkQyQmhFLGNBQWM7Y0FSMUIsU0FBUzsyQkFDSSxXQUFXLGFBRVY7b0JBQ1AsU0FBUyxpQkFBaUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO29CQUNsRCxrQkFBa0IsZ0JBQWdCO2lCQUNyQzs7c0JBeUNJLFNBQVM7dUJBQUMsbUJBQW1COztzQkFDN0IsU0FBUzt1QkFBQyx3QkFBd0I7O3NCQUNsQyxTQUFTO3VCQUFDLHNCQUFzQjs7c0JBQ2hDLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsU0FBUzt1QkFBQyxjQUFjOztzQkFDeEIsU0FBUzt1QkFBQyxnQkFBZ0I7O3NCQUMxQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkE3QitCLGVBQWU7a0JBQXRGLFNBQVM7bUJBQUMsZUFBZSxFQUFFLDJCQUEyQixDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7a0ZBaEI3RCxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICBkZWJvdW5jZSxcbiAgICBpc0FwcGxlUHJvZHVjdCxcbiAgICBpc0RlZmluZWQsXG4gICAgdG9Cb29sZWFuXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEFMTEZJRUxEUywgY29uZmlndXJlRG5ELCBEYXRhU2V0SXRlbSwgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzLCBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkLCBJV2lkZ2V0Q29uZmlnLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgc3R5bGVyIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvaW5wdXQnO1xuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzaWMvc2VhcmNoJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vY2hpcHMucHJvcHMnO1xuaW1wb3J0IHtcbiAgICBjbG9uZSxcbiAgICBmaWx0ZXIsXG4gICAgZmluZCxcbiAgICBmaW5kSW5kZXgsXG4gICAgZm9yRWFjaCwgaXNBcnJheSxcbiAgICBpc0VxdWFsLFxuICAgIGlzT2JqZWN0LCBtYXgsIHB1bGxBdCwgcmVkdWNlLFxuICAgIHNsaWNlLFxuICAgIHRvU3RyaW5nLFxuICAgIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS1jaGlwcycsXG4gICAgaG9zdENsYXNzOiAnYXBwLWNoaXBzIG5hdiBuYXYtcGlsbHMgbGlzdC1pbmxpbmUnXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bUNoaXBzXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoaXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKENoaXBzQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihDaGlwc0NvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENoaXBzQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgYWxsb3dvbmx5c2VsZWN0OiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVyZW9yZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYXhzaXplOiBudW1iZXI7XG4gICAgcHVibGljIGlucHV0d2lkdGg6IGFueTtcbiAgICBwcml2YXRlIGRlYm91bmNldGltZTogbnVtYmVyO1xuXG4gICAgcHVibGljIGNoaXBzTGlzdDogQXJyYXk8YW55PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZVJlYWNoZWQgPSAnTWF4IHNpemUgcmVhY2hlZCc7XG4gICAgcHJpdmF0ZSBzYXR1cmF0ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIG5leHRJdGVtSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGdldFRyYW5zZm9ybWVkRGF0YTogKGRhdGEsIGl0ZW1JbmRleD8pID0+IERhdGFTZXRJdGVtW107XG4gICAgcHJpdmF0ZSBpbnB1dHBvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzaG93c2VhcmNoaWNvbjogYm9vbGVhbjtcblxuICAgIEBWaWV3Q2hpbGQoU2VhcmNoQ29tcG9uZW50LCAvKiBUT0RPOiBhZGQgc3RhdGljIGZsYWcgKi8ge3N0YXRpYzogdHJ1ZX0pIHNlYXJjaENvbXBvbmVudDogU2VhcmNoQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWFyY2hrZXk6IHN0cmluZztcbiAgICBwcml2YXRlIF9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWw6IGFueTtcbiAgICBwcml2YXRlIGxpbWl0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY2xhc3NFeHByOiBhbnk7XG4gICAgcHJpdmF0ZSBtaW5jaGFyczogbnVtYmVyO1xuICAgIHByaXZhdGUgbWF0Y2htb2RlOiBzdHJpbmc7XG5cbiAgICAvLyBnZXR0ZXIgc2V0dGVyIGlzIGFkZGVkIHRvIHBhc3MgdGhlIGRhdGFzb3VyY2UgdG8gc2VhcmNoY29tcG9uZW50LlxuICAgIGdldCBkYXRhc291cmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UobnYpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhc291cmNlID0gbnY7XG4gICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCh0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5ZmllbGQuYmluZCcpIHByaXZhdGUgYmluZERpc3BsYXlGaWVsZCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWV4cHJlc3Npb24uYmluZCcpIHByaXZhdGUgYmluZERpc3BsYXlFeHByLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5aW1hZ2VzcmMuYmluZCcpIHByaXZhdGUgYmluZERpc3BsYXlJbWdTcmMsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFmaWVsZC5iaW5kJykgcHJpdmF0ZSBiaW5kRGF0YUZpZWxkLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwcml2YXRlIGJpbmREYXRhU2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdjaGlwY2xhc3MuYmluZCcpIHByaXZhdGUgYmluZENoaXBjbGFzcyxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBzaG93c2VhcmNoaWNvbiBhcyBmYWxzZSBieSBkZWZhdWx0LlxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLnNob3dzZWFyY2hpY29uKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93c2VhcmNoaWNvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMubmV4dEl0ZW1JbmRleCA9IDA7IC8vIGRlZmF1bHQgY2hpcCBpbmRleFxuXG4gICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCA9IGRlYm91bmNlKCh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnlNb2RlbCh2YWwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJpbmRDaGlwY2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmNoaXBzTGlzdCwgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hpcEl0ZW1DbGFzcyhpdGVtLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxNTApO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFzZXQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgLy8gY2xlYXJpbmcgdGhlIGxhc3QgcmVzdWx0cyB3aGVuIGRhdGFzZXQgaXMgcmVhc3NpZ25lZFxuICAgICAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXggPSB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXNldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBjb25zdCBkYXRhdmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGF2YWx1ZSQuc3Vic2NyaWJlKCh2YWw6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwYXJlbnRSZWYgaXMgYXZhaWxhYmxlLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YWZpZWxkIGlzIEFMTEZJTEVEUyBkbyBub3QgZmV0Y2ggdGhlIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHF1ZXJ5IG1vZGVsIHdpdGggdGhlIHZhbHVlcyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmJpbmREaXNwbGF5SW1nU3JjO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlsYWJlbCA9IHRoaXMuYmluZERpc3BsYXlFeHByO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5bGFiZWwgPSB0aGlzLmRpc3BsYXlmaWVsZDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YWZpZWxkID0gdGhpcy5iaW5kRGF0YUZpZWxkIHx8IHRoaXMuZGF0YWZpZWxkO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGF0YXNldCA9IHRoaXMuYmluZERhdGFTZXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LnNlYXJjaGtleSA9IHRoaXMuc2VhcmNoa2V5O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5saW1pdCA9IHRoaXMubGltaXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRlYm91bmNldGltZSA9IHRoaXMuZGVib3VuY2V0aW1lO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tYXRjaG1vZGUgPSB0aGlzLm1hdGNobW9kZTtcblxuICAgICAgICB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSA9ICh2YWwsIGlzQ3VzdG9tKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hDb21wb25lbnQuZ2V0VHJhbnNmb3JtZWREYXRhKFt2YWxdLCB0aGlzLm5leHRJdGVtSW5kZXgrKywgaXNDdXN0b20pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRG5EKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBldmFsdWF0ZWQgY2xhc3MgZXhwcmVzc2lvbi5cbiAgICAgKiBAcGFyYW0gJGluZGV4IGluZGV4IG9mIHRoZSBjaGlwXG4gICAgICogQHBhcmFtIGl0ZW0gY2hpcCBvYmplY3QgY29udGFpbmluZyB0aGUga2V5LCB2YWx1ZSwgbGFiZWxcbiAgICAgKiBAcmV0dXJucyB7YW55fSBldmFsdWF0ZWQgY2xhc3MgZXhwcmVzc2lvbiB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGl0ZW0sICRpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5iaW5kQ2hpcGNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9jaGlwSXRlbUNsYXNzXyR7JGluZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBzYW1lIGFzIGxpc3QgaXRlbSBjbGFzc1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2godGhpcy5iaW5kQ2hpcGNsYXNzLCB0aGlzLnZpZXdQYXJlbnQsIHtpdGVtLCAkaW5kZXh9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUl0ZW1DbGFzcyhnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KSwgJGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUl0ZW1DbGFzcyh2YWwsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNoaXBJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jaGlwLWl0ZW0nKS5pdGVtKGluZGV4KTtcbiAgICAgICAgJChjaGlwSXRlbSkucmVtb3ZlQ2xhc3ModmFsLnRvUmVtb3ZlKS5hZGRDbGFzcyh2YWwudG9BZGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRHVwbGljYXRlcygpIHtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkKHRoaXMuY2hpcHNMaXN0LCB0aGlzLmRhdGFmaWVsZCwgdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWwpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHF1ZXJ5TW9kZWwuXG4gICAgLy8gZGVmYXVsdCBjYWxsIHRvIGdldCB0aGUgZGVmYXVsdCBkYXRhIGNhbiBiZSBkb25lIG9ubHkgd2hlbiBkZWZhdWx0UXVlcnkgaXMgdHJ1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZVF1ZXJ5TW9kZWwoZGF0YTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsb25lIHRoZSBkYXRhIGFzIHRoZSB1cGRhdGlvbnMgb24gZGF0YSB3aWxsIGNoYW5nZSB0aGUgZGF0YXZhbHVlLlxuICAgICAgICBsZXQgZGF0YVZhbHVlID0gY2xvbmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZDaGlwc0xpc3QgPSB0aGlzLmNoaXBzTGlzdDtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIG1vZGVsIHdoZW4gbW9kZWwgaGFzIGl0ZW1zIG1vcmUgdGhhbiBtYXhzaXplXG4gICAgICAgIGlmICh0aGlzLm1heHNpemUgJiYgZGF0YVZhbHVlLmxlbmd0aCA+IHRoaXMubWF4c2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gZGF0YVZhbHVlID0gc2xpY2UoZGF0YVZhbHVlLCAwLCB0aGlzLm1heHNpemUpO1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZvciBlYWNoIHZhbHVlIGluIGRhdGF2YWx1ZSxcbiAgICAgICAgICogMS4gY2hlY2sgd2hldGhlciB2YWx1ZSBpcyBpbiBkYXRhc2V0SXRlbXMsIGlmIGl0ZW0gaXMgZm91bmQsIGFkZGQgdG8gdGhlIGNoaXBzTGlzdC5cbiAgICAgICAgICogMi4gZWxzZSBtYWtlIGEgZGVmYXVsdCBxdWVyeSB0byB0aGUgZmlsdGVyIGFuZCBnZXQgdGhlIHJlY29yZC5cbiAgICAgICAgICogMy4gSW4gc3RlcCAyLCBpZiBkYXRhdmFsdWUgaXMgbm90IEFMTEZJRUxEUywgdGhlbiBtYWtlIGEgcXVlcnkuIEV4dHJhY3QgdGhlIGNoaXBzTGlzdCBmcm9tIHRoZSBxdWVyeSByZXNwb25zZS5cbiAgICAgICAgICogNC4gSWYgdGhlcmUgaXMgbm8gcmVzcG9uc2UgZm9yIHRoZSB2YWx1ZSBhbmQgYWxsb3dvbmx5c2VsZWN0IGlzIHRydWUsIHJlbW92ZSB0aGUgdmFsdWUgZnJvbSB0aGUgZGF0YXZhbHVlLiBTbyB0aGF0IGRhdGF2YWx1ZSBqdXN0IGNvbnRhaW5zIHRoZSB2YWxpZCB2YWx1ZXMuXG4gICAgICAgICAqIDUuIEluIHN0ZXAgMiwgaWYgZGF0YXZhbHVlIGlzIEFMTEZJRUxEUyBhbmQgdmFsdWUgaXMgb2JqZWN0LCB0aGVuIGp1c3QgcHJlcGFyZSB0aGUgZGF0YXNldEl0ZW0gZnJvbSB0aGUgdmFsdWUuXG4gICAgICAgICAqIDYuIElmIHZhbHVlIGlzIG5vdCBvYmplY3QgYW5kIGFsbG93b25seXNlbGVjdCBpcyBmYWxzZSwgdGhlbiBjcmVhdGUgYSBjdXN0b21Nb2RlbCBhbmQgcmVwbGFjZSB0aGlzIHZhbHVlIHdpdGggY3VzdG9tTW9kZWwgYW5kIHByZXBhcmUgZGF0YXNldEl0ZW0gZnJvbSB0aGlzIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZvdW5kID0gZmluZCh0aGlzLmRhdGFzZXRJdGVtcywgaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGl0ZW0udmFsdWUpID8gaXNFcXVhbChpdGVtLnZhbHVlLCB2YWwpIDogdG9TdHJpbmcoaXRlbS52YWx1ZSkgPT09IHRvU3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGl0ZW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0LnB1c2goaXRlbUZvdW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LnB1c2godmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhT2JqLCBpc0N1c3RvbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gdGhpcy5jcmVhdGVDdXN0b21EYXRhTW9kZWwodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgaXNDdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaSwgMSwgZGF0YU9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXN0b20gY2hpcHMgaXMgYWxyZWFkeSBnZW5lcmF0ZWQsIHZhbCB3aWxsIGJlIG9iamVjdCBhcyB7J2RhdGFGaWVsZF92YWwnOiAnZW50ZXJlZF92YWwnfVxuICAgICAgICAgICAgICAgICAgICAvLyBIZW5jZSBjaGVjayB0aGlzIHZhbCBpbiBwcmV2aW91cyBjaGlwTGlzdCBhbmQgYXNzaWduIHRoZSBpc2N1c3RvbSBmbGFnXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZDaGlwT2JqID0gcHJldkNoaXBzTGlzdC5maW5kKG9iaiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNFcXVhbChvYmoudmFsdWUsIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNoaXBPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tID0gcHJldkNoaXBPYmouaXNjdXN0b207XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGFPYmogfHwgdmFsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEoZGF0YU9iaiwgaXNDdXN0b20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgaWYgKGlzQ3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIChjaGlwT2JqIGFzIGFueSkuaXNjdXN0b20gPSBpc0N1c3RvbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbWFrZSBkZWZhdWx0IHF1ZXJ5IHdpdGggYWxsIHRoZSB2YWx1ZXMgYW5kIGlmIHJlc3BvbnNlIGZvciB0aGUgdmFsdWUgaXMgbm90IGluIGRhdGF2YWx1ZSB0aGVuIGFkZCBhIGN1c3RvbSBjaGlwIG9iamVjdC5cbiAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmdldERlZmF1bHRNb2RlbChzZWFyY2hRdWVyeSwgdGhpcy5uZXh0SXRlbUluZGV4KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSB0aGlzLmNoaXBzTGlzdC5jb25jYXQocmVzcG9uc2UgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdHMgPSBmaW5kKHRoaXMuY2hpcHNMaXN0LCAob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai52YWx1ZS50b1N0cmluZygpID09PSB2YWwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dvbmx5c2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSh2YWwsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoaXBPYmogYXMgYW55KS5pc2N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmYXVsdCBjaGlwIGRhdGEgaXMgYWRkaW5nIGZvY3VzIG9uIHRvIHRoZSBzZWFyY2ggaW5wdXQuIEhlbmNlIHRoaXMgZmxhZyBoZWxwcyBub3QgdG8gZm9jdXMuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCh0cnVlKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlcygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXhTaXplKCk7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWFyY2hNb2RlbChkZWZhdWx0UXVlcnk/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSB0cnVlO1xuICAgICAgICAvLyBjbGVhciBzZWFyY2ggd2lsbCBlbXB0eSB0aGUgcXVlcnkgbW9kZWwgYW5kIGdldHMgdGhlIGRhdGEgd2hlbiBtaW5jaGFycyBpcyAwIChpLmUuIGF1dG9jb21wbGV0ZSkgb24gZm9jdXNcbiAgICAgICAgLy8gZGVmYXVsdFF1ZXJ5IGZsYWcgaXMgc2V0IHdoZW4gd2lkZ2V0IGlzIG5vdCBhY3RpdmUuIFRoaXMgd2lsbCBvbmx5IGxvYWQgdGhlIGF1dG9jb21wbGV0ZSBkcm9wdXAgd2l0aCBtaW5jaGFycyBhcyAwIHdoZW4gd2lkZ2V0IGlzIGZvY3VzZWQvYWN0aXZlXG4gICAgICAgICh0aGlzLnNlYXJjaENvbXBvbmVudCBhcyBhbnkpLmNsZWFyU2VhcmNoKHVuZGVmaW5lZCwgIXRoaXMubWluY2hhcnMgJiYgIWRlZmF1bHRRdWVyeSk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIG5ld0l0ZW0gdG8gdGhlIGxpc3RcbiAgICBwcml2YXRlIGFkZEl0ZW0oJGV2ZW50OiBFdmVudCwgd2lkZ2V0PzogU2VhcmNoQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaENvbXBvbmVudCA9IHdpZGdldDtcbiAgICAgICAgbGV0IGFsbG93QWRkO1xuICAgICAgICBsZXQgY2hpcE9iajtcblxuICAgICAgICBpZiAoc2VhcmNoQ29tcG9uZW50ICYmIGlzRGVmaW5lZChzZWFyY2hDb21wb25lbnQuZGF0YXZhbHVlKSAmJiBzZWFyY2hDb21wb25lbnQucXVlcnlNb2RlbCAhPT0gJycpIHtcbiAgICAgICAgICAgIGlmICghc2VhcmNoQ29tcG9uZW50LnF1ZXJ5IHx8ICF0cmltKHNlYXJjaENvbXBvbmVudC5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlwT2JqID0gc2VhcmNoQ29tcG9uZW50LnF1ZXJ5TW9kZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd29ubHlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0YU9iajtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkgJiYgdHJpbSh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IHRoaXMuY3JlYXRlQ3VzdG9tRGF0YU1vZGVsKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBjdXN0b20gY2hpcCBpcyBlbXB0eVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZGF0YU9iaiB8fCB0cmltKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEoZGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICBjaGlwT2JqLmlzY3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKGNoaXBPYmopIHx8IGNoaXBPYmogPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhbGxvd0FkZCA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlYWRkJywgeyRldmVudCwgbmV3SXRlbTogY2hpcE9ian0pO1xuXG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dBZGQpICYmICF0b0Jvb2xlYW4oYWxsb3dBZGQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0R1cGxpY2F0ZShjaGlwT2JqKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3RlckNoaXBJdGVtQ2xhc3MoY2hpcE9iaiwgdGhpcy5jaGlwc0xpc3QubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcblxuICAgICAgICBpZiAoIXRoaXMuZGF0YXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBbY2hpcE9iai52YWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBbLi4udGhpcy5fbW9kZWxCeVZhbHVlLCBjaGlwT2JqLnZhbHVlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSB0cnVlO1xuICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwgJGV2ZW50IHx8IHt9LCB0cnVlKTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2FkZCcsIHskZXZlbnQsICRpdGVtOiBjaGlwT2JqfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVNYXhTaXplKCk7XG5cbiAgICAgICAgLy8gcmVzZXQgaW5wdXQgYm94IHdoZW4gaXRlbSBpcyBhZGRlZC5cbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG5cbiAgICAgICAgLy8gc3RvcCB0aGUgZXZlbnQgdG8gbm90IHRvIGNhbGwgdGhlIHN1Ym1pdCBldmVudCBvbiBlbnRlciBwcmVzcy5cbiAgICAgICAgaWYgKCRldmVudCAmJiAoKCRldmVudCBhcyBhbnkpLmtleSA9PT0gJ0VudGVyJyB8fCAoJGV2ZW50IGFzIGFueSkua2V5Q29kZSA9PT0gMTMpKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BFdmVudCgkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBkYXRhdmFsdWUgb2JqZWN0IGZyb20gYSBzdHJpbmcoanVuaykgdmFsdWUgd2hlbiBkYXRhZmllbGQgaXMgYWxsRmllbGRzLlxuICAgIHByaXZhdGUgY3JlYXRlQ3VzdG9tRGF0YU1vZGVsKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZGlzcGxheWZpZWxkIHx8ICh0aGlzLmRhdGFmaWVsZCAhPT0gQUxMRklFTERTID8gdGhpcy5kYXRhZmllbGQgOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU9iaiA9IHt9O1xuICAgICAgICAgICAgY3VzdG9tT2JqW2tleV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tT2JqO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgbmV3SXRlbSBhbHJlYWR5IGV4aXN0c1xuICAgIHByaXZhdGUgaXNEdXBsaWNhdGUoaXRlbTogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kSW5kZXgodGhpcy5jaGlwc0xpc3QsIHt2YWx1ZTogaXRlbS52YWx1ZX0pID4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLmNoaXBzTGlzdCwge2tleTogaXRlbS5rZXl9KSA+IC0xO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG1heCBzaXplIGlzIHJlYWNoZWRcbiAgICBwcml2YXRlIHVwZGF0ZU1heFNpemUoKSB7XG4gICAgICAgIHRoaXMuc2F0dXJhdGUgPSB0aGlzLm1heHNpemUgPiAwICYmIHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCA9PT0gdGhpcy5tYXhzaXplO1xuICAgIH1cblxuICAgIC8vIE1ha2VzIGNhbGwgdG8gc2VhcmNoQ29tcG9uZW50IHRvIGZpbHRlciB0aGUgZGF0YVNvdXJjZSBiYXNlZCBvbiB0aGUgcXVlcnkuXG4gICAgcHJvdGVjdGVkIGdldERlZmF1bHRNb2RlbChxdWVyeTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5uZXh0SXRlbUluZGV4Kys7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaENvbXBvbmVudC5nZXREYXRhU291cmNlKHF1ZXJ5LCB0cnVlLCBpbmRleClcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyKHF1ZXJ5LCBxdWVyeVZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmQocmVzcG9uc2UsIHt2YWx1ZTogcXVlcnlWYWx9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2hpcENsaWNrKCRldmVudDogRXZlbnQsIGNoaXA6IERhdGFTZXRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKCRldmVudC5jdXJyZW50VGFyZ2V0IGFzIGFueSkuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGlwY2xpY2snLCB7JGV2ZW50LCAkaXRlbTogY2hpcH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2hpcEZvY3VzKCRldmVudDogRXZlbnQsIGNoaXA6IERhdGFTZXRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKGNoaXAgYXMgYW55KS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoaXBzZWxlY3QnLCB7JGV2ZW50LCAkaXRlbTogY2hpcH0pO1xuICAgIH1cblxuICAgIC8vIFRvIGF2b2lkIGZvcm0gc3VibWl0IG9uIHByZXNzaW5nIGVudGVyIGtleVxuICAgIHB1YmxpYyBzdG9wRXZlbnQoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRleHREZWxldGUoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoaXNBcHBsZVByb2R1Y3QpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENsZWFyKCRldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbnB1dENsZWFyKCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoaXBzTGlzdCB8fCAhdGhpcy5jaGlwc0xpc3QubGVuZ3RoIHx8IHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykubGFzdCgpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KCRldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkJhY2tzcGFjZSgkZXZlbnQ6IEV2ZW50LCAkaXRlbTogRGF0YVNldEl0ZW0sICRpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtKCRldmVudCwgJGl0ZW0sICRpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRlbGV0ZSgkZXZlbnQ6IEV2ZW50LCAkaXRlbTogRGF0YVNldEl0ZW0sICRpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtKCRldmVudCwgJGl0ZW0sICRpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXJyb3dMZWZ0KCRpdGVtPzogRGF0YVNldEl0ZW0sICRpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT24gbGVmdCBhcnJvdyBjbGljayB3aGVuIHNlYXJjaCBpbnB1dCBxdWVyeSBpcyBlbXB0eS5cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSAmJiAhaXNEZWZpbmVkKCRpbmRleCkgJiYgIWlzRGVmaW5lZCgkaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpLmxhc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRpbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpLmdldCgkaW5kZXggLSAxKS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaEJveCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXJyb3dSaWdodCgkaXRlbT86IERhdGFTZXRJdGVtLCAkaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbiByaWdodCBhcnJvdyBjbGljayB3aGVuIHNlYXJjaCBpbnB1dCBxdWVyeSBpcyBlbXB0eS5cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSAmJiAhaXNEZWZpbmVkKCRpbmRleCkgJiYgIWlzRGVmaW5lZCgkaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpLmZpcnN0KCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkaW5kZXggPCAodGhpcy5jaGlwc0xpc3QubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpLmdldCgkaW5kZXggKyAxKS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaEJveCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9jdXMgc2VhcmNoIGJveC5cbiAgICBwcml2YXRlIGZvY3VzU2VhcmNoQm94KCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtY2hpcC1pbnB1dCA+IGlucHV0LmFwcC10ZXh0Ym94JykuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGl0ZW0gZnJvbSBsaXN0XG4gICAgcHJpdmF0ZSByZW1vdmVJdGVtKCRldmVudDogRXZlbnQsIGl0ZW06IERhdGFTZXRJdGVtLCBpbmRleDogbnVtYmVyLCBjYW5Gb2N1cz86IGJvb2xlYW4pIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBpc0FycmF5KGluZGV4KSA/IGluZGV4IDogW2luZGV4XTtcbiAgICAgICAgY29uc3QgZm9jdXNJbmRleCA9IG1heChpbmRleGVzKTtcblxuICAgICAgICBjb25zdCBpdGVtcyA9IHJlZHVjZShpbmRleGVzLCAocmVzdWx0LCBpKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNoaXBzTGlzdFtpXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gcHJldmVudCBkZWxldGlvbiBpZiB0aGUgYmVmb3JlLXJlbW92ZSBldmVudCBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gICAgICAgIGNvbnN0IGFsbG93UmVtb3ZlID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW1vdmUnLCB7JGV2ZW50LCAkaXRlbTogaXRlbXMubGVuZ3RoID09PSAxID8gaXRlbXNbMF0gOiBpdGVtc30pO1xuICAgICAgICBpZiAoaXNEZWZpbmVkKGFsbG93UmVtb3ZlKSAmJiAhdG9Cb29sZWFuKGFsbG93UmVtb3ZlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJldkRhdGF2YWx1ZSA9IGNsb25lKHRoaXMuZGF0YXZhbHVlKTtcblxuICAgICAgICAvLyBmb2N1cyBuZXh0IGNoaXAgYWZ0ZXIgZGVsZXRpb24uXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBjaGlwcyBpbiB0aGUgbGlzdCBmb2N1cyBzZWFyY2ggYm94XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpcHNMZW5ndGggPSB0aGlzLmNoaXBzTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCAkY2hpcHNMaXN0ID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJyk7XG5cbiAgICAgICAgICAgIGlmICghY2hpcHNMZW5ndGggfHwgIWNhbkZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaEJveCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hpcHNMZW5ndGggLSAxKSA8IGZvY3VzSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBmb2N1cyBpbmRleCBpcyBncmVhdGVyIHRoYW4gY2hpcHMgbGVuZ3RoIHNlbGVjdCBsYXN0IGNoaXBcbiAgICAgICAgICAgICAgICAkY2hpcHNMaXN0LmdldChjaGlwc0xlbmd0aCAtIDEpLmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IHNldCB0aGUgc3VjY2VlZGluZyBjaGlwIGFzIGFjdGl2ZSBpZiB0aGVyZSBpcyBhIGNoaXAgbmV4dCB0byB0aGUgY3VycmVudCBjaGlwLlxuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNMaXN0W2ZvY3VzSW5kZXhdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgJGNoaXBzTGlzdC5nZXQoZm9jdXNJbmRleCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcHVsbGVkSXRlbXMgPSBwdWxsQXQodGhpcy5jaGlwc0xpc3QsIGluZGV4ZXMpO1xuXG4gICAgICAgIHB1bGxlZEl0ZW1zLmZvckVhY2goZGF0YXNldEl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gZmlsdGVyKHRoaXMuX21vZGVsQnlWYWx1ZSwgdmFsID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIShpc09iamVjdCh2YWwpID8gaXNFcXVhbCh2YWwsIGRhdGFzZXRJdGVtLnZhbHVlKSA6IHRvU3RyaW5nKHZhbCkgPT09IHRvU3RyaW5nKGRhdGFzZXRJdGVtLnZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5fbW9kZWxCeVZhbHVlLCAkZXZlbnQsIHRydWUpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsIHskZXZlbnQsIG5ld1ZhbDogdGhpcy5kYXRhdmFsdWUsIG9sZFZhbDogcHJldkRhdGF2YWx1ZX0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlTWF4U2l6ZSgpO1xuXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncmVtb3ZlJywgeyRldmVudCwgJGl0ZW06IGl0ZW1zLmxlbmd0aCA9PT0gMSA/IGl0ZW1zWzBdIDogaXRlbXN9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2FwcyBpdGVtcyBpbiBhbiBhcnJheSBpZiBwcm92aWRlZCB3aXRoIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIGRhdGEgOi0gYXJyYXkgdG8gYmUgc3dhcHBlZFxuICAgICAqIEBwYXJhbSBuZXdJbmRleCA6LSBuZXcgaW5kZXggZm9yIHRoZSBlbGVtZW50IHRvIGJlIHBsYWNlZFxuICAgICAqIEBwYXJhbSBjdXJyZW50SW5kZXggOi0gdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzd2FwRWxlbWVudHNJbkFycmF5KGRhdGE6IEFycmF5PGFueT4sIG5ld0luZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtID0gcHVsbEF0KGRhdGEsIGN1cnJlbnRJbmRleClbMF07XG4gICAgICAgIGRhdGEuc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkSXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyB0aGUgcmVvcmRlciBieSByZXNldGluZyB0aGUgZWxlbWVudHMgdG8gdGhlIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRSZW9yZGVyKCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZURhdGEoJ29sZEluZGV4Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsKGlucHV0RGF0YSkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywge2lucHV0RGF0YX0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAncmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdiZWZvcmVyZW1vdmUnIHx8IGV2ZW50TmFtZSA9PT0gJ2NoaXBzZWxlY3QnXG4gICAgICAgICAgICB8fCBldmVudE5hbWUgPT09ICdjaGlwY2xpY2snIHx8IGV2ZW50TmFtZSA9PT0gJ2FkZCcgfHwgZXZlbnROYW1lID09PSAncmVvcmRlcicgfHwgZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQobm9kZSwgZXZlbnROYW1lLCBldmVudENhbGxiYWNrLCBsb2NhbHMpO1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZXMgdGhlIHJlb3JkYWJsZSBmZWF0dXJlIGluIGNoaXBzIHdpZGdldHMuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEbkQoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpdGVtczogJz4gbGk6bm90KC5hcHAtY2hpcC1zZWFyY2gpJyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnY2hpcC1wbGFjZWhvbGRlcidcbiAgICAgICAgfTtcblxuICAgICAgICBjb25maWd1cmVEbkQodGhpcy4kZWxlbWVudCwgb3B0aW9ucywgdGhpcy5vblJlb3JkZXJTdGFydC5iaW5kKHRoaXMpLCB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyZWQgb24gZHJhZyBzdGFydCB3aGlsZSByZW9yZGVyaW5nLlxuICAgIHByaXZhdGUgb25SZW9yZGVyU3RhcnQoZXZ0OiBFdmVudCwgdWk6IE9iamVjdCkge1xuICAgICAgICBjb25zdCBoZWxwZXIgPSAodWkgYXMgYW55KS5oZWxwZXI7XG4gICAgICAgIC8vIGluY3JlYXNpbmcgdGhlIHdpZHRoIG9mIHRoZSBkcmFnZ2VkIGl0ZW0gYnkgMVxuICAgICAgICBoZWxwZXIud2lkdGgoaGVscGVyLndpZHRoKCkgKyAxKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5kYXRhKCdvbGRJbmRleCcsICh1aSBhcyBhbnkpLml0ZW0uaW5kZXgoKSAtICh0aGlzLmlucHV0cG9zaXRpb24gPT09ICdmaXJzdCcgPyAxIDogMCkpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIGNoaXBzTGlzdCBhbmQgZGF0YXZhbHVlIG9uIHJlb3JkZXIuXG4gICAgcHJpdmF0ZSB1cGRhdGUoJGV2ZW50OiBFdmVudCwgdWk6IE9iamVjdCkge1xuICAgICAgICBsZXQgY2hhbmdlZEl0ZW0sXG4gICAgICAgICAgICBuZXdJbmRleCxcbiAgICAgICAgICAgIG9sZEluZGV4O1xuXG4gICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gYXQgcG9zaXRpb24gYmVmb3JlIGRyYWcgYW5kIGFmdGVyIHRoZSByZW9yZGVyLlxuICAgICAgICBuZXdJbmRleCA9ICh1aSBhcyBhbnkpLml0ZW0uaW5kZXgoKSAtICh0aGlzLmlucHV0cG9zaXRpb24gPT09ICdmaXJzdCcgPyAxIDogMCk7XG4gICAgICAgIG9sZEluZGV4ID0gdGhpcy4kZWxlbWVudC5kYXRhKCdvbGRJbmRleCcpO1xuXG4gICAgICAgIG5ld0luZGV4ID0gdGhpcy5jaGlwc0xpc3QubGVuZ3RoID09PSBuZXdJbmRleCA/IG5ld0luZGV4IC0gMSA6IG5ld0luZGV4O1xuICAgICAgICBjaGFuZ2VkSXRlbSA9IHtcbiAgICAgICAgICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICAgICAgICAgIG5ld0luZGV4OiBuZXdJbmRleCxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuY2hpcHNMaXN0W29sZEluZGV4XVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdJbmRleCA9PT0gb2xkSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZW9yZGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZEl0ZW0uaXRlbSA9IHRoaXMuY2hpcHNMaXN0W29sZEluZGV4XTtcblxuICAgICAgICBjb25zdCBhbGxvd1Jlb3JkZXIgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlb3JkZXInLCB7JGV2ZW50LCAkZGF0YTogdGhpcy5jaGlwc0xpc3QsICRjaGFuZ2VkSXRlbTogY2hhbmdlZEl0ZW19KTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKGFsbG93UmVvcmRlcikgJiYgdG9Cb29sZWFuKGFsbG93UmVvcmRlcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVvcmRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW9kaWZ5IHRoZSBjaGlwc0xpc3QgYW5kIGRhdGF2YWx1ZSBhZnRlciB0aGUgcmVvcmRlci5cbiAgICAgICAgdGhpcy5zd2FwRWxlbWVudHNJbkFycmF5KHRoaXMuY2hpcHNMaXN0LCBuZXdJbmRleCwgb2xkSW5kZXgpO1xuICAgICAgICB0aGlzLnN3YXBFbGVtZW50c0luQXJyYXkodGhpcy5fbW9kZWxCeVZhbHVlLCBuZXdJbmRleCwgb2xkSW5kZXgpO1xuXG4gICAgICAgIGNoYW5nZWRJdGVtLml0ZW0gPSB0aGlzLmNoaXBzTGlzdFtuZXdJbmRleF07XG5cbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbLi4udGhpcy5jaGlwc0xpc3RdO1xuXG4gICAgICAgIHRoaXMucmVzZXRSZW9yZGVyKCk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncmVvcmRlcicsIHskZXZlbnQsICRkYXRhOiB0aGlzLmNoaXBzTGlzdCwgJGNoYW5nZWRJdGVtOiBjaGFuZ2VkSXRlbX0pO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhb3B0aW9ucycpIHtcbiAgICAgICAgICAgICh0aGlzLnNlYXJjaENvbXBvbmVudCBhcyBhbnkpLmRhdGFvcHRpb25zID0gbnY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFmaWVsZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFmaWVsZCA9IHRoaXMuZGF0YWZpZWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5ZmllbGQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5bGFiZWwgPSB0aGlzLmRpc3BsYXlmaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWxhYmVsID0gdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24gPyB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbiA6IHRoaXMuZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlpbWFnZXNyYycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMgPyB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMgOiB0aGlzLmRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5saW1pdCA9IHRoaXMubGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ21hdGNobW9kZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lm1hdGNobW9kZSA9IHRoaXMubWF0Y2htb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdncm91cGJ5Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZ3JvdXBieSA9IHRoaXMuZ3JvdXBieTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZW5hYmxlcmVvcmRlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCd1aS1zb3J0YWJsZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5zb3J0YWJsZSgnb3B0aW9uJywgJ2Rpc2FibGVkJywgIW52KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZURuRCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgdGhpcyBibG9jayB0byBoYW5kbGUgZHJhZyBwcmV2ZW50aW9uXG4gICAgICAgICAgICBjb25zdCBjaGlwRWxlbWVudHMgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5jaGlwLWl0ZW0gYS5hcHAtY2hpcCcpO1xuICAgICAgICAgICAgaWYgKCFudikge1xuICAgICAgICAgICAgICAgIGNoaXBFbGVtZW50cy5hZGRDbGFzcygnbm8tZHJhZycpO1xuICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBkcmFnIGJlaGF2aW9yXG4gICAgICAgICAgICAgICAgY2hpcEVsZW1lbnRzLm9uKCdkcmFnc3RhcnQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpcEVsZW1lbnRzLnJlbW92ZUNsYXNzKCduby1kcmFnJyk7XG4gICAgICAgICAgICAgICAgY2hpcEVsZW1lbnRzLm9mZignZHJhZ3N0YXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlYWRvbmx5Jykge1xuICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygncmVhZG9ubHknKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygncmVhZG9ubHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnaW5wdXRwb3NpdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0ICRpbnB1dEVsID0gdGhpcy4kZWxlbWVudC5maW5kKCdsaS5hcHAtY2hpcC1zZWFyY2gnKTtcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ2ZpcnN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucHJlcGVuZCgkaW5wdXRFbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYXBwZW5kKCRpbnB1dEVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnYXV0b2ZvY3VzJyAmJiBudikge1xuICAgICAgICAgICAgLy8gc2V0dGluZyB0aGUgYXV0b2ZvY3VzIG9uIHRoZSBpbnB1dCBvbmNlIGFmdGVyIGRvbSBpcyB1cGRhdGVkXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkY2hpcHNMaXN0ID0gdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLWNoaXAtaW5wdXQgPiBpbnB1dC5hcHAtdGV4dGJveCcpO1xuICAgICAgICAgICAgICAgIGlmICgkY2hpcHNMaXN0ICYmICRjaGlwc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG59XG4iLCJAZm9yIChpdGVtIG9mIGNoaXBzTGlzdDsgdHJhY2sgaXRlbSkge1xuICA8bGkgY2xhc3M9XCJjaGlwLWl0ZW0ge3tjaGlwY2xhc3MgJiYgIWJpbmRDaGlwY2xhc3MgPyBjaGlwY2xhc3MgOiAnJ319XCJcbiAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGl0ZW0uYWN0aXZlLCAnZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJhcHAtY2hpcFwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlQ2hpcENsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgKGtleWRvd24uZGVsZXRlKT1cIm9uRGVsZXRlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwib25CYWNrc3BhY2UoJGV2ZW50LCBpdGVtLCAkaW5kZXgpXCJcbiAgICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkFycm93TGVmdChpdGVtLCAkaW5kZXgpXCJcbiAgICAgIChrZXlkb3duLmFycm93cmlnaHQpPVwib25BcnJvd1JpZ2h0KGl0ZW0sICRpbmRleClcIlxuICAgICAgKGZvY3VzKT1cImhhbmRsZUNoaXBGb2N1cygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgIChibHVyKT1cInJlYWRvbmx5ID8gMCA6IGl0ZW0uYWN0aXZlID0gZmFsc2VcIlxuICAgICAgW25nQ2xhc3NdPVwieyduby1kcmFnJzogIWVuYWJsZXJlb3JkZXIsJ2NoaXAtZHVwbGljYXRlIGJnLWRhbmdlcic6IGl0ZW0uaXNEdXBsaWNhdGUsICdjaGlwLXBpY3R1cmUnOiBpdGVtLmltZ1NyY31cIj5cbiAgICAgIEBpZiAoaXRlbS5pbWdTcmMpIHtcbiAgICAgICAgPGltZyBkYXRhLWlkZW50aWZpZXI9XCJpbWdcIiBhbHQ9XCJDaGlwIEltYWdlXCIgY2xhc3M9XCJidXR0b24taW1hZ2UtaWNvblwiIFtzcmNdPVwiaXRlbS5pbWdTcmNcIi8+XG4gICAgICB9XG4gICAgICA8c3BhbiBjbGFzcz1cImFwcC1jaGlwLXRpdGxlXCIgW3RleHRDb250ZW50XT1cIml0ZW0ubGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPjwvc3Bhbj5cbiAgICAgIEBpZiAoIXJlYWRvbmx5KSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NsZWFyICcgKyBpdGVtLmxhYmVsXCIgY2xhc3M9XCJidG4gYnRuLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbSgkZXZlbnQsIGl0ZW0sICRpbmRleCk7XCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB3aSB3aS1jbG9zZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9hPlxuICA8L2xpPlxufVxuPGxpIGNsYXNzPVwiYXBwLWNoaXAtc2VhcmNoXCIgW25nQ2xhc3NdPVwieydmdWxsLXdpZHRoJzogaW5wdXR3aWR0aCA9PT0gJ2Z1bGwnfVwiPlxuICA8ZGl2ICNzZWFyY2ggd21TZWFyY2ggY2xhc3M9XCJhcHAtY2hpcC1pbnB1dFwiXG4gICAgbmFtZT1cImFwcC1jaGlwLXNlYXJjaFwiXG4gICAgc3VibWl0LmV2ZW50PVwiYWRkSXRlbSgkZXZlbnQsIHdpZGdldClcIlxuICAgIGJlZm9yZXNlcnZpY2VjYWxsLmV2ZW50PVwiaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpXCJcbiAgICBkaXNhYmxlZC5iaW5kPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHkgfHwgc2F0dXJhdGVcIlxuICAgIGRhdGFmaWVsZC5iaW5kPVwiZGF0YWZpZWxkXCJcbiAgICBhbGxvd29ubHlzZWxlY3QuYmluZD1cImFsbG93b25seXNlbGVjdFwiXG4gICAgc2VhcmNoa2V5LmJpbmQ9XCJzZWFyY2hrZXlcIlxuICAgIG9yZGVyYnkuYmluZD1cIm9yZGVyYnlcIlxuICAgIHBsYWNlaG9sZGVyLmJpbmQ9XCJzYXR1cmF0ZSA/IG1heFNpemVSZWFjaGVkIDogcGxhY2Vob2xkZXJcIlxuICAgIHNob3dzZWFyY2hpY29uLmJpbmQ9XCJzaG93c2VhcmNoaWNvblwiXG4gICAgdGFiaW5kZXguYmluZD1cInRhYmluZGV4XCJcbiAgICBtaW5jaGFycy5iaW5kPVwibWluY2hhcnNcIlxuICAgIGRlYm91bmNldGltZS5iaW5kPVwiZGVib3VuY2V0aW1lXCJcbiAgICBtYXRjaG1vZGUuYmluZD1cIm1hdGNobW9kZVwiXG4gICAgZGF0YWNvbXBsZXRlbXNnLmJpbmQgPSBcImRhdGFjb21wbGV0ZW1zZ1wiXG4gICAgZ3JvdXBieS5iaW5kPVwiZ3JvdXBieVwiXG4gICAgbWF0Y2guYmluZD1cIm1hdGNoXCJcbiAgICBkYXRlZm9ybWF0LmJpbmQ9XCJkYXRlZm9ybWF0XCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJzdG9wRXZlbnQoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uZGVsZXRlKT1cIm9uVGV4dERlbGV0ZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwib25JbnB1dENsZWFyKCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkFycm93TGVmdCgpXCJcbiAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQXJyb3dSaWdodCgpXCI+XG4gIDwvZGl2PlxuPC9saT5cbiJdfQ==