@ardium-ui/ui 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/README.md +25 -25
  2. package/esm2022/lib/_internal/boolean-component.mjs +4 -4
  3. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +4 -4
  4. package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +5 -5
  5. package/esm2022/lib/_internal/disablable-component.mjs +4 -4
  6. package/esm2022/lib/_internal/focusable-component.mjs +4 -4
  7. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +1 -1
  8. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +1 -1
  9. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +1 -1
  10. package/esm2022/lib/_internal/models/pagination.model.mjs +1 -1
  11. package/esm2022/lib/_internal/ngmodel-component.mjs +4 -4
  12. package/esm2022/lib/_internal/queue.mjs +1 -1
  13. package/esm2022/lib/_internal/selectable-list-component.mjs +4 -4
  14. package/esm2022/lib/badge/badge.directive.mjs +4 -4
  15. package/esm2022/lib/badge/badge.module.mjs +5 -5
  16. package/esm2022/lib/badge/badge.types.mjs +1 -1
  17. package/esm2022/lib/buttons/_button-base.mjs +4 -4
  18. package/esm2022/lib/buttons/button/button.component.mjs +4 -4
  19. package/esm2022/lib/buttons/button/button.module.mjs +5 -5
  20. package/esm2022/lib/buttons/fab/fab.component.mjs +4 -4
  21. package/esm2022/lib/buttons/fab/fab.module.mjs +5 -5
  22. package/esm2022/lib/buttons/general-button.types.mjs +1 -1
  23. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +4 -4
  24. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +5 -5
  25. package/esm2022/lib/calendar/calendar.component.mjs +4 -4
  26. package/esm2022/lib/calendar/calendar.directives.mjs +25 -25
  27. package/esm2022/lib/calendar/calendar.helpers.mjs +1 -1
  28. package/esm2022/lib/calendar/calendar.module.mjs +5 -5
  29. package/esm2022/lib/calendar/calendar.types.mjs +1 -1
  30. package/esm2022/lib/card/card.children.mjs +25 -25
  31. package/esm2022/lib/card/card.component.mjs +7 -7
  32. package/esm2022/lib/card/card.module.mjs +5 -5
  33. package/esm2022/lib/card/card.types.mjs +1 -1
  34. package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
  35. package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
  36. package/esm2022/lib/checkbox/checkbox.types.mjs +1 -1
  37. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +4 -4
  38. package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +5 -5
  39. package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +1 -1
  40. package/esm2022/lib/chip/chip.component.mjs +4 -4
  41. package/esm2022/lib/chip/chip.module.mjs +5 -5
  42. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +4 -4
  43. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +4 -4
  44. package/esm2022/lib/color/color-display/color-display.component.mjs +4 -4
  45. package/esm2022/lib/color/color-display/color-display.module.mjs +5 -5
  46. package/esm2022/lib/color/color-display/color-display.types.mjs +1 -1
  47. package/esm2022/lib/color/color-picker/color-picker.component.mjs +4 -4
  48. package/esm2022/lib/color/color-picker/color-picker.directives.mjs +13 -13
  49. package/esm2022/lib/color/color-picker/color-picker.module.mjs +5 -5
  50. package/esm2022/lib/color/color-picker/color-picker.types.mjs +1 -1
  51. package/esm2022/lib/dialog/dialog.component.mjs +4 -4
  52. package/esm2022/lib/dialog/dialog.directives.mjs +4 -4
  53. package/esm2022/lib/dialog/dialog.module.mjs +5 -5
  54. package/esm2022/lib/dialog/dialog.types.mjs +1 -1
  55. package/esm2022/lib/divider/divider.component.mjs +4 -4
  56. package/esm2022/lib/divider/divider.module.mjs +5 -5
  57. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +4 -4
  58. package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +5 -5
  59. package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +1 -1
  60. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +4 -4
  61. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +10 -10
  62. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +5 -5
  63. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +4 -4
  64. package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +19 -19
  65. package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +5 -5
  66. package/esm2022/lib/file-inputs/file-input-base.mjs +4 -4
  67. package/esm2022/lib/file-inputs/file-input-types.mjs +1 -1
  68. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +4 -4
  69. package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +7 -7
  70. package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +5 -5
  71. package/esm2022/lib/icon/icon.component.mjs +4 -4
  72. package/esm2022/lib/icon/icon.module.mjs +5 -5
  73. package/esm2022/lib/icon/icon.pipe.mjs +4 -4
  74. package/esm2022/lib/inputs/color-input/color-input.component.mjs +4 -4
  75. package/esm2022/lib/inputs/color-input/color-input.directives.mjs +25 -25
  76. package/esm2022/lib/inputs/color-input/color-input.module.mjs +5 -5
  77. package/esm2022/lib/inputs/color-input/color-input.types.mjs +1 -1
  78. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +4 -4
  79. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +1 -1
  80. package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +5 -5
  81. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +1 -1
  82. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
  83. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +4 -4
  84. package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +10 -10
  85. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +5 -5
  86. package/esm2022/lib/inputs/hex-input.model.mjs +1 -1
  87. package/esm2022/lib/inputs/input/input.component.mjs +4 -4
  88. package/esm2022/lib/inputs/input/input.directives.mjs +16 -16
  89. package/esm2022/lib/inputs/input/input.module.mjs +5 -5
  90. package/esm2022/lib/inputs/input-transformers.mjs +1 -1
  91. package/esm2022/lib/inputs/input-types.mjs +1 -1
  92. package/esm2022/lib/inputs/input-utils.mjs +1 -1
  93. package/esm2022/lib/inputs/number-input/number-input.component.mjs +4 -4
  94. package/esm2022/lib/inputs/number-input/number-input.directives.mjs +4 -4
  95. package/esm2022/lib/inputs/number-input/number-input.module.mjs +5 -5
  96. package/esm2022/lib/inputs/password-input/password-input.component.mjs +4 -4
  97. package/esm2022/lib/inputs/password-input/password-input.directives.mjs +13 -13
  98. package/esm2022/lib/inputs/password-input/password-input.module.mjs +5 -5
  99. package/esm2022/lib/inputs/password-input/password-input.types.mjs +1 -1
  100. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +4 -4
  101. package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +10 -10
  102. package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +5 -5
  103. package/esm2022/lib/kbd/kbd.component.mjs +4 -4
  104. package/esm2022/lib/kbd/kbd.module.mjs +5 -5
  105. package/esm2022/lib/kbd/kbd.pipe.mjs +4 -4
  106. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +4 -4
  107. package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +5 -5
  108. package/esm2022/lib/modal/modal.component.mjs +4 -4
  109. package/esm2022/lib/modal/modal.module.mjs +5 -5
  110. package/esm2022/lib/option/option.component.mjs +4 -4
  111. package/esm2022/lib/option/option.module.mjs +5 -5
  112. package/esm2022/lib/progress-bar/progress-bar.component.mjs +4 -4
  113. package/esm2022/lib/progress-bar/progress-bar.directive.mjs +4 -4
  114. package/esm2022/lib/progress-bar/progress-bar.module.mjs +5 -5
  115. package/esm2022/lib/progress-bar/progress-bar.types.mjs +1 -1
  116. package/esm2022/lib/progress-circle/progress-circle.component.mjs +4 -4
  117. package/esm2022/lib/progress-circle/progress-circle.directive.mjs +4 -4
  118. package/esm2022/lib/progress-circle/progress-circle.module.mjs +5 -5
  119. package/esm2022/lib/progress-circle/progress-circle.types.mjs +1 -1
  120. package/esm2022/lib/radio/radio/radio.component.mjs +4 -4
  121. package/esm2022/lib/radio/radio-group.component.mjs +4 -4
  122. package/esm2022/lib/radio/radio.module.mjs +5 -5
  123. package/esm2022/lib/search-functions.mjs +1 -1
  124. package/esm2022/lib/segment/segment.component.mjs +4 -4
  125. package/esm2022/lib/segment/segment.directives.mjs +4 -4
  126. package/esm2022/lib/segment/segment.module.mjs +5 -5
  127. package/esm2022/lib/segment/segment.types.mjs +1 -1
  128. package/esm2022/lib/select/select.component.mjs +4 -4
  129. package/esm2022/lib/select/select.directive.mjs +46 -46
  130. package/esm2022/lib/select/select.module.mjs +5 -5
  131. package/esm2022/lib/select/select.types.mjs +1 -1
  132. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +4 -4
  133. package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +5 -5
  134. package/esm2022/lib/slider/abstract-slider.mjs +4 -4
  135. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +4 -4
  136. package/esm2022/lib/slider/range-slider/range-slider.module.mjs +5 -5
  137. package/esm2022/lib/slider/slider.component.mjs +4 -4
  138. package/esm2022/lib/slider/slider.directive.mjs +4 -4
  139. package/esm2022/lib/slider/slider.module.mjs +5 -5
  140. package/esm2022/lib/slider/slider.types.mjs +1 -1
  141. package/esm2022/lib/snackbar/index.mjs +1 -1
  142. package/esm2022/lib/snackbar/snackbar-ref.mjs +1 -1
  143. package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
  144. package/esm2022/lib/snackbar/snackbar.service.mjs +4 -4
  145. package/esm2022/lib/snackbar/snackbar.token.mjs +1 -1
  146. package/esm2022/lib/snackbar/snackbar.types.mjs +1 -1
  147. package/esm2022/lib/spinner/spinner.component.mjs +4 -4
  148. package/esm2022/lib/spinner/spinner.module.mjs +5 -5
  149. package/esm2022/lib/star/star-button/star-button.component.mjs +4 -4
  150. package/esm2022/lib/star/star-button/star-button.module.mjs +5 -5
  151. package/esm2022/lib/star/star-display/star-display.component.mjs +4 -4
  152. package/esm2022/lib/star/star-display/star-display.module.mjs +5 -5
  153. package/esm2022/lib/star/star-input/star-input.component.mjs +4 -4
  154. package/esm2022/lib/star/star-input/star-input.module.mjs +5 -5
  155. package/esm2022/lib/star/star.component.mjs +4 -4
  156. package/esm2022/lib/star/star.module.mjs +5 -5
  157. package/esm2022/lib/star/star.types.mjs +1 -1
  158. package/esm2022/lib/statebox/statebox.component.mjs +4 -4
  159. package/esm2022/lib/statebox/statebox.module.mjs +5 -5
  160. package/esm2022/lib/statebox/statebox.types.mjs +1 -1
  161. package/esm2022/lib/table/table-item-storage.mjs +1 -1
  162. package/esm2022/lib/table/table.component.mjs +4 -4
  163. package/esm2022/lib/table/table.directives.mjs +16 -16
  164. package/esm2022/lib/table/table.module.mjs +5 -5
  165. package/esm2022/lib/table/table.types.mjs +1 -1
  166. package/esm2022/lib/table/utils.mjs +1 -1
  167. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +4 -4
  168. package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +5 -5
  169. package/esm2022/lib/table-pagination/table-pagination.component.mjs +4 -4
  170. package/esm2022/lib/table-pagination/table-pagination.module.mjs +5 -5
  171. package/esm2022/lib/table-pagination/table-pagination.types.mjs +1 -1
  172. package/esm2022/lib/types/alignment.types.mjs +1 -1
  173. package/esm2022/lib/types/colors.types.mjs +1 -1
  174. package/esm2022/lib/types/item-storage.types.mjs +1 -1
  175. package/esm2022/lib/types/theming.types.mjs +1 -1
  176. package/esm2022/lib/types/utility.types.mjs +1 -1
  177. package/esm2022/public-api.mjs +1 -1
  178. package/fesm2022/ardium-ui-ui.mjs +618 -618
  179. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  180. package/package.json +4 -4
  181. package/themes/_variables.scss +121 -121
  182. package/themes/default/_clear-button.scss +73 -73
  183. package/themes/default/_coloring.scss +137 -137
  184. package/themes/default/_dropdown-arrow.scss +12 -12
  185. package/themes/default/_mixins.scss +70 -70
  186. package/themes/default/badge.scss +94 -94
  187. package/themes/default/buttons/_button-mixins.scss +144 -144
  188. package/themes/default/buttons/button.scss +62 -62
  189. package/themes/default/buttons/fab.scss +72 -72
  190. package/themes/default/buttons/icon-button.scss +59 -59
  191. package/themes/default/calendar.scss +182 -182
  192. package/themes/default/card.scss +126 -126
  193. package/themes/default/checkbox-list.scss +83 -83
  194. package/themes/default/checkbox.scss +109 -109
  195. package/themes/default/chips.scss +206 -206
  196. package/themes/default/color-display.scss +41 -41
  197. package/themes/default/color-picker.scss +111 -111
  198. package/themes/default/core.scss +96 -96
  199. package/themes/default/dialog.scss +16 -16
  200. package/themes/default/divider.scss +13 -13
  201. package/themes/default/dropdown-panel.scss +45 -45
  202. package/themes/default/file-drop-area.scss +162 -162
  203. package/themes/default/form-field-frame.scss +78 -78
  204. package/themes/default/inputs/_shared.scss +46 -46
  205. package/themes/default/inputs/color-input.scss +46 -46
  206. package/themes/default/inputs/digit-input.scss +56 -56
  207. package/themes/default/inputs/file-input.scss +78 -78
  208. package/themes/default/inputs/hex-input.scss +27 -27
  209. package/themes/default/inputs/input.scss +52 -52
  210. package/themes/default/inputs/number-input.scss +121 -121
  211. package/themes/default/inputs/password-input.scss +43 -43
  212. package/themes/default/inputs/search-bar.scss +19 -19
  213. package/themes/default/inputs/simple-input.scss +19 -19
  214. package/themes/default/kbd-shortcut.scss +13 -13
  215. package/themes/default/kbd.scss +20 -20
  216. package/themes/default/modal.scss +93 -93
  217. package/themes/default/progress-bar.scss +166 -166
  218. package/themes/default/progress-circle.scss +56 -56
  219. package/themes/default/radio.scss +112 -112
  220. package/themes/default/segment.scss +339 -339
  221. package/themes/default/select.scss +253 -253
  222. package/themes/default/slide-toggle.scss +151 -151
  223. package/themes/default/slider.scss +224 -224
  224. package/themes/default/snackbar.scss +60 -60
  225. package/themes/default/spinner.scss +21 -21
  226. package/themes/default/stars.scss +122 -122
  227. package/themes/default/statebox.scss +109 -109
  228. package/themes/default/table-pagination.scss +56 -56
  229. package/themes/default/table.scss +403 -403
@@ -9,4 +9,4 @@ export const SegmentAppearance = {
9
9
  FilledStrong: 'filled-strong',
10
10
  OutlinedStrong: 'outlined-strong',
11
11
  };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VnbWVudC9zZWdtZW50LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixHQUFHLGtCQUFrQjtJQUNyQixnQkFBZ0IsRUFBRSxtQkFBbUI7SUFDckMsY0FBYyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDO0FBR1gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsR0FBRyxxQkFBcUI7SUFDeEIsWUFBWSxFQUFFLGVBQWU7SUFDN0IsY0FBYyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUVsZW1lbnRBcHBlYXJhbmNlLCBGb3JtRWxlbWVudFZhcmlhbnQgfSBmcm9tICcuLi90eXBlcy90aGVtaW5nLnR5cGVzJztcblxuZXhwb3J0IGNvbnN0IFNlZ21lbnRWYXJpYW50ID0ge1xuICAuLi5Gb3JtRWxlbWVudFZhcmlhbnQsXG4gIFJvdW5kZWRDb25uZWN0ZWQ6ICdyb3VuZGVkLWNvbm5lY3RlZCcsXG4gIFNoYXJwQ29ubmVjdGVkOiAnc2hhcnAtY29ubmVjdGVkJyxcbn0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTZWdtZW50VmFyaWFudCA9ICh0eXBlb2YgU2VnbWVudFZhcmlhbnQpW2tleW9mIHR5cGVvZiBTZWdtZW50VmFyaWFudF07XG5cbmV4cG9ydCBjb25zdCBTZWdtZW50QXBwZWFyYW5jZSA9IHtcbiAgLi4uRm9ybUVsZW1lbnRBcHBlYXJhbmNlLFxuICBGaWxsZWRTdHJvbmc6ICdmaWxsZWQtc3Ryb25nJyxcbiAgT3V0bGluZWRTdHJvbmc6ICdvdXRsaW5lZC1zdHJvbmcnLFxufSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFNlZ21lbnRBcHBlYXJhbmNlID0gKHR5cGVvZiBTZWdtZW50QXBwZWFyYW5jZSlba2V5b2YgdHlwZW9mIFNlZ21lbnRBcHBlYXJhbmNlXTtcbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VnbWVudC9zZWdtZW50LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixHQUFHLGtCQUFrQjtJQUNyQixnQkFBZ0IsRUFBRSxtQkFBbUI7SUFDckMsY0FBYyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDO0FBR1gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsR0FBRyxxQkFBcUI7SUFDeEIsWUFBWSxFQUFFLGVBQWU7SUFDN0IsY0FBYyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUVsZW1lbnRBcHBlYXJhbmNlLCBGb3JtRWxlbWVudFZhcmlhbnQgfSBmcm9tICcuLi90eXBlcy90aGVtaW5nLnR5cGVzJztcclxuXHJcbmV4cG9ydCBjb25zdCBTZWdtZW50VmFyaWFudCA9IHtcclxuICAuLi5Gb3JtRWxlbWVudFZhcmlhbnQsXHJcbiAgUm91bmRlZENvbm5lY3RlZDogJ3JvdW5kZWQtY29ubmVjdGVkJyxcclxuICBTaGFycENvbm5lY3RlZDogJ3NoYXJwLWNvbm5lY3RlZCcsXHJcbn0gYXMgY29uc3Q7XHJcbmV4cG9ydCB0eXBlIFNlZ21lbnRWYXJpYW50ID0gKHR5cGVvZiBTZWdtZW50VmFyaWFudClba2V5b2YgdHlwZW9mIFNlZ21lbnRWYXJpYW50XTtcclxuXHJcbmV4cG9ydCBjb25zdCBTZWdtZW50QXBwZWFyYW5jZSA9IHtcclxuICAuLi5Gb3JtRWxlbWVudEFwcGVhcmFuY2UsXHJcbiAgRmlsbGVkU3Ryb25nOiAnZmlsbGVkLXN0cm9uZycsXHJcbiAgT3V0bGluZWRTdHJvbmc6ICdvdXRsaW5lZC1zdHJvbmcnLFxyXG59IGFzIGNvbnN0O1xyXG5leHBvcnQgdHlwZSBTZWdtZW50QXBwZWFyYW5jZSA9ICh0eXBlb2YgU2VnbWVudEFwcGVhcmFuY2UpW2tleW9mIHR5cGVvZiBTZWdtZW50QXBwZWFyYW5jZV07XHJcbiJdfQ==
@@ -940,8 +940,8 @@ export class ArdiumSelectComponent extends _NgModelComponentBase {
940
940
  _onCtrlAPress(event) {
941
941
  this.itemStorage.highlightAllItems();
942
942
  }
943
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ArdiumSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i1.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
944
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: ArdiumSelectComponent, selector: "ard-select", inputs: { valueFrom: "valueFrom", labelFrom: "labelFrom", disabledFrom: "disabledFrom", groupLabelFrom: "groupLabelFrom", groupDisabledFrom: "groupDisabledFrom", childrenFrom: "childrenFrom", placeholder: "placeholder", searchPlaceholder: "searchPlaceholder", dropdownPosition: "dropdownPosition", clearButtonTitle: "clearButtonTitle", noItemsFoundText: "noItemsFoundText", loadingPlaceholderText: "loadingPlaceholderText", searchInputId: "searchInputId", isLoading: "isLoading", inputAttrs: "inputAttrs", htmlId: "htmlId", itemsAlreadyGrouped: "itemsAlreadyGrouped", invertDisabled: "invertDisabled", noGroupActions: "noGroupActions", autoHighlightFirst: "autoHighlightFirst", autoFocus: "autoFocus", keepOpen: "keepOpen", hideSelected: "hideSelected", noBackspaceClear: "noBackspaceClear", sortMultipleValues: "sortMultipleValues", searchCaseSensitive: "searchCaseSensitive", keepSearchAfterSelect: "keepSearchAfterSelect", maxSelectedItems: "maxSelectedItems", itemDisplayLimit: "itemDisplayLimit", searchFn: "searchFn", compareWith: "compareWith", appearance: "appearance", variant: "variant", compact: "compact", dropdowonAppearance: "dropdowonAppearance", dropdowonVariant: "dropdowonVariant", groupItems: "groupItems", items: "items", multiselectable: "multiselectable", clearable: "clearable", searchable: "searchable", addCustom: "addCustom", value: "value", isDropdownOpen: ["isOpen", "isDropdownOpen"] }, outputs: { valueChange: "valueChange", changeEvent: "change", addEvent: "add", failedToAddEvent: "failedToAdd", removeEvent: "remove", clearEvent: "clear", openEvent: "open", closeEvent: "close", scrollEvent: "scroll", scrollToEndEvent: "scrollToEnd", searchEvent: "search", isDropdownOpenChange: "isOpenChange" }, host: { listeners: { "window:resize": "onWindowResize()", "mouseup": "onMouseup()", "keydown": "onKeyPress($event)" }, properties: { "class.ard-group-items": "this.groupItems", "attr.multiple": "this.multiselectable" } }, providers: [
943
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ArdiumSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i1.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
944
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ArdiumSelectComponent, selector: "ard-select", inputs: { valueFrom: "valueFrom", labelFrom: "labelFrom", disabledFrom: "disabledFrom", groupLabelFrom: "groupLabelFrom", groupDisabledFrom: "groupDisabledFrom", childrenFrom: "childrenFrom", placeholder: "placeholder", searchPlaceholder: "searchPlaceholder", dropdownPosition: "dropdownPosition", clearButtonTitle: "clearButtonTitle", noItemsFoundText: "noItemsFoundText", loadingPlaceholderText: "loadingPlaceholderText", searchInputId: "searchInputId", isLoading: "isLoading", inputAttrs: "inputAttrs", htmlId: "htmlId", itemsAlreadyGrouped: "itemsAlreadyGrouped", invertDisabled: "invertDisabled", noGroupActions: "noGroupActions", autoHighlightFirst: "autoHighlightFirst", autoFocus: "autoFocus", keepOpen: "keepOpen", hideSelected: "hideSelected", noBackspaceClear: "noBackspaceClear", sortMultipleValues: "sortMultipleValues", searchCaseSensitive: "searchCaseSensitive", keepSearchAfterSelect: "keepSearchAfterSelect", maxSelectedItems: "maxSelectedItems", itemDisplayLimit: "itemDisplayLimit", searchFn: "searchFn", compareWith: "compareWith", appearance: "appearance", variant: "variant", compact: "compact", dropdowonAppearance: "dropdowonAppearance", dropdowonVariant: "dropdowonVariant", groupItems: "groupItems", items: "items", multiselectable: "multiselectable", clearable: "clearable", searchable: "searchable", addCustom: "addCustom", value: "value", isDropdownOpen: ["isOpen", "isDropdownOpen"] }, outputs: { valueChange: "valueChange", changeEvent: "change", addEvent: "add", failedToAddEvent: "failedToAdd", removeEvent: "remove", clearEvent: "clear", openEvent: "open", closeEvent: "close", scrollEvent: "scroll", scrollToEndEvent: "scrollToEnd", searchEvent: "search", isDropdownOpenChange: "isOpenChange" }, host: { listeners: { "window:resize": "onWindowResize()", "mouseup": "onMouseup()", "keydown": "onKeyPress($event)" }, properties: { "class.ard-group-items": "this.groupItems", "attr.multiple": "this.multiselectable" } }, providers: [
945
945
  {
946
946
  provide: NG_VALUE_ACCESSOR,
947
947
  useExisting: forwardRef(() => ArdiumSelectComponent),
@@ -949,7 +949,7 @@ export class ArdiumSelectComponent extends _NgModelComponentBase {
949
949
  },
950
950
  ], queries: [{ propertyName: "optionTemplate", first: true, predicate: ArdOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optgroupTemplate", first: true, predicate: ArdOptgroupTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "valueTemplate", first: true, predicate: ArdValueTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: ArdSelectPlaceholderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "loadingSpinnerTemplate", first: true, predicate: ArdLoadingSpinnerTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "loadingPlaceholderTemplate", first: true, predicate: ArdLoadingPlaceholderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "dropdownHeaderTemplate", first: true, predicate: ArdDropdownHeaderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "dropdownFooterTemplate", first: true, predicate: ArdDropdownFooterTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "noItemsFoundTemplate", first: true, predicate: ArdNoItemsFoundTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "addCustomTemplate", first: true, predicate: ArdAddCustomTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "itemLimitReachedTemplate", first: true, predicate: ArdItemLimitReachedTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "itemDisplayLimitTemplate", first: true, predicate: ArdItemDisplayLimitTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "prefixTemplate", first: true, predicate: ArdSelectPrefixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "suffixTemplate", first: true, predicate: ArdSelectSuffixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionComponents", predicate: ArdiumOptionComponent }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, static: true }, { propertyName: "dropdownPanel", first: true, predicate: i0.forwardRef(() => ArdiumDropdownPanelComponent), descendants: true }, { propertyName: "dropdownHost", first: true, predicate: ["dropdownHost"], descendants: true, read: ElementRef }, { propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance\"\r\n [variant]=\"variant\"\r\n [compact]=\"compact\"\r\n [isFocused]=\"isFocused\"\r\n [prefixTemplate]=\"prefixTemplate\"\r\n [suffixTemplate]=\"suffixTemplate\"\r\n>\r\n <div class=\"ard-select\"\r\n #dropdownHost\r\n (click)=\"handleAnywhereClick($event)\"\r\n [class.ard-has-value]=\"itemStorage.isAnyItemSelected\"\r\n [ngClass]=\"ngClasses\"\r\n >\r\n <div class=\"ard-select-value-container\">\r\n <ng-container *ngIf=\"shouldDisplayPlaceholder\">\r\n <ng-template #defaultPlaceholderTemplate let-plhldr>\r\n <div class=\"ard-placeholder\">{{ plhldr }}</div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\"\r\n [ngTemplateOutletContext]=\"getPlaceholderContext()\"\r\n ></ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"shouldDisplayValue\">\r\n <div class=\"ard-select-value\"\r\n *ngFor=\"let item of itemStorage.selectedItems; let i = index\"\r\n [class.ard-value-disabled]=\"item.disabled\"\r\n [attr.hidden]=\"!isValueWithinDisplayLimit(i) ? true : null\"\r\n >\r\n <ng-template *ngIf=\"isValueWithinDisplayLimit(i)\"\r\n [ngTemplateOutlet]=\"valueTemplate || (multiselectable ? defaultMultiValueTemplate : defaultValueTemplate)\"\r\n [ngTemplateOutletContext]=\"getValueContext(item)\"\r\n ></ng-template>\r\n </div>\r\n\r\n <ng-template #defaultValueTemplate let-item>\r\n <div [ardInnerHTML]=\"item.label\" [ardEscapeInnerHTML]=\"isItemsInputUsed\"></div>\r\n </ng-template>\r\n <ng-template #defaultMultiValueTemplate let-item let-unselect=\"unselect\">\r\n <ard-deletable-chip\r\n (delete)=\"unselect(item)\"\r\n [variant]=\"variant\"\r\n compact\r\n appearance=\"outlined-strong\"\r\n >\r\n <div [ardInnerHTML]=\"item.label\" [ardEscapeInnerHTML]=\"isItemsInputUsed\"></div>\r\n </ard-deletable-chip>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"itemStorage.isAnyItemSelected && shouldShowItemDisplayLimit\">\r\n <div class=\"ard-overflow-indicator\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"itemDisplayLimitTemplate || defaultItemDisplayLimitTemplate\"\r\n [ngTemplateOutletContext]=\"getItemDisplayLimitContext()\"\r\n ></ng-template>\r\n\r\n <ng-template #defaultItemDisplayLimitTemplate let-count=\"overflowCount\">\r\n <div>{{count}} more...</div>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"ard-search-input\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"isDropdownOpen\"\r\n [attr.aria-owns]=\"isDropdownOpen ? htmlId : null\"\r\n >\r\n <input #searchInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"searchInputId\"\r\n [attr.tabindex]=\"tabIndex\"\r\n [readonly]=\"isInputElementReadonly\"\r\n [disabled]=\"disabled\"\r\n [value]=\"searchTerm\"\r\n aria-autocomplete=\"list\"\r\n [attr.aria-controls]=\"isDropdownOpen ? htmlId : null\"\r\n (input)=\"filter(searchInput.value)\"\r\n (change)=\"$event.stopPropagation()\"\r\n (focus)=\"onFocus($event)\"\r\n (focus)=\"onSearchInputFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (blur)=\"onSearchInputBlur($event)\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"ard-select-controls\">\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-template #defaultLoadingSpinnerTemplate>\r\n <div class=\"ard-simple-spinner\"></div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate || defaultLoadingSpinnerTemplate\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ard-_clear-button *ngIf=\"shouldShowClearButton\"\r\n [title]=\"clearButtonTitle\"\r\n (click)=\"handleClearButtonClick($event)\"\r\n ></ard-_clear-button>\r\n\r\n <div class=\"ard-dropdown-arrow-wrapper\"\r\n role=\"button\"\r\n (click)=\"handleDropdownArrowClick($event)\"\r\n >\r\n <span class=\"ard-dropdown-arrow\"></span>\r\n <div class=\"ard-hitbox\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n\r\n<ng-template #dropdownTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-select-dropdown-panel\"\r\n role=\"listbox\"\r\n aria-label=\"Options list\"\r\n [headerTemplate]=\"dropdownHeaderTemplate\"\r\n [footerTemplate]=\"dropdownFooterTemplate\"\r\n [appearance]=\"dropdownAppearance\"\r\n [variant]=\"dropdownVariant\"\r\n [isOpen]=\"true\"\r\n [filterValue]=\"searchTerm\"\r\n [panelId]=\"htmlId\"\r\n [compact]=\"compact\"\r\n (ardClickOutside)=\"handleOutsideClick($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n (scroll)=\"scrollEvent.emit($event)\"\r\n (scrollToEnd)=\"scrollToEndEvent.emit($event)\"\r\n >\r\n <ng-container *ngIf=\"!shouldShowNoItemsFound\">\r\n <div\r\n class=\"ard-optgroup\"\r\n role=\"group\"\r\n *ngFor=\"let group of itemStorage.groups\"\r\n [class.ard-group-disabled]=\"group.disabled\"\r\n [class.ard-group-selected]=\"group.selected\"\r\n [class.ard-group-highlighted]=\"group.highlighted\"\r\n (mouseover)=\"onGroupMouseover(group)\"\r\n (click)=\"onGroupClick(group)\"\r\n >\r\n <ng-container *ngIf=\"group.label !== '' && group.label !== undefined\">\r\n <ng-template #defaultOptgroupTemplate>\r\n <span class=\"ard-optgroup-label\" [ardInnerHTML]=\"group.label\" [ardEscapeInnerHTML]=\"isItemsInputUsed\"></span>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"optgroupTemplate || defaultOptgroupTemplate\"\r\n [ngTemplateOutletContext]=\"getGroupContext(group)\"\r\n ></ng-template>\r\n </ng-container>\r\n\r\n <div class=\"ard-optgroup-children\">\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n *ngFor=\"let option of group.children\"\r\n [class.ard-option-disabled]=\"option.disabled\"\r\n [class.ard-option-selected]=\"option.selected\"\r\n [class.ard-option-highlighted]=\"option.highlighted\"\r\n [class.ard-option-highlighted-recent]=\"option.highlighted_recently\"\r\n [attr.aria-selected]=\"option.selected\"\r\n [attr.id]=\"htmlId + '-' + option.index\"\r\n (click)=\"onItemClick(option, $event)\"\r\n (mouseover)=\"onItemMouseOver($event)\"\r\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\r\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\r\n >\r\n <div class=\"ard-option-label\">\r\n <ng-template #defaultOptionTemplate>\r\n <span [ardInnerHTML]=\"option.label\" [ardEscapeInnerHTML]=\"isItemsInputUsed\"></span>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"optionTemplate || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"shouldShowNoItemsFound\">\r\n <ng-template #defaultNoItemsFoundTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{noItemsFoundText}}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"noItemsFoundTemplate || defaultNoItemsFoundTemplate\"\r\n [ngTemplateOutletContext]=\"getSearchContext()\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"shouldShowAddCustom\">\r\n <ng-template #defaultAddCustomTemplate let-searchTerm>\r\n <div class=\"ard-option ard-option-highlighted ard-add-custom\" (click)=\"addCustomOption(searchTerm)\">\r\n <span class=\"ard-add-custom-label\">Add option</span>\r\n <span class=\"ard-add-custom-value\">\"{{searchTerm}}\"</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"addCustomTemplate || defaultAddCustomTemplate\"\r\n [ngTemplateOutletContext]=\"getCustomOptionContext()\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{loadingPlaceholderText}}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"loadingPlaceholderTemplate || defaultLoadingPlaceholderTemplate\"\r\n [ngTemplateOutletContext]=\"getSearchContext()\">\r\n </ng-template>\r\n </ng-container>\r\n </ard-dropdown-panel>\r\n</ng-template>", styles: ["@import\"@angular/cdk/overlay-prebuilt.css\";.ard-select .ard-select-container{display:flex;cursor:pointer}.ard-select .ard-placeholder,.ard-select .ard-value,.ard-select .ard-dropdown-arrow-wrapper,.ard-select .ard-clear-btn-wrapper{-webkit-user-select:none;user-select:none}.ard-select .ard-clear-btn,.ard-select .ard-dropdown-arrow{border:none;background:transparent;padding:0;box-sizing:content-box}.ard-select .ard-option-disabled{pointer-events:none}.ard-select .ard-value[hidden]{display:none}.ard-select .ard-searchable .ard-select-value-container{cursor:text}.ard-select .ard-dropdown-arrow-wrapper{position:relative}.ard-select .ard-dropdown-arrow-wrapper .ard-hitbox{position:absolute;left:-4px;right:-4px;aspect-ratio:1}.ard-select-dropdown-panel .ard-optgroup,.ard-select-dropdown-panel .ard-option{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: i4.ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "component", type: i5.ArdiumDeletableChipComponent, selector: "ard-deletable-chip", inputs: ["deleteButtonTitle", "contentAlignment", "appearance", "variant", "color", "compact", "wrapperClasses"], outputs: ["delete"] }, { kind: "directive", type: i6.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }, { kind: "component", type: i7._ClearButtonComponent, selector: "ard-_clear-button" }, { kind: "directive", type: i6.ArdiumInnerHTMLDirective, selector: "[ardInnerHTML]", inputs: ["ardInnerHTML", "ardEscapeInnerHTML"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
951
951
  }
952
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ArdiumSelectComponent, decorators: [{
952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ArdiumSelectComponent, decorators: [{
953
953
  type: Component,
954
954
  args: [{ selector: 'ard-select', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
955
955
  {
@@ -1155,4 +1155,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
1155
1155
  type: HostListener,
1156
1156
  args: ['keydown', ['$event']]
1157
1157
  }] } });
1158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLGFBQWEsRUFBcUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUVULGlCQUFpQixFQUNqQixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9C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YztzQkFEYixZQUFZO3VCQUFDLGVBQWU7Z0JBdVE3QixTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUztnQkFvRXZCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmLCBTY3JvbGxTdHJhdGVneU9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXlQcm9wZXJ0eSwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0BhcmRpdW0tdWkvZGV2a2l0JztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNBbnlTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICdzaW1wbGUtYm9vbCc7XG5pbXBvcnQgeyBJdGVtU3RvcmFnZSB9IGZyb20gJy4uL19pbnRlcm5hbC9pdGVtLXN0b3JhZ2VzL2Ryb3Bkb3duLWl0ZW0tc3RvcmFnZSc7XG5pbXBvcnQgeyBfTmdNb2RlbENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9faW50ZXJuYWwvbmdtb2RlbC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQXJkaXVtRHJvcGRvd25QYW5lbENvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duLXBhbmVsL2Ryb3Bkb3duLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93blBhbmVsQXBwZWFyYW5jZSwgRHJvcGRvd25QYW5lbFZhcmlhbnQgfSBmcm9tICcuLi9kcm9wZG93bi1wYW5lbC9kcm9wZG93bi1wYW5lbC50eXBlcyc7XG5pbXBvcnQgeyBBcmRpdW1PcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzZWFyY2hGdW5jdGlvbnMgfSBmcm9tICcuLi9zZWFyY2gtZnVuY3Rpb25zJztcbmltcG9ydCB7IEFyZE9wdGlvbiwgQXJkT3B0aW9uR3JvdXAsIEFyZFBhbmVsUG9zaXRpb24sIENvbXBhcmVXaXRoRm4sIEdyb3VwQnlGbiwgT3B0aW9uQ29udGV4dCwgU2VhcmNoRm4gfSBmcm9tICcuLi90eXBlcy9pdGVtLXN0b3JhZ2UudHlwZXMnO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnRBcHBlYXJhbmNlIH0gZnJvbSAnLi4vdHlwZXMvdGhlbWluZy50eXBlcyc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudFZhcmlhbnQgfSBmcm9tICcuLy4uL3R5cGVzL3RoZW1pbmcudHlwZXMnO1xuaW1wb3J0IHtcbiAgQXJkQWRkQ3VzdG9tVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZERyb3Bkb3duRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZERyb3Bkb3duSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZEl0ZW1EaXNwbGF5TGltaXRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgQXJkSXRlbUxpbWl0UmVhY2hlZFRlbXBsYXRlRGlyZWN0aXZlLFxuICBBcmRMb2FkaW5nUGxhY2Vob2xkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgQXJkTG9hZGluZ1NwaW5uZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgQXJkTm9JdGVtc0ZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZE9wdGdyb3VwVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZE9wdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICBBcmRTZWxlY3RQbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICBBcmRTZWxlY3RQcmVmaXhUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgQXJkU2VsZWN0U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZFZhbHVlVGVtcGxhdGVEaXJlY3RpdmUsXG59IGZyb20gJy4vc2VsZWN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBBZGRDdXN0b21GbixcbiAgQ3VzdG9tT3B0aW9uQ29udGV4dCxcbiAgR3JvdXBDb250ZXh0LFxuICBJdGVtRGlzcGxheUxpbWl0Q29udGV4dCxcbiAgSXRlbUxpbWl0Q29udGV4dCxcbiAgUGxhY2Vob2xkZXJDb250ZXh0LFxuICBTZWFyY2hDb250ZXh0LFxuICBTdGF0c0NvbnRleHQsXG4gIFZhbHVlQ29udGV4dCxcbn0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcmQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBcmRpdW1TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXJkaXVtU2VsZWN0Q29tcG9uZW50XG4gIGV4dGVuZHMgX05nTW9kZWxDb21wb25lbnRCYXNlXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLy8hIHB1YmxpYyBjb25zdGFudHNcbiAgcmVhZG9ubHkgaXRlbVN0b3JhZ2UgPSBuZXcgSXRlbVN0b3JhZ2UodGhpcyk7XG4gIHJlYWRvbmx5IGVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgREVGQVVMVFMgPSB7XG4gICAgdmFsdWVGcm9tOiAndmFsdWUnLFxuICAgIGxhYmVsRnJvbTogJ2xhYmVsJyxcbiAgICBkaXNhYmxlZEZyb206ICdkaXNhYmxlZCcsXG4gICAgZ3JvdXBMYWJlbEZyb206ICdncm91cCcsXG4gICAgZ3JvdXBEaXNhYmxlZEZyb206ICdkaXNhYmxlZCcsXG4gICAgY2hpbGRyZW5Gcm9tOiAnY2hpbGRyZW4nLFxuICAgIHNlYXJjaEZuOiBzZWFyY2hGdW5jdGlvbnMuYnlMYWJlbCxcbiAgICBjbGVhckJ1dHRvblRpdGxlOiAnQ2xlYXInLFxuICAgIG5vSXRlbXNGb3VuZFRleHQ6ICdObyBpdGVtcyBmb3VuZC4nLFxuICAgIGxvYWRpbmdQbGFjZWhvbGRlclRleHQ6ICdMb2FkaW5nLi4uJyxcbiAgfTtcblxuICAvLyEgcHJpdmF0ZXNcbiAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdIHwgbnVsbCA9IFtdO1xuICBwcml2YXRlIF9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG4gIHByaXZhdGUgX3NlYXJjaEJhckZvY3VzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vISBwdWJsaWNzXG4gIHB1YmxpYyBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcbiAgaXNJdGVtc0lucHV0VXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vISBiaW5kaW5nLXJlbGF0ZWQgaW5wdXRzXG4gIC8vdmFsdWUvbGFiZWwvZGlzYWJsZWQvZ3JvdXAvcHJlLWdyb3VwZWQgY2hpbGRyZW4gcGF0aHNcbiAgQElucHV0KCkgdmFsdWVGcm9tPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbEZyb20/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRnJvbT86IHN0cmluZztcbiAgLy8hIGdyb3VwLXJlbGF0ZWQgaW5wdXRzXG4gIEBJbnB1dCgpIGdyb3VwTGFiZWxGcm9tPzogc3RyaW5nIHwgR3JvdXBCeUZuO1xuICBASW5wdXQoKSBncm91cERpc2FibGVkRnJvbT86IHN0cmluZztcbiAgQElucHV0KCkgY2hpbGRyZW5Gcm9tPzogc3RyaW5nO1xuICAvLyEgc2V0dGluZ3NcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgaXRlbSc7XG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoLi4uJztcbiAgQElucHV0KCkgZHJvcGRvd25Qb3NpdGlvbjogQXJkUGFuZWxQb3NpdGlvbiA9IEFyZFBhbmVsUG9zaXRpb24uQXV0bztcbiAgQElucHV0KCkgY2xlYXJCdXR0b25UaXRsZTogc3RyaW5nID0gdGhpcy5ERUZBVUxUUy5jbGVhckJ1dHRvblRpdGxlO1xuICAvLyEgdGVtcGxhdGUtcmVsYXRlZCBzZXR0aW5nc1xuICBASW5wdXQoKSBub0l0ZW1zRm91bmRUZXh0OiBzdHJpbmcgPSB0aGlzLkRFRkFVTFRTLm5vSXRlbXNGb3VuZFRleHQ7XG4gIEBJbnB1dCgpIGxvYWRpbmdQbGFjZWhvbGRlclRleHQ6IHN0cmluZyA9IHRoaXMuREVGQVVMVFMubG9hZGluZ1BsYWNlaG9sZGVyVGV4dDtcbiAgLy8hIHNlYXJjaC1yZWxhdGVkIG9wdGlvbnNcbiAgQElucHV0KCkgc2VhcmNoSW5wdXRJZD86IHN0cmluZztcbiAgLy8hIG90aGVyIGlucHV0c1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaW5wdXRBdHRyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBASW5wdXQoKSBodG1sSWQ6IHN0cmluZyA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG5cbiAgLy8hIGJvb2xlYW4gc2V0dGluZ3NcbiAgcHJpdmF0ZSBfaXRlbXNBbHJlYWR5R3JvdXBlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgaXRlbXNBbHJlYWR5R3JvdXBlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNBbHJlYWR5R3JvdXBlZDtcbiAgfVxuICBzZXQgaXRlbXNBbHJlYWR5R3JvdXBlZCh2OiBhbnkpIHtcbiAgICB0aGlzLl9pdGVtc0FscmVhZHlHcm91cGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgLy9zaG91bGQgdGhlIHZhbHVlIHRoYXQgdGhlIFwiZGlzYWJsZWRGcm9tXCIgcGF0aCBsZWFkIHRvIGJlIGludmVydGVkP1xuICAvL3VzZWZ1bCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBlLmcuIFwiYWN0aXZlXCIsIHdoaWNoIGlzIHRoZSBvcG9zaXRlIG9mIFwiZGlzYWJsZWRcIlxuICBwcml2YXRlIF9pbnZlcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgaW52ZXJ0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ludmVydERpc2FibGVkO1xuICB9XG4gIHNldCBpbnZlcnREaXNhYmxlZCh2OiBhbnkpIHtcbiAgICB0aGlzLl9pbnZlcnREaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIHByaXZhdGUgX25vR3JvdXBBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBub0dyb3VwQWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbm9Hcm91cEFjdGlvbnM7XG4gIH1cbiAgc2V0IG5vR3JvdXBBY3Rpb25zKHY6IGFueSkge1xuICAgIHRoaXMuX25vR3JvdXBBY3Rpb25zID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXV0b0hpZ2hsaWdodEZpcnN0OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgZ2V0IGF1dG9IaWdobGlnaHRGaXJzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b0hpZ2hsaWdodEZpcnN0O1xuICB9XG4gIHNldCBhdXRvSGlnaGxpZ2h0Rmlyc3QodjogYW55KSB7XG4gICAgdGhpcy5fYXV0b0hpZ2hsaWdodEZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBhdXRvRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Gb2N1cztcbiAgfVxuICBzZXQgYXV0b0ZvY3VzKHY6IGFueSkge1xuICAgIHRoaXMuX2F1dG9Gb2N1cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIHByaXZhdGUgX2tlZXBPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBrZWVwT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fa2VlcE9wZW47XG4gIH1cbiAgc2V0IGtlZXBPcGVuKHY6IGFueSkge1xuICAgIHRoaXMuX2tlZXBPcGVuID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGlkZVNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBoaWRlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVTZWxlY3RlZDtcbiAgfVxuICBzZXQgaGlkZVNlbGVjdGVkKHY6IGFueSkge1xuICAgIHRoaXMuX2hpZGVTZWxlY3RlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFyT25CYWNrc3BhY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IG5vQmFja3NwYWNlQ2xlYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyT25CYWNrc3BhY2U7XG4gIH1cbiAgc2V0IG5vQmFja3NwYWNlQ2xlYXIodjogYW55KSB7XG4gICAgdGhpcy5fY2xlYXJPbkJhY2tzcGFjZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NvcnRNdWx0aXBsZVZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgc29ydE11bHRpcGxlVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0TXVsdGlwbGVWYWx1ZXM7XG4gIH1cbiAgc2V0IHNvcnRNdWx0aXBsZVZhbHVlcyh2OiBhbnkpIHtcbiAgICB0aGlzLl9zb3J0TXVsdGlwbGVWYWx1ZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gIH1cblxuICBwcml2YXRlIF9zZWFyY2hDYXNlU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBzZWFyY2hDYXNlU2Vuc2l0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDYXNlU2Vuc2l0aXZlO1xuICB9XG4gIHNldCBzZWFyY2hDYXNlU2Vuc2l0aXZlKHY6IGFueSkge1xuICAgIHRoaXMuX3NlYXJjaENhc2VTZW5zaXRpdmUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gIH1cblxuICBwcml2YXRlIF9rZWVwU2VhcmNoQWZ0ZXJTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IGtlZXBTZWFyY2hBZnRlclNlbGVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fa2VlcFNlYXJjaEFmdGVyU2VsZWN0O1xuICB9XG4gIHNldCBrZWVwU2VhcmNoQWZ0ZXJTZWxlY3QodjogYW55KSB7XG4gICAgdGhpcy5fa2VlcFNlYXJjaEFmdGVyU2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgLy8hIG51bWJlciBpbnB1dHNcbiAgcHJpdmF0ZSBfbWF4U2VsZWN0ZWRJdGVtczogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKVxuICBnZXQgbWF4U2VsZWN0ZWRJdGVtcygpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tYXhTZWxlY3RlZEl0ZW1zO1xuICB9XG4gIHNldCBtYXhTZWxlY3RlZEl0ZW1zKHY6IGFueSkge1xuICAgIHRoaXMuX21heFNlbGVjdGVkSXRlbXMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2LCB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbURpc3BsYXlMaW1pdDogbnVtYmVyID0gSW5maW5pdHk7XG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtRGlzcGxheUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1EaXNwbGF5TGltaXQ7XG4gIH1cbiAgc2V0IGl0ZW1EaXNwbGF5TGltaXQodjogYW55KSB7XG4gICAgdGhpcy5faXRlbURpc3BsYXlMaW1pdCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHYsIEluZmluaXR5KTtcbiAgfVxuXG4gIC8vISBmdW5jdGlvbiBpbnB1dHNcbiAgcHJpdmF0ZSBfc2VhcmNoRm46IFNlYXJjaEZuID0gdGhpcy5ERUZBVUxUUy5zZWFyY2hGbjtcbiAgQElucHV0KClcbiAgZ2V0IHNlYXJjaEZuKCk6IFNlYXJjaEZuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoRm47XG4gIH1cbiAgc2V0IHNlYXJjaEZuKGZuOiBTZWFyY2hGbikge1xuICAgIGlmIChmbiAhPT0gdW5kZWZpbmVkICYmIGZuICE9PSBudWxsICYmICFpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ2BzZWFyY2hGbmAgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cbiAgICB0aGlzLl9zZWFyY2hGbiA9IGZuO1xuICB9XG4gIHByaXZhdGUgX2NvbXBhcmVXaXRoPzogQ29tcGFyZVdpdGhGbjtcbiAgQElucHV0KClcbiAgZ2V0IGNvbXBhcmVXaXRoKCk6IENvbXBhcmVXaXRoRm4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb21wYXJlV2l0aDtcbiAgfVxuICBzZXQgY29tcGFyZVdpdGgoZm46IENvbXBhcmVXaXRoRm4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoZm4gIT09IHVuZGVmaW5lZCAmJiBmbiAhPT0gbnVsbCAmJiAhaXNGdW5jdGlvbihmbikpIHtcbiAgICAgIHRocm93IEVycm9yKCdgY29tcGFyZVdpdGhgIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gICAgdGhpcy5fY29tcGFyZVdpdGggPSBmbjtcbiAgfVxuXG4gIC8vISBhcHBlYXJhbmNlXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IEZvcm1FbGVtZW50QXBwZWFyYW5jZSA9IEZvcm1FbGVtZW50QXBwZWFyYW5jZS5PdXRsaW5lZDtcbiAgQElucHV0KCkgdmFyaWFudDogRm9ybUVsZW1lbnRWYXJpYW50ID0gRm9ybUVsZW1lbnRWYXJpYW50LlJvdW5kZWQ7XG5cbiAgcHJpdmF0ZSBfY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgY29tcGFjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcGFjdDtcbiAgfVxuICBzZXQgY29tcGFjdCh2OiBhbnkpIHtcbiAgICB0aGlzLl9jb21wYWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgZ2V0IG5nQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAvL2FwcGVhcmFuY2UsIHZhcmlhbnQgaGFuZGxlZCBpbiBhcmQtZm9ybS1maWVsZC1mcmFtZSBjb21wb25lbnRcbiAgICAgIHRoaXMuY29tcGFjdCA/ICdhcmQtY29tcGFjdCcgOiAnJyxcbiAgICAgIHRoaXMubXVsdGlzZWxlY3RhYmxlID8gJ2FyZC1tdWx0aXNlbGVjdCcgOiAnYXJkLXNpbmdsZXNlbGVjdCcsXG4gICAgICB0aGlzLmNsZWFyYWJsZSA/ICdhcmQtY2xlYXJhYmxlJyA6ICcnLFxuICAgICAgdGhpcy5zZWFyY2hhYmxlID8gJ2FyZC1zZWFyY2hhYmxlJyA6ICcnLFxuICAgICAgdGhpcy5maWx0ZXJlZCA/ICdhcmQtZmlsdGVyZWQnIDogJycsXG4gICAgICB0aGlzLnRvdWNoZWQgPyAnYXJkLXRvdWNoZWQnIDogJycsXG4gICAgICB0aGlzLmlzRHJvcGRvd25PcGVuID8gJ2FyZC1kcm9wZG93bi1vcGVuJyA6ICcnLFxuICAgICAgdGhpcy5fc2VhcmNoQmFyRm9jdXNlZCA/ICdhcmQtc2VsZWN0LWZvY3VzZWQnIDogJycsXG4gICAgICB0aGlzLl9zZWFyY2hCYXJGb2N1c2VkID8gJ2FyZC1zZWxlY3QtZm9jdXNlZCcgOiAnJyxcbiAgICBdLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Ryb3Bkb3duQXBwZWFyYW5jZT86IERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKVxuICBzZXQgZHJvcGRvd29uQXBwZWFyYW5jZSh2OiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZSkge1xuICAgIHRoaXMuX2Ryb3Bkb3duQXBwZWFyYW5jZSA9IHY7XG4gIH1cbiAgZ2V0IGRyb3Bkb3duQXBwZWFyYW5jZSgpOiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZSB7XG4gICAgaWYgKHRoaXMuX2Ryb3Bkb3duQXBwZWFyYW5jZSkgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQXBwZWFyYW5jZTtcbiAgICBpZiAodGhpcy5hcHBlYXJhbmNlID09IEZvcm1FbGVtZW50QXBwZWFyYW5jZS5PdXRsaW5lZCkgcmV0dXJuIERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlLk91dGxpbmVkO1xuICAgIHJldHVybiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZS5SYWlzZWQ7XG4gIH1cbiAgcHJpdmF0ZSBfZHJvcGRvd25WYXJpYW50PzogRHJvcGRvd25QYW5lbFZhcmlhbnQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpXG4gIHNldCBkcm9wZG93b25WYXJpYW50KHY6IERyb3Bkb3duUGFuZWxWYXJpYW50KSB7XG4gICAgdGhpcy5fZHJvcGRvd25WYXJpYW50ID0gdjtcbiAgfVxuICBnZXQgZHJvcGRvd25WYXJpYW50KCk6IERyb3Bkb3duUGFuZWxWYXJpYW50IHtcbiAgICBpZiAodGhpcy5fZHJvcGRvd25WYXJpYW50KSByZXR1cm4gdGhpcy5fZHJvcGRvd25WYXJpYW50O1xuICAgIGlmICh0aGlzLnZhcmlhbnQgPT0gRm9ybUVsZW1lbnRWYXJpYW50LlBpbGwpIHJldHVybiBEcm9wZG93blBhbmVsVmFyaWFudC5Sb3VuZGVkO1xuICAgIHJldHVybiB0aGlzLnZhcmlhbnQ7XG4gIH1cblxuICAvLyEgY2xhc3MtYmFzZWQgaW5wdXRzXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MuYXJkLWdyb3VwLWl0ZW1zJykgZ3JvdXBJdGVtczogYm9vbGVhbiA9IGZhbHNlOyAvL2RlZmF1bHQgdmFsdWUgbWF5IGJlIGNoYW5nZWQgdG8gXCJ0cnVlXCIgaW4gbmdPbkNoYW5nZXMgaWYgdGhpcy5ncm91cEJ5IGlzIGRlZmluZWQgb3IgdGhpcy5pdGVtc0FscmVhZHlHcm91cGVkIGlzIHNldCB0byBcInRydWVcIlxuXG4gIC8vISBpdGVtcyBzZXR0ZXIvZ2V0dGVyXG4gIEBJbnB1dCgpXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgc2V0IGl0ZW1zKHZhbHVlOiBzdHJpbmcgfCBhbnlbXSB8IG51bGwpIHtcbiAgICB0aGlzLmlzSXRlbXNJbnB1dFVzZWQgPSB0cnVlO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdmFsdWUgPSBbXTtcbiAgICAgIHRoaXMuaXNJdGVtc0lucHV0VXNlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNBbnlTdHJpbmcodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IGNvZXJjZUFycmF5UHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBsZXQgcHJpbnRFcnJvcnMgPSB0aGlzLml0ZW1TdG9yYWdlLnNldEl0ZW1zKHZhbHVlKTtcbiAgICBpZiAocHJpbnRFcnJvcnMpIHtcbiAgICAgIHRoaXMuX3ByaW50UHJpbWl0aXZlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKEFyZGl1bU9wdGlvbkNvbXBvbmVudClcbiAgb3B0aW9uQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxBcmRpdW1PcHRpb25Db21wb25lbnQ+O1xuXG4gIHByaXZhdGUgX3NldEl0ZW1zRnJvbUNvbXBvbmVudHMoKSB7XG4gICAgY29uc3QgaGFuZGxlT3B0aW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkID0gbWVyZ2UodGhpcy5vcHRpb25Db21wb25lbnRzLmNoYW5nZXMsIHRoaXMuX2Rlc3Ryb3kkKTtcbiAgICAgIG1lcmdlKC4uLnRoaXMub3B0aW9uQ29tcG9uZW50cy5tYXAob3B0aW9uID0+IG9wdGlvbi5zdGF0ZUNoYW5nZSQpKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwoY2hhbmdlZE9yRGVzdHJveWVkKSlcbiAgICAgICAgLnN1YnNjcmliZShvcHRpb24gPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbVN0b3JhZ2UuZmluZEl0ZW1CeVZhbHVlKG9wdGlvbi5vbGRWYWx1ZSA/PyBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IG9wdGlvbi5kaXNhYmxlZDtcbiAgICAgICAgICAgICAgaXRlbS5sYWJlbCA9IG9wdGlvbi5sYWJlbCB8fCBpdGVtLmxhYmVsO1xuICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICBpdGVtLml0ZW1EYXRhLmRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkO1xuICAgICAgICAgICAgICBpdGVtLml0ZW1EYXRhLmxhYmVsID0gb3B0aW9uLmxhYmVsIHx8IGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICAgIGl0ZW0uaXRlbURhdGEudmFsdWUgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbkNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLm9wdGlvbkNvbXBvbmVudHMpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKG9wdGlvbnM6IFF1ZXJ5TGlzdDxBcmRpdW1PcHRpb25Db21wb25lbnQ+KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgfSkpO1xuICAgICAgICBoYW5kbGVPcHRpb25DaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vISBhdHRyaWJ1dGUgYW5kL29yIGNsYXNzIHNldHRlcnMvZ2V0dGVyc1xuICBwcml2YXRlIF9tdWx0aXNlbGVjdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLm11bHRpcGxlJylcbiAgZ2V0IG11bHRpc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlzZWxlY3RhYmxlO1xuICB9XG4gIHNldCBtdWx0aXNlbGVjdGFibGUodjogYW55KSB7XG4gICAgdGhpcy5fbXVsdGlzZWxlY3RhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG4gIGdldCBzaW5nbGVzZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fbXVsdGlzZWxlY3RhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgZ2V0IGNsZWFyYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXJhYmxlO1xuICB9XG4gIHNldCBjbGVhcmFibGUodjogYW55KSB7XG4gICAgdGhpcy5fY2xlYXJhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VhcmNoYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgc2VhcmNoYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoYWJsZTtcbiAgfVxuICBzZXQgc2VhcmNoYWJsZSh2OiBhbnkpIHtcbiAgICB0aGlzLl9zZWFyY2hhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hhYmxlICYmIHRoaXMuc2VhcmNoVGVybSAhPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoZWQ7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgdG91Y2hlZChzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3RvdWNoZWQgPSBzdGF0ZTtcbiAgfVxuXG4gIC8vISBjdXN0b20gb3B0aW9uc1xuICBwcml2YXRlIF9kZWZhdWx0QWRkQ3VzdG9tRm46IEFkZEN1c3RvbUZuPGFueT4gPSAodmFsdWU6IHN0cmluZykgPT4gdmFsdWU7XG4gIHByaXZhdGUgX2FkZEN1c3RvbTogZmFsc2UgfCBBZGRDdXN0b21Gbjxhbnk+IHwgQWRkQ3VzdG9tRm48UHJvbWlzZTxhbnk+PiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgYWRkQ3VzdG9tKCk6IGZhbHNlIHwgQWRkQ3VzdG9tRm48YW55PiB8IEFkZEN1c3RvbUZuPFByb21pc2U8YW55Pj4ge1xuICAgIHJldHVybiB0aGlzLl9hZGRDdXN0b207XG4gIH1cbiAgc2V0IGFkZEN1c3RvbSh2OiBzdHJpbmcgfCBib29sZWFuIHwgQWRkQ3VzdG9tRm48YW55PiB8IEFkZEN1c3RvbUZuPFByb21pc2U8YW55Pj4pIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2KSkge1xuICAgICAgdGhpcy5fYWRkQ3VzdG9tID0gdjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9jb2VyY2UgdGhlIHZhbHVlIGludG8gYSBib29sZWFuXG4gICAgLy9pZiBcInRydWVcIiwgdXNlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uLiBPdGhlcndpc2UsIGp1c3Qgc2V0IHRvIFwiZmFsc2VcIi5cbiAgICB0aGlzLl9hZGRDdXN0b20gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgJiYgdGhpcy5fZGVmYXVsdEFkZEN1c3RvbUZuO1xuICB9XG5cbiAgZ2V0IHNob3VsZFNob3dBZGRDdXN0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ3VzdG9tICE9IGZhbHNlICYmIHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwICYmIHRoaXMuaXRlbVN0b3JhZ2UuaXNOb0l0ZW1zRm91bmQ7XG4gIH1cblxuICBhc3luYyBhZGRDdXN0b21PcHRpb24odmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hZGRDdXN0b20pIHJldHVybjtcblxuICAgIGNvbnN0IG5ld09wdGlvbk9iaiA9IGF3YWl0IHRoaXMuaXRlbVN0b3JhZ2UuYWRkQ3VzdG9tT3B0aW9uKHZhbHVlLCB0aGlzLmFkZEN1c3RvbSk7XG5cbiAgICB0aGlzLnNlbGVjdEl0ZW0obmV3T3B0aW9uT2JqKTtcbiAgfVxuXG4gIC8vISBjb250cm9sIHZhbHVlIGFjY2Vzc29yXG4gIC8vb3ZlcnJpZGUgdGhlIHdyaXRlVmFsdWUgYW5kIHNldERpc2FibGVkU3RhdGUgZGVmaW5lZCBpbiBfTmdNb2RlbENvbXBvbmVudFxuICBvdmVycmlkZSBzZXREaXNhYmxlZFN0YXRlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICB3cml0ZVZhbHVlKG5nTW9kZWw6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oYW5kbGVXcml0ZVZhbHVlKG5nTW9kZWwpO1xuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIC8vKiBjaGFuZ2UgJiB0b3VjaCBldmVudCBlbWl0dGVyc1xuICBwcm90ZWN0ZWQgX2VtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5pdGVtU3RvcmFnZS52YWx1ZTtcbiAgICB0aGlzLl9vbkNoYW5nZVJlZ2lzdGVyZWQ/Lih2YWx1ZSk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX29uVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIHRoaXMuX29uVG91Y2hlZFJlZ2lzdGVyZWQ/LigpO1xuICB9XG5cbiAgLy8hIHZhbHVlIGlucHV0ICYgb3V0cHV0XG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgLy9pZiBpcyBhIHN0cmluZywgY29lcmNlIGl0IGludG8gYXJyYXkgb2Ygc3RyaW5nc1xuICAgIGlmIChpc0FueVN0cmluZyhuZXdWYWx1ZSkpIG5ld1ZhbHVlID0gY29lcmNlQXJyYXlQcm9wZXJ0eShuZXdWYWx1ZSk7XG4gICAgLy9pZiBpdCBpcyBub3QgYSBzdHJpbmcgYW5kIG5vdCBhbiBhcnJheSwganVzdCBwdXQgaXQgaW4gYW4gYXJyYXlcbiAgICBlbHNlIGlmICghaXNBcnJheShuZXdWYWx1ZSkpIG5ld1ZhbHVlID0gW25ld1ZhbHVlXTtcblxuICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS52YWx1ZTtcbiAgfVxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8vISBvdXRwdXQgZXZlbnRzXG4gIEBPdXRwdXQoJ2NoYW5nZScpIGNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgnYWRkJykgYWRkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCdmYWlsZWRUb0FkZCcpIGZhaWxlZFRvQWRkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCdyZW1vdmUnKSByZW1vdmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoJ2NsZWFyJykgY2xlYXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgQE91dHB1dCgnb3BlbicpIG9wZW5FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgQE91dHB1dCgnY2xvc2UnKSBjbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBzY3JvbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgZW5kOiBudW1iZXI7XG4gIH0+KCk7XG4gIEBPdXRwdXQoJ3Njcm9sbFRvRW5kJykgc2Nyb2xsVG9FbmRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnc2VhcmNoJykgc2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBtYXRjaGluZzogYW55W107XG4gIH0+KCk7XG5cbiAgQElucHV0KCdpc09wZW4nKVxuICBpc0Ryb3Bkb3duT3BlbiE6IGJvb2xlYW47XG4gIEBPdXRwdXQoJ2lzT3BlbkNoYW5nZScpIGlzRHJvcGRvd25PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8vISB2aWV3IGNoaWxkcmVuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKGZvcndhcmRSZWYoKCkgPT4gQXJkaXVtRHJvcGRvd25QYW5lbENvbXBvbmVudCkpXG4gIGRyb3Bkb3duUGFuZWwhOiBBcmRpdW1Ecm9wZG93blBhbmVsQ29tcG9uZW50O1xuXG4gIC8vISB0ZW1wbGF0ZXNcbiAgQENvbnRlbnRDaGlsZChBcmRPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBvcHRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQXJkT3B0Z3JvdXBUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBvcHRncm91cFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChBcmRWYWx1ZVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHZhbHVlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKEFyZFNlbGVjdFBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcGxhY2Vob2xkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQXJkTG9hZGluZ1NwaW5uZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBsb2FkaW5nU3Bpbm5lclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChBcmRMb2FkaW5nUGxhY2Vob2xkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBsb2FkaW5nUGxhY2Vob2xkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQXJkRHJvcGRvd25IZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBkcm9wZG93bkhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChBcmREcm9wZG93bkZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGRyb3Bkb3duRm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKEFyZE5vSXRlbXNGb3VuZFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIG5vSXRlbXNGb3VuZFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChBcmRBZGRDdXN0b21UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBhZGRDdXN0b21UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQXJkSXRlbUxpbWl0UmVhY2hlZFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGl0ZW1MaW1pdFJlYWNoZWRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQXJkSXRlbURpc3BsYXlMaW1pdFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGl0ZW1EaXNwbGF5TGltaXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChBcmRTZWxlY3RQcmVmaXhUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcmVmaXhUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQXJkU2VsZWN0U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgc3VmZml4VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vISBjb250ZXh0IHByb3ZpZGVyc1xuICBnZXRWYWx1ZUNvbnRleHQoaXRlbTogQXJkT3B0aW9uKTogVmFsdWVDb250ZXh0IHtcbiAgICBjb25zdCAkdGhpcyA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgIGl0ZW0sXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSxcbiAgICAgIHVuc2VsZWN0KCkge1xuICAgICAgICAkdGhpcy51bnNlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgZ2V0U3RhdHNDb250ZXh0KCk6IFN0YXRzQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGZvdW5kSXRlbXM6IHRoaXMuZm91bmRJdGVtcyxcbiAgICB9O1xuICB9XG4gIGdldFNlYXJjaENvbnRleHQoKTogU2VhcmNoQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdGhpcy5zZWFyY2hUZXJtLFxuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXJtLFxuICAgICAgdG90YWxJdGVtczogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZm91bmRJdGVtczogdGhpcy5mb3VuZEl0ZW1zLFxuICAgIH07XG4gIH1cbiAgZ2V0UGxhY2Vob2xkZXJDb250ZXh0KCk6IFBsYWNlaG9sZGVyQ29udGV4dCB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyRm9yQ3VycmVudENvbnRleHQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgJGltcGxpY2l0OiBwbGFjZWhvbGRlcixcbiAgICB9O1xuICB9XG4gIGdldEN1c3RvbU9wdGlvbkNvbnRleHQoKTogQ3VzdG9tT3B0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdGhpcy5zZWFyY2hUZXJtLFxuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXJtLFxuICAgIH07XG4gIH1cbiAgZ2V0R3JvdXBDb250ZXh0KGdyb3VwOiBBcmRPcHRpb25Hcm91cCk6IEdyb3VwQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogZ3JvdXAsXG4gICAgICBncm91cCxcbiAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IGdyb3VwLmNoaWxkcmVuLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpLmxlbmd0aCxcbiAgICAgIHRvdGFsQ2hpbGRyZW46IGdyb3VwLmNoaWxkcmVuLmxlbmd0aCxcbiAgICB9O1xuICB9XG4gIGdldE9wdGlvbkNvbnRleHQoaXRlbTogQXJkT3B0aW9uKTogT3B0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgIGl0ZW0sXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSxcbiAgICB9O1xuICB9XG4gIGdldEl0ZW1MaW1pdENvbnRleHQoKTogSXRlbUxpbWl0Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0ZWRJdGVtcy5sZW5ndGgsXG4gICAgICBpdGVtTGltaXQ6IHRoaXMubWF4U2VsZWN0ZWRJdGVtcyxcbiAgICB9O1xuICB9XG4gIGdldEl0ZW1EaXNwbGF5TGltaXRDb250ZXh0KCk6IEl0ZW1EaXNwbGF5TGltaXRDb250ZXh0IHtcbiAgICBsZXQgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICBpdGVtTGltaXQ6IHRoaXMubWF4U2VsZWN0ZWRJdGVtcyxcbiAgICAgIG92ZXJmbG93Q291bnQ6IHNlbGVjdGVkSXRlbXMgLSAodGhpcy5pdGVtRGlzcGxheUxpbWl0ID8/IDApLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBzY3JvbGxTdHJhdGVneU9wdHM6IFNjcm9sbFN0cmF0ZWd5T3B0aW9uc1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZWxlbWVudCA9IF9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvLyEgZHJvcGRvd24gb3ZlcmxheVxuICBAVmlld0NoaWxkKCdkcm9wZG93bkhvc3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgZHJvcGRvd25Ib3N0ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGRyb3Bkb3duVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgZHJvcGRvd25PdmVybGF5PzogT3ZlcmxheVJlZjtcblxuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5kcm9wZG93bkhvc3QpXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5T3B0cy5ibG9jaygpLFxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZyk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93blRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgIHRoaXMuZHJvcGRvd25PdmVybGF5LmF0dGFjaChwb3J0YWwpO1xuICAgIHRoaXMuc2V0T3ZlcmxheVNpemUoKTtcbiAgfVxuICBwcml2YXRlIF9kZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25PdmVybGF5KSByZXR1cm47XG5cbiAgICB0aGlzLmRyb3Bkb3duT3ZlcmxheS5kaXNwb3NlKCk7XG4gICAgZGVsZXRlIHRoaXMuZHJvcGRvd25PdmVybGF5O1xuICB9XG5cbiAgc2V0T3ZlcmxheVNpemUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duT3ZlcmxheSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZHJvcGRvd25Ib3N0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkudXBkYXRlU2l6ZSh7IHdpZHRoOiByZWN0LndpZHRoIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0T3ZlcmxheVNpemUoKTtcbiAgfVxuXG4gIC8vISBob29rc1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRTZWFyY2hJbnB1dEF0dHJpYnV0ZXMoKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNJdGVtc0lucHV0VXNlZCkge1xuICAgICAgdGhpcy5fc2V0SXRlbXNGcm9tQ29tcG9uZW50cygpO1xuICAgIH1cbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy9maXJlIGl0ZW1zIGxvYWQgaGFuZGxlciB3aGVuIGxvYWRpbmcgaXMgc2V0IHRvIGZhbHNlXG4gICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXS5jdXJyZW50VmFsdWUgPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fb25JdGVtc0xvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9zZXQgZ3JvdXBJdGVtcyB0byB0cnVlIGJ5IGRlZmF1bHQgaWYgZ3JvdXBMYWJlbEZyb20gb3IgaXRlbXNBbHJlYWR5R3JvdXBlZCBpcyBzZXQgdG8gdHJ1ZSBhcyB0aGUgZmlyc3QgY2hhbmdlXG4gICAgaWYgKChjaGFuZ2VzWydncm91cExhYmVsRnJvbSddPy5maXJzdENoYW5nZSB8fCBjaGFuZ2VzWydpdGVtc0FscmVhZHlHcm91cGVkJ10/LmZpcnN0Q2hhbmdlKSAmJiAhY2hhbmdlc1snZ3JvdXBJdGVtcyddKSB7XG4gICAgICB0aGlzLmdyb3VwSXRlbXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9vbkl0ZW1zTG9hZCgpIHtcbiAgICBpZiAoIXRoaXMuX3NlYXJjaEJhckZvY3VzZWQpIHJldHVybjtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuICBwcml2YXRlIF9wcmludFByaW1pdGl2ZVdhcm5pbmdzKCkge1xuICAgIGZ1bmN0aW9uIG1ha2VXYXJuaW5nKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgICBjb25zb2xlLndhcm4oYFNraXBwZWQgdXNpbmcgWyR7c3RyfV0gcHJvcGVydHkgYm91bmQgdG8gPGFyZC1zZWxlY3Q+LCBhcyBzb21lIHByb3ZpZGVkIGl0ZW1zIGFyZSBvZiBwcmltaXRpdmUgdHlwZWApO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZUZyb20pIHtcbiAgICAgIG1ha2VXYXJuaW5nKCd2YWx1ZUZyb20nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFiZWxGcm9tKSB7XG4gICAgICBtYWtlV2FybmluZygnbGFiZWxGcm9tJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVkRnJvbSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2Rpc2FibGVkRnJvbScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ncm91cExhYmVsRnJvbSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2dyb3VwTGFiZWxGcm9tJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyb3VwRGlzYWJsZWRGcm9tKSB7XG4gICAgICBtYWtlV2FybmluZygnZ3JvdXBEaXNhYmxlZEZyb20nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hpbGRyZW5Gcm9tKSB7XG4gICAgICBtYWtlV2FybmluZygnY2hpbGRyZW5Gcm9tJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmludmVydERpc2FibGVkKSB7XG4gICAgICBtYWtlV2FybmluZygnaW52ZXJ0RGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvLyEgZ2V0dGVyc1xuICBnZXQgZmlyc3RIaWdobGlnaHRlZEl0ZW0oKTogQXJkT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRlZEl0ZW1zPy5maXJzdCgpO1xuICB9XG4gIGdldCBzaG91bGREaXNwbGF5UGxhY2Vob2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLml0ZW1TdG9yYWdlLmlzQW55SXRlbVNlbGVjdGVkICYmICF0aGlzLnNlYXJjaFRlcm07XG4gIH1cbiAgZ2V0IHNob3VsZERpc3BsYXlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCAmJiAoIXRoaXMuc2VhcmNoVGVybSB8fCB0aGlzLm11bHRpc2VsZWN0YWJsZSk7XG4gIH1cbiAgZ2V0IHNob3VsZFNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXJhYmxlICYmICF0aGlzLl9kaXNhYmxlZCAmJiAodGhpcy5pdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCB8fCB0aGlzLnNlYXJjaFRlcm0gIT0gJycpO1xuICB9XG4gIGdldCBpdGVtc1RvRGlzcGxheSgpOiBJdGVyYWJsZUl0ZXJhdG9yPEFyZE9wdGlvbkdyb3VwPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVN0b3JhZ2UuZ3JvdXBzLnZhbHVlcygpO1xuICB9XG4gIGdldCBzaG91bGRTaG93Tm9JdGVtc0ZvdW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1TdG9yYWdlLmlzTm9JdGVtc0ZvdW5kICYmICF0aGlzLmlzTG9hZGluZyAmJiAhdGhpcy5zaG91bGRTaG93QWRkQ3VzdG9tO1xuICB9XG4gIGdldCB0b3RhbEl0ZW1zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVN0b3JhZ2UuaXRlbXMubGVuZ3RoO1xuICB9XG4gIGdldCBmb3VuZEl0ZW1zKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaGFibGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVN0b3JhZ2UuZmlsdGVyZWRJdGVtcy5sZW5ndGg7XG4gIH1cbiAgZ2V0IHNob3VsZFNob3dJdGVtRGlzcGxheUxpbWl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm11bHRpc2VsZWN0YWJsZSAmJiB0aGlzLml0ZW1EaXNwbGF5TGltaXQgIT0gSW5maW5pdHkgJiYgdGhpcy5pdGVtU3RvcmFnZS5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IHRoaXMuaXRlbURpc3BsYXlMaW1pdDtcbiAgfVxuICBnZXQgaXNJbnB1dEVsZW1lbnRSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYWRkQ3VzdG9tICYmICghdGhpcy5zZWFyY2hhYmxlIHx8IHRoaXMuaXRlbVN0b3JhZ2UuaXNJdGVtTGltaXRSZWFjaGVkKTtcbiAgfVxuICBpc1ZhbHVlV2l0aGluRGlzcGxheUxpbWl0KGk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5tdWx0aXNlbGVjdGFibGUgfHwgdGhpcy5pdGVtRGlzcGxheUxpbWl0ID09IEluZmluaXR5IHx8IGkgPCB0aGlzLml0ZW1EaXNwbGF5TGltaXQ7XG4gIH1cbiAgZ2V0IHBsYWNlaG9sZGVyRm9yQ3VycmVudENvbnRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZWFyY2hQbGFjZWhvbGRlciAmJiB0aGlzLnNlYXJjaGFibGUgJiYgKHRoaXMuX3NlYXJjaEJhckZvY3VzZWQgfHwgdGhpcy5faXNDbGlja2VkV2l0aGluKSkgcmV0dXJuIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXI7XG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG4gIH1cblxuICAvLyEgc2VhcmNoIGlucHV0IGV2ZW50IGhhbmRsZXJzXG4gIGZpbHRlcihmaWx0ZXJUZXJtOiBzdHJpbmcsIHN1cHByZXNzU2VhcmNoRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9IGZpbHRlclRlcm07XG4gICAgbGV0IG1hdGNoaW5nID0gdGhpcy5pdGVtU3RvcmFnZS5maWx0ZXIoZmlsdGVyVGVybSk7XG4gICAgaWYgKCFzdXBwcmVzc1NlYXJjaEV2ZW50KSB0aGlzLnNlYXJjaEV2ZW50LmVtaXQoeyBzZWFyY2g6IGZpbHRlclRlcm0sIG1hdGNoaW5nIH0pO1xuICAgIHRoaXMub3BlbigpO1xuICB9XG4gIG9uU2VhcmNoSW5wdXRGb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX3NlYXJjaEJhckZvY3VzZWQgPSB0cnVlO1xuICB9XG4gIG9uU2VhcmNoSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zZWFyY2hCYXJGb2N1c2VkKSByZXR1cm47XG5cbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuX3NlYXJjaEJhckZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuICAvLyEgaXRlbSBzZWxlY3Rpb24gaGFuZGxlcnNcbiAgdG9nZ2xlSXRlbShpdGVtOiBBcmRPcHRpb24pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5zZWxlY3RlZCkge1xuICAgICAgdGhpcy51bnNlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtKTtcbiAgfVxuICBzZWxlY3RJdGVtKC4uLml0ZW1zOiBBcmRPcHRpb25bXSk6IHZvaWQge1xuICAgIGxldCBbc2VsZWN0ZWQsIHVuc2VsZWN0ZWQsIGZhaWxlZFRvU2VsZWN0XSA9IHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0SXRlbSguLi5pdGVtcyk7XG5cbiAgICBpZiAodW5zZWxlY3RlZC5sZW5ndGggPiAwKSB0aGlzLnJlbW92ZUV2ZW50LmVtaXQodW5zZWxlY3RlZCk7XG5cbiAgICBpZiAoZmFpbGVkVG9TZWxlY3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mYWlsZWRUb0FkZEV2ZW50LmVtaXQoZmFpbGVkVG9TZWxlY3QpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgdGhpcy5fZW1pdENoYW5nZSgpO1xuXG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICBpZiAoIXRoaXMua2VlcFNlYXJjaEFmdGVyU2VsZWN0KSB0aGlzLl9jbGVhclNlYXJjaCh0cnVlKTtcblxuICAgICAgaWYgKCF0aGlzLmtlZXBPcGVuIHx8IHRoaXMuaXRlbVN0b3JhZ2UuaXNOb0l0ZW1zVG9TZWxlY3QpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1bnNlbGVjdEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvbltdKTogdm9pZCB7XG4gICAgbGV0IHVuc2VsZWN0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLnVuc2VsZWN0SXRlbSguLi5pdGVtcyk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50LmVtaXQodW5zZWxlY3RlZCk7XG4gICAgdGhpcy5fZW1pdENoYW5nZSgpO1xuICAgIGlmICghdGhpcy5rZWVwU2VhcmNoQWZ0ZXJTZWxlY3QpIHRoaXMuX2NsZWFyU2VhcmNoKCk7XG5cbiAgICB0aGlzLmZvY3VzKCk7XG5cbiAgICBpZiAoIXRoaXMua2VlcE9wZW4gfHwgdGhpcy5pdGVtU3RvcmFnZS5pc05vSXRlbXNUb1NlbGVjdCkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9jbGVhckFsbEl0ZW1zKCk6IHZvaWQge1xuICAgIGxldCBjbGVhcmVkID0gdGhpcy5pdGVtU3RvcmFnZS5jbGVhckFsbFNlbGVjdGVkKHRydWUpO1xuXG4gICAgdGhpcy5mb2N1cygpO1xuXG4gICAgdGhpcy5jbGVhckV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLnJlbW92ZUV2ZW50LmVtaXQoY2xlYXJlZCk7XG4gICAgdGhpcy5fZW1pdENoYW5nZSgpO1xuICB9XG4gIHByaXZhdGUgX2NsZWFyTGFzdEl0ZW0oKTogdm9pZCB7XG4gICAgbGV0IGNsZWFyZWRWYWx1ZSA9IHRoaXMuaXRlbVN0b3JhZ2UuY2xlYXJMYXN0U2VsZWN0ZWQoKS52YWx1ZTtcblxuICAgIHRoaXMuZm9jdXMoKTtcblxuICAgIHRoaXMucmVtb3ZlRXZlbnQuZW1pdChbY2xlYXJlZFZhbHVlXSk7XG4gICAgdGhpcy5fZW1pdENoYW5nZSgpO1xuICB9XG4gIC8vISBoaWdobGlnaC1yZWxhdGVkXG4gIG9uTW91c2VNb3ZlKCkge1xuICAgIHRoaXMuX2lzTW91c2VCZWluZ1VzZWQgPSB0cnVlO1xuICB9XG4gIG9uR3JvdXBNb3VzZW92ZXIoZ3JvdXA6IEFyZE9wdGlvbkdyb3VwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0YWJsZSB8fCB0aGlzLm5vR3JvdXBBY3Rpb25zKSByZXR1cm47XG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRHcm91cChncm91cCk7XG4gIH1cbiAgb25JdGVtTW91c2VPdmVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgb25JdGVtTW91c2VFbnRlcihvcHRpb246IEFyZE9wdGlvbiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzTW91c2VCZWluZ1VzZWQpIHJldHVybjtcbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodFNpbmdsZUl0ZW0ob3B0aW9uKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuICBvbkl0ZW1Nb3VzZUxlYXZlKG9wdGlvbjogQXJkT3B0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNNb3VzZUJlaW5nVXNlZCkgcmV0dXJuO1xuICAgIHRoaXMuaXRlbVN0b3JhZ2UudW5oaWdobGlnaHRJdGVtKG9wdGlvbik7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgLy8hIGNsaWNrIGhhbmRsZXJzXG4gIHByaXZhdGUgX2lzQ2xpY2tlZFdpdGhpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBvbkl0ZW1DbGljayhvcHRpb246IEFyZE9wdGlvbiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5jbGVhcmFibGUpIHRoaXMudG9nZ2xlSXRlbShvcHRpb24pO1xuICAgIGVsc2UgdGhpcy5zZWxlY3RJdGVtKG9wdGlvbik7XG5cbiAgICB0aGlzLl9pc0NsaWNrZWRXaXRoaW4gPSB0cnVlO1xuICB9XG4gIG9uR3JvdXBDbGljayhncm91cDogQXJkT3B0aW9uR3JvdXApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3RhYmxlIHx8IHRoaXMubm9Hcm91cEFjdGlvbnMpIHJldHVybjtcbiAgICBpZiAoZ3JvdXAuY2hpbGRyZW4uZXZlcnkobyA9PiBvLnNlbGVjdGVkKSkge1xuICAgICAgdGhpcy51bnNlbGVjdEl0ZW0oLi4uZ3JvdXAuY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uZ3JvdXAuY2hpbGRyZW4pO1xuXG4gICAgdGhpcy5faXNDbGlja2VkV2l0aGluID0gdHJ1ZTtcbiAgfVxuICBoYW5kbGVDbGVhckJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5fY2xlYXJTZWFyY2goKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJBbGxJdGVtcygpO1xuICB9XG4gIGhhbmRsZURyb3Bkb3duQXJyb3dDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5faXNDbGlja2VkV2l0aGluID0gdHJ1ZTtcblxuICAgIHRoaXMudG9nZ2xlKCk7XG4gIH1cbiAgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRHJvcGRvd25PcGVuKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG4gIGhhbmRsZUFueXdoZXJlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC50YWdOYW1lICE9ICdJTlBVVCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNDbGlja2VkV2l0aGluID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fc2VhcmNoQmFyRm9jdXNlZCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zZWFyY2hhYmxlKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG9uTW91c2V1cCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0NsaWNrZWRXaXRoaW4gPSBmYWxzZTtcbiAgfVxuICAvLyEgZHJvcGRvd24gc3RhdGUgaGFuZGxlcnNcbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3BlbigpO1xuICB9XG4gIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc0Ryb3Bkb3duT3BlbikgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IHRydWU7XG4gICAgaWYgKHRoaXMuYXV0b0hpZ2hsaWdodEZpcnN0KSB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xuXG4gICAgdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xuICAgIHRoaXMuZm9jdXMoKTtcblxuICAgIHRoaXMub3BlbkV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuQ2hhbmdlLmVtaXQodGhpcy5pc0Ryb3Bkb3duT3Blbik7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRHJvcGRvd25PcGVuKSByZXR1cm47XG5cbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG5cbiAgICB0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xuXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuQ2hhbmdlLmVtaXQodGhpcy5pc0Ryb3Bkb3duT3Blbik7XG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgLy8hIENoYW5nZURldGVjdG9yUmVmXG4gIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCEoPGFueT50aGlzLl9jZCkuZGVzdHJveWVkKSB7XG4gICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIC8vISBzZWFyY2hcbiAgcHJpdmF0ZSBfY2xlYXJTZWFyY2goc3VwcHJlc3NTZWFyY2hFdmVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0U2VhcmNoKCcnLCBzdXBwcmVzc1NlYXJjaEV2ZW50KTtcbiAgfVxuICBwcml2YXRlIF9zZXRTZWFyY2goc2VhcmNoVGVybTogc3RyaW5nLCBzdXBwcmVzc1NlYXJjaEV2ZW50OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgIHRoaXMuZmlsdGVyKHNlYXJjaFRlcm0sIHN1cHByZXNzU2VhcmNoRXZlbnQpO1xuICB9XG4gIHByaXZhdGUgX3NldFNlYXJjaElucHV0QXR0cmlidXRlcygpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBhdHRyaWJ1dGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgYXV0b2NvcnJlY3Q6ICdvZmYnLFxuICAgICAgYXV0b2NhcGl0YWxpemU6ICdvZmYnLFxuICAgICAgYXV0b2NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgIC4uLnRoaXMuaW5wdXRBdHRycyxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgLy8hIGtleSBwcmVzcyBoYW5kbGVyc1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIHRoaXMuX29uRW50ZXJQcmVzcyhldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NwYWNlJzoge1xuICAgICAgICB0aGlzLl9vblNwYWNlUHJlc3MoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuX29uQXJyb3dEb3duUHJlc3MoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLl9vbkFycm93VXBQcmVzcyhldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0hvbWUnOiB7XG4gICAgICAgIHRoaXMuX29uSG9tZVByZXNzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW5kJzoge1xuICAgICAgICB0aGlzLl9vbkVuZFByZXNzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgIGNhc2UgJ0RlbGV0ZSc6IHtcbiAgICAgICAgdGhpcy5fb25CYWNrc3BhY2VPckRlbGV0ZVByZXNzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnS2V5QSc6IHtcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICB0aGlzLl9vbkN0cmxBUHJlc3MoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFzeW5jIF9vbkVudGVyUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCBzaG91bGRDbG9zZSA9IHRydWU7XG5cbiAgICAvL3NlbGVjdCB0aGUgY3VycmVudGx5IGhpZ2hsaWdodGVkIG9wdGlvblxuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuICYmIHRoaXMuZmlyc3RIaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodGVkSXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKSkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0SXRlbSguLi50aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodGVkSXRlbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKC4uLnRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vYWRkIGEgY3VzdG9tIG9wdGlvblxuICAgIGVsc2UgaWYgKHRoaXMuaXNEcm9wZG93bk9wZW4gJiYgdGhpcy5zaG91bGRTaG93QWRkQ3VzdG9tKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZEN1c3RvbU9wdGlvbih0aGlzLnNlYXJjaFRlcm0pO1xuICAgIH1cbiAgICAvL2luIGNhc2Ugb2Ygbm8gYWN0aW9uLCBvcGVuIHRoZSBkcm9wZG93biAob3Iga2VlcCBpdCBvcGVuKVxuICAgIGVsc2Ugc2hvdWxkQ2xvc2UgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5rZWVwT3BlbiAmJiBzaG91bGRDbG9zZSkge1xuICAgICAgdGhpcy5pdGVtU3RvcmFnZS5jbGVhckFsbEhpZ2hsaWdodHMoKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX29uU3BhY2VQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKSByZXR1cm47XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub3BlbigpO1xuICB9XG4gIHByaXZhdGUgX29uQXJyb3dEb3duUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub3BlbigpO1xuXG4gICAgdGhpcy5faXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVjZW50bHlIaWdobGlnaHRlZCA9IHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0TmV4dEl0ZW0oKzEsIGV2ZW50LnNoaWZ0S2V5KTtcbiAgICBpZiAocmVjZW50bHlIaWdobGlnaHRlZCkge1xuICAgICAgdGhpcy5pdGVtU3RvcmFnZS5zZXRSZWNlbnRseUhpZ2hsaWdodGVkKHJlY2VudGx5SGlnaGxpZ2h0ZWQpO1xuICAgIH1cblxuICAgIHRoaXMuZHJvcGRvd25QYW5lbC5zY3JvbGxUb1JlY2VudGx5SGlnaGxpZ2h0ZWQoJ2JvdHRvbScpO1xuICB9XG4gIHByaXZhdGUgX29uQXJyb3dVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRHJvcGRvd25PcGVuKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuX2lzTW91c2VCZWluZ1VzZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlY2VudGx5SGlnaGxpZ2h0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodE5leHRJdGVtKC0xLCBldmVudC5zaGlmdEtleSk7XG4gICAgaWYgKHJlY2VudGx5SGlnaGxpZ2h0ZWQpIHtcbiAgICAgIHRoaXMuaXRlbVN0b3JhZ2Uuc2V0UmVjZW50bHlIaWdobGlnaHRlZChyZWNlbnRseUhpZ2hsaWdodGVkKTtcbiAgICB9XG5cbiAgICB0aGlzLmRyb3Bkb3duUGFuZWwuc2Nyb2xsVG9SZWNlbnRseUhpZ2hsaWdodGVkKCd0b3AnKTtcbiAgfVxuICBwcml2YXRlIF9vbkhvbWVQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Ryb3Bkb3duT3BlbiB8fCAodGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCAhPSAwICYmIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCAhPSAwKSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCByZWNlbnRseUhpZ2hsaWdodGVkID0gdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICBpZiAoIXJlY2VudGx5SGlnaGxpZ2h0ZWQpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbVN0b3JhZ2Uuc2V0UmVjZW50bHlIaWdobGlnaHRlZChyZWNlbnRseUhpZ2hsaWdodGVkKTtcbiAgICB0aGlzLmRyb3Bkb3duUGFuZWwuc2Nyb2xsVG9SZWNlbnRseUhpZ2hsaWdodGVkKCd0b3AnKTtcbiAgfVxuICBwcml2YXRlIF9vbkVuZFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNEcm9wZG93bk9wZW4gfHxcbiAgICAgICh0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kICE9IHRoaXMuc2VhcmNoVGVybS5sZW5ndGggJiYgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ICE9IHRoaXMuc2VhcmNoVGVybS5sZW5ndGgpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCByZWNlbnRseUhpZ2hsaWdodGVkID0gdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRMYXN0SXRlbSgpO1xuICAgIGlmICghcmVjZW50bHlIaWdobGlnaHRlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pdGVtU3RvcmFnZS5zZXRSZWNlbnRseUhpZ2hsaWdodGVkKHJlY2VudGx5SGlnaGxpZ2h0ZWQpO1xuICAgIHRoaXMuZHJvcGRvd25QYW5lbC5zY3JvbGxUb1JlY2VudGx5SGlnaGxpZ2h0ZWQoJ2JvdHRvbScpO1xuICB9XG4gIHByaXZhdGUgX29uQmFja3NwYWNlT3JEZWxldGVQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlYXJjaFRlcm0gfHwgIXRoaXMuX2NsZWFyYWJsZSB8fCB0aGlzLm5vQmFja3NwYWNlQ2xlYXIgfHwgIXRoaXMuaXRlbVN0b3JhZ2UuaXNBbnlJdGVtU2VsZWN0ZWQpIHJldHVybjtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMubXVsdGlzZWxlY3RhYmxlICYmIHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLl9jbGVhckxhc3RJdGVtKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyQWxsSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIF9vbkN0cmxBUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodEFsbEl0ZW1zKCk7XG4gIH1cbn1cbiIsIjxhcmQtZm9ybS1maWVsZC1mcmFtZVxyXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICBbdmFyaWFudF09XCJ2YXJpYW50XCJcclxuICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxyXG4gICAgW2lzRm9jdXNlZF09XCJpc0ZvY3VzZWRcIlxyXG4gICAgW3ByZWZpeFRlbXBsYXRlXT1cInByZWZpeFRlbXBsYXRlXCJcclxuICAgIFtzdWZmaXhUZW1wbGF0ZV09XCJzdWZmaXhUZW1wbGF0ZVwiXHJcbj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcmQtc2VsZWN0XCJcclxuICAgICAgICAjZHJvcGRvd25Ib3N0XHJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFueXdoZXJlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgW2NsYXNzLmFyZC1oYXMtdmFsdWVdPVwiaXRlbVN0b3JhZ2UuaXNBbnlJdGVtU2VsZWN0ZWRcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5nQ2xhc3Nlc1wiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1zZWxlY3QtdmFsdWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGREaXNwbGF5UGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBsYWNlaG9sZGVyVGVtcGxhdGUgbGV0LXBsaGxkcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXBsYWNlaG9sZGVyXCI+e3sgcGxobGRyIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyVGVtcGxhdGUgfHwgZGVmYXVsdFBsYWNlaG9sZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRQbGFjZWhvbGRlckNvbnRleHQoKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkRGlzcGxheVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXNlbGVjdC12YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbVN0b3JhZ2Uuc2VsZWN0ZWRJdGVtczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC12YWx1ZS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5oaWRkZW5dPVwiIWlzVmFsdWVXaXRoaW5EaXNwbGF5TGltaXQoaSkgPyB0cnVlIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNWYWx1ZVdpdGhpbkRpc3BsYXlMaW1pdChpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZhbHVlVGVtcGxhdGUgfHwgKG11bHRpc2VsZWN0YWJsZSA/IGRlZmF1bHRNdWx0aVZhbHVlVGVtcGxhdGUgOiAgZGVmYXVsdFZhbHVlVGVtcGxhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFZhbHVlQ29udGV4dChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRWYWx1ZVRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2FyZElubmVySFRNTF09XCJpdGVtLmxhYmVsXCIgW2FyZEVzY2FwZUlubmVySFRNTF09XCJpc0l0ZW1zSW5wdXRVc2VkXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TXVsdGlWYWx1ZVRlbXBsYXRlIGxldC1pdGVtIGxldC11bnNlbGVjdD1cInVuc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFyZC1kZWxldGFibGUtY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlKT1cInVuc2VsZWN0KGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwidmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVkLXN0cm9uZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFthcmRJbm5lckhUTUxdPVwiaXRlbS5sYWJlbFwiIFthcmRFc2NhcGVJbm5lckhUTUxdPVwiaXNJdGVtc0lucHV0VXNlZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXJkLWRlbGV0YWJsZS1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbVN0b3JhZ2UuaXNBbnlJdGVtU2VsZWN0ZWQgJiYgc2hvdWxkU2hvd0l0ZW1EaXNwbGF5TGltaXRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtb3ZlcmZsb3ctaW5kaWNhdG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1EaXNwbGF5TGltaXRUZW1wbGF0ZSB8fCBkZWZhdWx0SXRlbURpc3BsYXlMaW1pdFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEl0ZW1EaXNwbGF5TGltaXRDb250ZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJdGVtRGlzcGxheUxpbWl0VGVtcGxhdGUgbGV0LWNvdW50PVwib3ZlcmZsb3dDb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7Y291bnR9fSBtb3JlLi4uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtc2VhcmNoLWlucHV0XCJcclxuICAgICAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJpc0Ryb3Bkb3duT3BlbiA/IGh0bWxJZCA6IG51bGxcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgI3NlYXJjaElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgI2ZvY3VzYWJsZUVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwic2VhcmNoSW5wdXRJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc0lucHV0RWxlbWVudFJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNEcm9wZG93bk9wZW4gPyBodG1sSWQgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyKHNlYXJjaElucHV0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvblNlYXJjaElucHV0Rm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uU2VhcmNoSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1zZWxlY3QtY29udHJvbHNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZ1NwaW5uZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXNpbXBsZS1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsb2FkaW5nU3Bpbm5lclRlbXBsYXRlIHx8IGRlZmF1bHRMb2FkaW5nU3Bpbm5lclRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxhcmQtX2NsZWFyLWJ1dHRvbiAqbmdJZj1cInNob3VsZFNob3dDbGVhckJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY2xlYXJCdXR0b25UaXRsZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xlYXJCdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvYXJkLV9jbGVhci1idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWRyb3Bkb3duLWFycm93LXdyYXBwZXJcIlxyXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRHJvcGRvd25BcnJvd0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFyZC1kcm9wZG93bi1hcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtaGl0Ym94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvYXJkLWZvcm0tZmllbGQtZnJhbWU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNkcm9wZG93blRlbXBsYXRlPlxyXG4gICAgPGFyZC1kcm9wZG93bi1wYW5lbFxyXG4gICAgICAgIGNsYXNzPVwiYXJkLWRyb3Bkb3duLXBhbmVsIGFyZC1zZWxlY3QtZHJvcGRvd24tcGFuZWxcIlxyXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiT3B0aW9ucyBsaXN0XCJcclxuICAgICAgICBbaGVhZGVyVGVtcGxhdGVdPVwiZHJvcGRvd25IZWFkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgW2Zvb3RlclRlbXBsYXRlXT1cImRyb3Bkb3duRm9vdGVyVGVtcGxhdGVcIlxyXG4gICAgICAgIFthcHBlYXJhbmNlXT1cImRyb3Bkb3duQXBwZWFyYW5jZVwiXHJcbiAgICAgICAgW3ZhcmlhbnRdPVwiZHJvcGRvd25WYXJpYW50XCJcclxuICAgICAgICBbaXNPcGVuXT1cInRydWVcIlxyXG4gICAgICAgIFtmaWx0ZXJWYWx1ZV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICBbcGFuZWxJZF09XCJodG1sSWRcIlxyXG4gICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxyXG4gICAgICAgIChhcmRDbGlja091dHNpZGUpPVwiaGFuZGxlT3V0c2lkZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoKVwiXHJcbiAgICAgICAgKHNjcm9sbCk9XCJzY3JvbGxFdmVudC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChzY3JvbGxUb0VuZCk9XCJzY3JvbGxUb0VuZEV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG91bGRTaG93Tm9JdGVtc0ZvdW5kXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLW9wdGdyb3VwXCJcclxuICAgICAgICAgICAgICAgIHJvbGU9XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgaXRlbVN0b3JhZ2UuZ3JvdXBzXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtZ3JvdXAtZGlzYWJsZWRdPVwiZ3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFyZC1ncm91cC1zZWxlY3RlZF09XCJncm91cC5zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLWdyb3VwLWhpZ2hsaWdodGVkXT1cImdyb3VwLmhpZ2hsaWdodGVkXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Hcm91cE1vdXNlb3Zlcihncm91cClcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBDbGljayhncm91cClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAubGFiZWwgIT09ICcnICYmIGdyb3VwLmxhYmVsICE9PSB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRncm91cFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFyZC1vcHRncm91cC1sYWJlbFwiIFthcmRJbm5lckhUTUxdPVwiZ3JvdXAubGFiZWxcIiBbYXJkRXNjYXBlSW5uZXJIVE1MXT1cImlzSXRlbXNJbnB1dFVzZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGdyb3VwVGVtcGxhdGUgfHwgZGVmYXVsdE9wdGdyb3VwVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0R3JvdXBDb250ZXh0KGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLW9wdGdyb3VwLWNoaWxkcmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC1vcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBncm91cC5jaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLXNlbGVjdGVkXT1cIm9wdGlvbi5zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLWhpZ2hsaWdodGVkXT1cIm9wdGlvbi5oaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtb3B0aW9uLWhpZ2hsaWdodGVkLXJlY2VudF09XCJvcHRpb24uaGlnaGxpZ2h0ZWRfcmVjZW50bHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIm9wdGlvbi5zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImh0bWxJZCArICctJyArIG9wdGlvbi5pbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhvcHRpb24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cIm9uSXRlbU1vdXNlT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25JdGVtTW91c2VFbnRlcihvcHRpb24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkl0ZW1Nb3VzZUxlYXZlKG9wdGlvbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLW9wdGlvbi1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2FyZElubmVySFRNTF09XCJvcHRpb24ubGFiZWxcIiBbYXJkRXNjYXBlSW5uZXJIVE1MXT1cImlzSXRlbXNJbnB1dFVzZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlIHx8IGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldE9wdGlvbkNvbnRleHQob3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRTaG93Tm9JdGVtc0ZvdW5kXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5vSXRlbXNGb3VuZFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1vcHRpb24gYXJkLW9wdGlvbi1kaXNhYmxlZFwiPnt7bm9JdGVtc0ZvdW5kVGV4dH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9JdGVtc0ZvdW5kVGVtcGxhdGUgfHwgZGVmYXVsdE5vSXRlbXNGb3VuZFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRTZWFyY2hDb250ZXh0KClcIj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dBZGRDdXN0b21cIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWRkQ3VzdG9tVGVtcGxhdGUgbGV0LXNlYXJjaFRlcm0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLW9wdGlvbiBhcmQtb3B0aW9uLWhpZ2hsaWdodGVkIGFyZC1hZGQtY3VzdG9tXCIgKGNsaWNrKT1cImFkZEN1c3RvbU9wdGlvbihzZWFyY2hUZXJtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJkLWFkZC1jdXN0b20tbGFiZWxcIj5BZGQgb3B0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJkLWFkZC1jdXN0b20tdmFsdWVcIj5cInt7c2VhcmNoVGVybX19XCI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGRDdXN0b21UZW1wbGF0ZSB8fCBkZWZhdWx0QWRkQ3VzdG9tVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEN1c3RvbU9wdGlvbkNvbnRleHQoKVwiPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExvYWRpbmdQbGFjZWhvbGRlclRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1vcHRpb24gYXJkLW9wdGlvbi1kaXNhYmxlZFwiPnt7bG9hZGluZ1BsYWNlaG9sZGVyVGV4dH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZGluZ1BsYWNlaG9sZGVyVGVtcGxhdGUgfHwgZGVmYXVsdExvYWRpbmdQbGFjZWhvbGRlclRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRTZWFyY2hDb250ZXh0KClcIj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYXJkLWRyb3Bkb3duLXBhbmVsPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
1158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLGFBQWEsRUFBcUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUVULGlCQUFpQixFQUNqQixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9C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YztzQkFEYixZQUFZO3VCQUFDLGVBQWU7Z0JBdVE3QixTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUztnQkFvRXZCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmLCBTY3JvbGxTdHJhdGVneU9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgZm9yd2FyZFJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBjb2VyY2VBcnJheVByb3BlcnR5LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFyZGl1bS11aS9kZXZraXQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBtZXJnZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgaXNBbnlTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IEl0ZW1TdG9yYWdlIH0gZnJvbSAnLi4vX2ludGVybmFsL2l0ZW0tc3RvcmFnZXMvZHJvcGRvd24taXRlbS1zdG9yYWdlJztcclxuaW1wb3J0IHsgX05nTW9kZWxDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vX2ludGVybmFsL25nbW9kZWwtY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXJkaXVtRHJvcGRvd25QYW5lbENvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duLXBhbmVsL2Ryb3Bkb3duLXBhbmVsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlLCBEcm9wZG93blBhbmVsVmFyaWFudCB9IGZyb20gJy4uL2Ryb3Bkb3duLXBhbmVsL2Ryb3Bkb3duLXBhbmVsLnR5cGVzJztcclxuaW1wb3J0IHsgQXJkaXVtT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBzZWFyY2hGdW5jdGlvbnMgfSBmcm9tICcuLi9zZWFyY2gtZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXJkT3B0aW9uLCBBcmRPcHRpb25Hcm91cCwgQXJkUGFuZWxQb3NpdGlvbiwgQ29tcGFyZVdpdGhGbiwgR3JvdXBCeUZuLCBPcHRpb25Db250ZXh0LCBTZWFyY2hGbiB9IGZyb20gJy4uL3R5cGVzL2l0ZW0tc3RvcmFnZS50eXBlcyc7XHJcbmltcG9ydCB7IEZvcm1FbGVtZW50QXBwZWFyYW5jZSB9IGZyb20gJy4uL3R5cGVzL3RoZW1pbmcudHlwZXMnO1xyXG5pbXBvcnQgeyBGb3JtRWxlbWVudFZhcmlhbnQgfSBmcm9tICcuLy4uL3R5cGVzL3RoZW1pbmcudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFyZEFkZEN1c3RvbVRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERyb3Bkb3duRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRHJvcGRvd25IZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRJdGVtRGlzcGxheUxpbWl0VGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkSXRlbUxpbWl0UmVhY2hlZFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZExvYWRpbmdQbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZExvYWRpbmdTcGlubmVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkTm9JdGVtc0ZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkT3B0Z3JvdXBUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRTZWxlY3RQbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZFNlbGVjdFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZFNlbGVjdFN1ZmZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZFZhbHVlVGVtcGxhdGVEaXJlY3RpdmUsXHJcbn0gZnJvbSAnLi9zZWxlY3QuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtcclxuICBBZGRDdXN0b21GbixcclxuICBDdXN0b21PcHRpb25Db250ZXh0LFxyXG4gIEdyb3VwQ29udGV4dCxcclxuICBJdGVtRGlzcGxheUxpbWl0Q29udGV4dCxcclxuICBJdGVtTGltaXRDb250ZXh0LFxyXG4gIFBsYWNlaG9sZGVyQ29udGV4dCxcclxuICBTZWFyY2hDb250ZXh0LFxyXG4gIFN0YXRzQ29udGV4dCxcclxuICBWYWx1ZUNvbnRleHQsXHJcbn0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXJkaXVtU2VsZWN0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcmRpdW1TZWxlY3RDb21wb25lbnRcclxuICBleHRlbmRzIF9OZ01vZGVsQ29tcG9uZW50QmFzZVxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Jcclxue1xyXG4gIC8vISBwdWJsaWMgY29uc3RhbnRzXHJcbiAgcmVhZG9ubHkgaXRlbVN0b3JhZ2UgPSBuZXcgSXRlbVN0b3JhZ2UodGhpcyk7XHJcbiAgcmVhZG9ubHkgZWxlbWVudCE6IEhUTUxFbGVtZW50O1xyXG4gIHJlYWRvbmx5IERFRkFVTFRTID0ge1xyXG4gICAgdmFsdWVGcm9tOiAndmFsdWUnLFxyXG4gICAgbGFiZWxGcm9tOiAnbGFiZWwnLFxyXG4gICAgZGlzYWJsZWRGcm9tOiAnZGlzYWJsZWQnLFxyXG4gICAgZ3JvdXBMYWJlbEZyb206ICdncm91cCcsXHJcbiAgICBncm91cERpc2FibGVkRnJvbTogJ2Rpc2FibGVkJyxcclxuICAgIGNoaWxkcmVuRnJvbTogJ2NoaWxkcmVuJyxcclxuICAgIHNlYXJjaEZuOiBzZWFyY2hGdW5jdGlvbnMuYnlMYWJlbCxcclxuICAgIGNsZWFyQnV0dG9uVGl0bGU6ICdDbGVhcicsXHJcbiAgICBub0l0ZW1zRm91bmRUZXh0OiAnTm8gaXRlbXMgZm91bmQuJyxcclxuICAgIGxvYWRpbmdQbGFjZWhvbGRlclRleHQ6ICdMb2FkaW5nLi4uJyxcclxuICB9O1xyXG5cclxuICAvLyEgcHJpdmF0ZXNcclxuICBwcml2YXRlIF9pdGVtczogYW55W10gfCBudWxsID0gW107XHJcbiAgcHJpdmF0ZSBfaXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NlYXJjaEJhckZvY3VzZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIC8vISBwdWJsaWNzXHJcbiAgcHVibGljIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xyXG4gIGlzSXRlbXNJbnB1dFVzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8hIGJpbmRpbmctcmVsYXRlZCBpbnB1dHNcclxuICAvL3ZhbHVlL2xhYmVsL2Rpc2FibGVkL2dyb3VwL3ByZS1ncm91cGVkIGNoaWxkcmVuIHBhdGhzXHJcbiAgQElucHV0KCkgdmFsdWVGcm9tPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsRnJvbT86IHN0cmluZztcclxuICBASW5wdXQoKSBkaXNhYmxlZEZyb20/OiBzdHJpbmc7XHJcbiAgLy8hIGdyb3VwLXJlbGF0ZWQgaW5wdXRzXHJcbiAgQElucHV0KCkgZ3JvdXBMYWJlbEZyb20/OiBzdHJpbmcgfCBHcm91cEJ5Rm47XHJcbiAgQElucHV0KCkgZ3JvdXBEaXNhYmxlZEZyb20/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2hpbGRyZW5Gcm9tPzogc3RyaW5nO1xyXG4gIC8vISBzZXR0aW5nc1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGl0ZW0nO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoLi4uJztcclxuICBASW5wdXQoKSBkcm9wZG93blBvc2l0aW9uOiBBcmRQYW5lbFBvc2l0aW9uID0gQXJkUGFuZWxQb3NpdGlvbi5BdXRvO1xyXG4gIEBJbnB1dCgpIGNsZWFyQnV0dG9uVGl0bGU6IHN0cmluZyA9IHRoaXMuREVGQVVMVFMuY2xlYXJCdXR0b25UaXRsZTtcclxuICAvLyEgdGVtcGxhdGUtcmVsYXRlZCBzZXR0aW5nc1xyXG4gIEBJbnB1dCgpIG5vSXRlbXNGb3VuZFRleHQ6IHN0cmluZyA9IHRoaXMuREVGQVVMVFMubm9JdGVtc0ZvdW5kVGV4dDtcclxuICBASW5wdXQoKSBsb2FkaW5nUGxhY2Vob2xkZXJUZXh0OiBzdHJpbmcgPSB0aGlzLkRFRkFVTFRTLmxvYWRpbmdQbGFjZWhvbGRlclRleHQ7XHJcbiAgLy8hIHNlYXJjaC1yZWxhdGVkIG9wdGlvbnNcclxuICBASW5wdXQoKSBzZWFyY2hJbnB1dElkPzogc3RyaW5nO1xyXG4gIC8vISBvdGhlciBpbnB1dHNcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpbnB1dEF0dHJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgQElucHV0KCkgaHRtbElkOiBzdHJpbmcgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG5cclxuICAvLyEgYm9vbGVhbiBzZXR0aW5nc1xyXG4gIHByaXZhdGUgX2l0ZW1zQWxyZWFkeUdyb3VwZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBpdGVtc0FscmVhZHlHcm91cGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zQWxyZWFkeUdyb3VwZWQ7XHJcbiAgfVxyXG4gIHNldCBpdGVtc0FscmVhZHlHcm91cGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5faXRlbXNBbHJlYWR5R3JvdXBlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIC8vc2hvdWxkIHRoZSB2YWx1ZSB0aGF0IHRoZSBcImRpc2FibGVkRnJvbVwiIHBhdGggbGVhZCB0byBiZSBpbnZlcnRlZD9cclxuICAvL3VzZWZ1bCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBlLmcuIFwiYWN0aXZlXCIsIHdoaWNoIGlzIHRoZSBvcG9zaXRlIG9mIFwiZGlzYWJsZWRcIlxyXG4gIHByaXZhdGUgX2ludmVydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgaW52ZXJ0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW52ZXJ0RGlzYWJsZWQ7XHJcbiAgfVxyXG4gIHNldCBpbnZlcnREaXNhYmxlZCh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2ludmVydERpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm9Hcm91cEFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBub0dyb3VwQWN0aW9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ub0dyb3VwQWN0aW9ucztcclxuICB9XHJcbiAgc2V0IG5vR3JvdXBBY3Rpb25zKHY6IGFueSkge1xyXG4gICAgdGhpcy5fbm9Hcm91cEFjdGlvbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdXRvSGlnaGxpZ2h0Rmlyc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGF1dG9IaWdobGlnaHRGaXJzdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvSGlnaGxpZ2h0Rmlyc3Q7XHJcbiAgfVxyXG4gIHNldCBhdXRvSGlnaGxpZ2h0Rmlyc3QodjogYW55KSB7XHJcbiAgICB0aGlzLl9hdXRvSGlnaGxpZ2h0Rmlyc3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBhdXRvRm9jdXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b0ZvY3VzO1xyXG4gIH1cclxuICBzZXQgYXV0b0ZvY3VzKHY6IGFueSkge1xyXG4gICAgdGhpcy5fYXV0b0ZvY3VzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfa2VlcE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBrZWVwT3BlbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9rZWVwT3BlbjtcclxuICB9XHJcbiAgc2V0IGtlZXBPcGVuKHY6IGFueSkge1xyXG4gICAgdGhpcy5fa2VlcE9wZW4gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oaWRlU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBoaWRlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGlkZVNlbGVjdGVkO1xyXG4gIH1cclxuICBzZXQgaGlkZVNlbGVjdGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5faGlkZVNlbGVjdGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJPbkJhY2tzcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG5vQmFja3NwYWNlQ2xlYXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xlYXJPbkJhY2tzcGFjZTtcclxuICB9XHJcbiAgc2V0IG5vQmFja3NwYWNlQ2xlYXIodjogYW55KSB7XHJcbiAgICB0aGlzLl9jbGVhck9uQmFja3NwYWNlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc29ydE11bHRpcGxlVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgc29ydE11bHRpcGxlVmFsdWVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRNdWx0aXBsZVZhbHVlcztcclxuICB9XHJcbiAgc2V0IHNvcnRNdWx0aXBsZVZhbHVlcyh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3NvcnRNdWx0aXBsZVZhbHVlcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlYXJjaENhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBzZWFyY2hDYXNlU2Vuc2l0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaENhc2VTZW5zaXRpdmU7XHJcbiAgfVxyXG4gIHNldCBzZWFyY2hDYXNlU2Vuc2l0aXZlKHY6IGFueSkge1xyXG4gICAgdGhpcy5fc2VhcmNoQ2FzZVNlbnNpdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2tlZXBTZWFyY2hBZnRlclNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGtlZXBTZWFyY2hBZnRlclNlbGVjdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9rZWVwU2VhcmNoQWZ0ZXJTZWxlY3Q7XHJcbiAgfVxyXG4gIHNldCBrZWVwU2VhcmNoQWZ0ZXJTZWxlY3QodjogYW55KSB7XHJcbiAgICB0aGlzLl9rZWVwU2VhcmNoQWZ0ZXJTZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICAvLyEgbnVtYmVyIGlucHV0c1xyXG4gIHByaXZhdGUgX21heFNlbGVjdGVkSXRlbXM6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIGdldCBtYXhTZWxlY3RlZEl0ZW1zKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4U2VsZWN0ZWRJdGVtcztcclxuICB9XHJcbiAgc2V0IG1heFNlbGVjdGVkSXRlbXModjogYW55KSB7XHJcbiAgICB0aGlzLl9tYXhTZWxlY3RlZEl0ZW1zID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1EaXNwbGF5TGltaXQ6IG51bWJlciA9IEluZmluaXR5O1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGl0ZW1EaXNwbGF5TGltaXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtRGlzcGxheUxpbWl0O1xyXG4gIH1cclxuICBzZXQgaXRlbURpc3BsYXlMaW1pdCh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2l0ZW1EaXNwbGF5TGltaXQgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2LCBJbmZpbml0eSk7XHJcbiAgfVxyXG5cclxuICAvLyEgZnVuY3Rpb24gaW5wdXRzXHJcbiAgcHJpdmF0ZSBfc2VhcmNoRm46IFNlYXJjaEZuID0gdGhpcy5ERUZBVUxUUy5zZWFyY2hGbjtcclxuICBASW5wdXQoKVxyXG4gIGdldCBzZWFyY2hGbigpOiBTZWFyY2hGbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoRm47XHJcbiAgfVxyXG4gIHNldCBzZWFyY2hGbihmbjogU2VhcmNoRm4pIHtcclxuICAgIGlmIChmbiAhPT0gdW5kZWZpbmVkICYmIGZuICE9PSBudWxsICYmICFpc0Z1bmN0aW9uKGZuKSkge1xyXG4gICAgICB0aHJvdyBFcnJvcignYHNlYXJjaEZuYCBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZWFyY2hGbiA9IGZuO1xyXG4gIH1cclxuICBwcml2YXRlIF9jb21wYXJlV2l0aD86IENvbXBhcmVXaXRoRm47XHJcbiAgQElucHV0KClcclxuICBnZXQgY29tcGFyZVdpdGgoKTogQ29tcGFyZVdpdGhGbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcGFyZVdpdGg7XHJcbiAgfVxyXG4gIHNldCBjb21wYXJlV2l0aChmbjogQ29tcGFyZVdpdGhGbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKGZuICE9PSB1bmRlZmluZWQgJiYgZm4gIT09IG51bGwgJiYgIWlzRnVuY3Rpb24oZm4pKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdgY29tcGFyZVdpdGhgIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NvbXBhcmVXaXRoID0gZm47XHJcbiAgfVxyXG5cclxuICAvLyEgYXBwZWFyYW5jZVxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IEZvcm1FbGVtZW50QXBwZWFyYW5jZSA9IEZvcm1FbGVtZW50QXBwZWFyYW5jZS5PdXRsaW5lZDtcclxuICBASW5wdXQoKSB2YXJpYW50OiBGb3JtRWxlbWVudFZhcmlhbnQgPSBGb3JtRWxlbWVudFZhcmlhbnQuUm91bmRlZDtcclxuXHJcbiAgcHJpdmF0ZSBfY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbXBhY3QoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcGFjdDtcclxuICB9XHJcbiAgc2V0IGNvbXBhY3QodjogYW55KSB7XHJcbiAgICB0aGlzLl9jb21wYWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nQ2xhc3NlcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgLy9hcHBlYXJhbmNlLCB2YXJpYW50IGhhbmRsZWQgaW4gYXJkLWZvcm0tZmllbGQtZnJhbWUgY29tcG9uZW50XHJcbiAgICAgIHRoaXMuY29tcGFjdCA/ICdhcmQtY29tcGFjdCcgOiAnJyxcclxuICAgICAgdGhpcy5tdWx0aXNlbGVjdGFibGUgPyAnYXJkLW11bHRpc2VsZWN0JyA6ICdhcmQtc2luZ2xlc2VsZWN0JyxcclxuICAgICAgdGhpcy5jbGVhcmFibGUgPyAnYXJkLWNsZWFyYWJsZScgOiAnJyxcclxuICAgICAgdGhpcy5zZWFyY2hhYmxlID8gJ2FyZC1zZWFyY2hhYmxlJyA6ICcnLFxyXG4gICAgICB0aGlzLmZpbHRlcmVkID8gJ2FyZC1maWx0ZXJlZCcgOiAnJyxcclxuICAgICAgdGhpcy50b3VjaGVkID8gJ2FyZC10b3VjaGVkJyA6ICcnLFxyXG4gICAgICB0aGlzLmlzRHJvcGRvd25PcGVuID8gJ2FyZC1kcm9wZG93bi1vcGVuJyA6ICcnLFxyXG4gICAgICB0aGlzLl9zZWFyY2hCYXJGb2N1c2VkID8gJ2FyZC1zZWxlY3QtZm9jdXNlZCcgOiAnJyxcclxuICAgICAgdGhpcy5fc2VhcmNoQmFyRm9jdXNlZCA/ICdhcmQtc2VsZWN0LWZvY3VzZWQnIDogJycsXHJcbiAgICBdLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Ryb3Bkb3duQXBwZWFyYW5jZT86IERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlID0gdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRyb3Bkb3dvbkFwcGVhcmFuY2UodjogRHJvcGRvd25QYW5lbEFwcGVhcmFuY2UpIHtcclxuICAgIHRoaXMuX2Ryb3Bkb3duQXBwZWFyYW5jZSA9IHY7XHJcbiAgfVxyXG4gIGdldCBkcm9wZG93bkFwcGVhcmFuY2UoKTogRHJvcGRvd25QYW5lbEFwcGVhcmFuY2Uge1xyXG4gICAgaWYgKHRoaXMuX2Ryb3Bkb3duQXBwZWFyYW5jZSkgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQXBwZWFyYW5jZTtcclxuICAgIGlmICh0aGlzLmFwcGVhcmFuY2UgPT0gRm9ybUVsZW1lbnRBcHBlYXJhbmNlLk91dGxpbmVkKSByZXR1cm4gRHJvcGRvd25QYW5lbEFwcGVhcmFuY2UuT3V0bGluZWQ7XHJcbiAgICByZXR1cm4gRHJvcGRvd25QYW5lbEFwcGVhcmFuY2UuUmFpc2VkO1xyXG4gIH1cclxuICBwcml2YXRlIF9kcm9wZG93blZhcmlhbnQ/OiBEcm9wZG93blBhbmVsVmFyaWFudCA9IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkcm9wZG93b25WYXJpYW50KHY6IERyb3Bkb3duUGFuZWxWYXJpYW50KSB7XHJcbiAgICB0aGlzLl9kcm9wZG93blZhcmlhbnQgPSB2O1xyXG4gIH1cclxuICBnZXQgZHJvcGRvd25WYXJpYW50KCk6IERyb3Bkb3duUGFuZWxWYXJpYW50IHtcclxuICAgIGlmICh0aGlzLl9kcm9wZG93blZhcmlhbnQpIHJldHVybiB0aGlzLl9kcm9wZG93blZhcmlhbnQ7XHJcbiAgICBpZiAodGhpcy52YXJpYW50ID09IEZvcm1FbGVtZW50VmFyaWFudC5QaWxsKSByZXR1cm4gRHJvcGRvd25QYW5lbFZhcmlhbnQuUm91bmRlZDtcclxuICAgIHJldHVybiB0aGlzLnZhcmlhbnQ7XHJcbiAgfVxyXG5cclxuICAvLyEgY2xhc3MtYmFzZWQgaW5wdXRzXHJcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5hcmQtZ3JvdXAtaXRlbXMnKSBncm91cEl0ZW1zOiBib29sZWFuID0gZmFsc2U7IC8vZGVmYXVsdCB2YWx1ZSBtYXkgYmUgY2hhbmdlZCB0byBcInRydWVcIiBpbiBuZ09uQ2hhbmdlcyBpZiB0aGlzLmdyb3VwQnkgaXMgZGVmaW5lZCBvciB0aGlzLml0ZW1zQWxyZWFkeUdyb3VwZWQgaXMgc2V0IHRvIFwidHJ1ZVwiXHJcblxyXG4gIC8vISBpdGVtcyBzZXR0ZXIvZ2V0dGVyXHJcbiAgQElucHV0KClcclxuICBnZXQgaXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XHJcbiAgfVxyXG4gIHNldCBpdGVtcyh2YWx1ZTogc3RyaW5nIHwgYW55W10gfCBudWxsKSB7XHJcbiAgICB0aGlzLmlzSXRlbXNJbnB1dFVzZWQgPSB0cnVlO1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHZhbHVlID0gW107XHJcbiAgICAgIHRoaXMuaXNJdGVtc0lucHV0VXNlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmIChpc0FueVN0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgdmFsdWUgPSBjb2VyY2VBcnJheVByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGxldCBwcmludEVycm9ycyA9IHRoaXMuaXRlbVN0b3JhZ2Uuc2V0SXRlbXModmFsdWUpO1xyXG4gICAgaWYgKHByaW50RXJyb3JzKSB7XHJcbiAgICAgIHRoaXMuX3ByaW50UHJpbWl0aXZlV2FybmluZ3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oQXJkaXVtT3B0aW9uQ29tcG9uZW50KVxyXG4gIG9wdGlvbkNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8QXJkaXVtT3B0aW9uQ29tcG9uZW50PjtcclxuXHJcbiAgcHJpdmF0ZSBfc2V0SXRlbXNGcm9tQ29tcG9uZW50cygpIHtcclxuICAgIGNvbnN0IGhhbmRsZU9wdGlvbkNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkID0gbWVyZ2UodGhpcy5vcHRpb25Db21wb25lbnRzLmNoYW5nZXMsIHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgbWVyZ2UoLi4udGhpcy5vcHRpb25Db21wb25lbnRzLm1hcChvcHRpb24gPT4gb3B0aW9uLnN0YXRlQ2hhbmdlJCkpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKGNoYW5nZWRPckRlc3Ryb3llZCkpXHJcbiAgICAgICAgLnN1YnNjcmliZShvcHRpb24gPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1TdG9yYWdlLmZpbmRJdGVtQnlWYWx1ZShvcHRpb24ub2xkVmFsdWUgPz8gb3B0aW9uLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICBpdGVtLmRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkO1xyXG4gICAgICAgICAgICAgIGl0ZW0ubGFiZWwgPSBvcHRpb24ubGFiZWwgfHwgaXRlbS5sYWJlbDtcclxuICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgICAgIGl0ZW0uaXRlbURhdGEuZGlzYWJsZWQgPSBvcHRpb24uZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgICAgaXRlbS5pdGVtRGF0YS5sYWJlbCA9IG9wdGlvbi5sYWJlbCB8fCBpdGVtLmxhYmVsO1xyXG4gICAgICAgICAgICAgIGl0ZW0uaXRlbURhdGEudmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICB0aGlzLm9wdGlvbkNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLm9wdGlvbkNvbXBvbmVudHMpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKG9wdGlvbnM6IFF1ZXJ5TGlzdDxBcmRpdW1PcHRpb25Db21wb25lbnQ+KSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXHJcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaGFuZGxlT3B0aW9uQ2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyEgYXR0cmlidXRlIGFuZC9vciBjbGFzcyBzZXR0ZXJzL2dldHRlcnNcclxuICBwcml2YXRlIF9tdWx0aXNlbGVjdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5tdWx0aXBsZScpXHJcbiAgZ2V0IG11bHRpc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9tdWx0aXNlbGVjdGFibGU7XHJcbiAgfVxyXG4gIHNldCBtdWx0aXNlbGVjdGFibGUodjogYW55KSB7XHJcbiAgICB0aGlzLl9tdWx0aXNlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG4gIGdldCBzaW5nbGVzZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9tdWx0aXNlbGVjdGFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNsZWFyYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGVhcmFibGU7XHJcbiAgfVxyXG4gIHNldCBjbGVhcmFibGUodjogYW55KSB7XHJcbiAgICB0aGlzLl9jbGVhcmFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWFyY2hhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgc2VhcmNoYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hhYmxlO1xyXG4gIH1cclxuICBzZXQgc2VhcmNoYWJsZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3NlYXJjaGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoYWJsZSAmJiB0aGlzLnNlYXJjaFRlcm0gIT0gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG91Y2hlZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBzZXQgdG91Y2hlZChzdGF0ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdG91Y2hlZCA9IHN0YXRlO1xyXG4gIH1cclxuXHJcbiAgLy8hIGN1c3RvbSBvcHRpb25zXHJcbiAgcHJpdmF0ZSBfZGVmYXVsdEFkZEN1c3RvbUZuOiBBZGRDdXN0b21Gbjxhbnk+ID0gKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlO1xyXG4gIHByaXZhdGUgX2FkZEN1c3RvbTogZmFsc2UgfCBBZGRDdXN0b21Gbjxhbnk+IHwgQWRkQ3VzdG9tRm48UHJvbWlzZTxhbnk+PiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGFkZEN1c3RvbSgpOiBmYWxzZSB8IEFkZEN1c3RvbUZuPGFueT4gfCBBZGRDdXN0b21GbjxQcm9taXNlPGFueT4+IHtcclxuICAgIHJldHVybiB0aGlzLl9hZGRDdXN0b207XHJcbiAgfVxyXG4gIHNldCBhZGRDdXN0b20odjogc3RyaW5nIHwgYm9vbGVhbiB8IEFkZEN1c3RvbUZuPGFueT4gfCBBZGRDdXN0b21GbjxQcm9taXNlPGFueT4+KSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbih2KSkge1xyXG4gICAgICB0aGlzLl9hZGRDdXN0b20gPSB2O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL2NvZXJjZSB0aGUgdmFsdWUgaW50byBhIGJvb2xlYW5cclxuICAgIC8vaWYgXCJ0cnVlXCIsIHVzZSB0aGUgZGVmYXVsdCBmdW5jdGlvbi4gT3RoZXJ3aXNlLCBqdXN0IHNldCB0byBcImZhbHNlXCIuXHJcbiAgICB0aGlzLl9hZGRDdXN0b20gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgJiYgdGhpcy5fZGVmYXVsdEFkZEN1c3RvbUZuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3VsZFNob3dBZGRDdXN0b20oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGRDdXN0b20gIT0gZmFsc2UgJiYgdGhpcy5zZWFyY2hUZXJtLmxlbmd0aCA+IDAgJiYgdGhpcy5pdGVtU3RvcmFnZS5pc05vSXRlbXNGb3VuZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZEN1c3RvbU9wdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuYWRkQ3VzdG9tKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbmV3T3B0aW9uT2JqID0gYXdhaXQgdGhpcy5pdGVtU3RvcmFnZS5hZGRDdXN0b21PcHRpb24odmFsdWUsIHRoaXMuYWRkQ3VzdG9tKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdEl0ZW0obmV3T3B0aW9uT2JqKTtcclxuICB9XHJcblxyXG4gIC8vISBjb250cm9sIHZhbHVlIGFjY2Vzc29yXHJcbiAgLy9vdmVycmlkZSB0aGUgd3JpdGVWYWx1ZSBhbmQgc2V0RGlzYWJsZWRTdGF0ZSBkZWZpbmVkIGluIF9OZ01vZGVsQ29tcG9uZW50XHJcbiAgb3ZlcnJpZGUgc2V0RGlzYWJsZWRTdGF0ZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBzdGF0ZTtcclxuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICB3cml0ZVZhbHVlKG5nTW9kZWw6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhhbmRsZVdyaXRlVmFsdWUobmdNb2RlbCk7XHJcbiAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgLy8qIGNoYW5nZSAmIHRvdWNoIGV2ZW50IGVtaXR0ZXJzXHJcbiAgcHJvdGVjdGVkIF9lbWl0Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5pdGVtU3RvcmFnZS52YWx1ZTtcclxuICAgIHRoaXMuX29uQ2hhbmdlUmVnaXN0ZXJlZD8uKHZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vblRvdWNoZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkUmVnaXN0ZXJlZD8uKCk7XHJcbiAgfVxyXG5cclxuICAvLyEgdmFsdWUgaW5wdXQgJiBvdXRwdXRcclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICAvL2lmIGlzIGEgc3RyaW5nLCBjb2VyY2UgaXQgaW50byBhcnJheSBvZiBzdHJpbmdzXHJcbiAgICBpZiAoaXNBbnlTdHJpbmcobmV3VmFsdWUpKSBuZXdWYWx1ZSA9IGNvZXJjZUFycmF5UHJvcGVydHkobmV3VmFsdWUpO1xyXG4gICAgLy9pZiBpdCBpcyBub3QgYSBzdHJpbmcgYW5kIG5vdCBhbiBhcnJheSwganVzdCBwdXQgaXQgaW4gYW4gYXJyYXlcclxuICAgIGVsc2UgaWYgKCFpc0FycmF5KG5ld1ZhbHVlKSkgbmV3VmFsdWUgPSBbbmV3VmFsdWVdO1xyXG5cclxuICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS52YWx1ZTtcclxuICB9XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuXHJcbiAgLy8hIG91dHB1dCBldmVudHNcclxuICBAT3V0cHV0KCdjaGFuZ2UnKSBjaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgnYWRkJykgYWRkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoJ2ZhaWxlZFRvQWRkJykgZmFpbGVkVG9BZGRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgncmVtb3ZlJykgcmVtb3ZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoJ2NsZWFyJykgY2xlYXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcclxuICBAT3V0cHV0KCdvcGVuJykgb3BlbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xyXG4gIEBPdXRwdXQoJ2Nsb3NlJykgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcclxuICBAT3V0cHV0KCdzY3JvbGwnKSBzY3JvbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc3RhcnQ6IG51bWJlcjtcclxuICAgIGVuZDogbnVtYmVyO1xyXG4gIH0+KCk7XHJcbiAgQE91dHB1dCgnc2Nyb2xsVG9FbmQnKSBzY3JvbGxUb0VuZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoJ3NlYXJjaCcpIHNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBzZWFyY2g6IHN0cmluZztcclxuICAgIG1hdGNoaW5nOiBhbnlbXTtcclxuICB9PigpO1xyXG5cclxuICBASW5wdXQoJ2lzT3BlbicpXHJcbiAgaXNEcm9wZG93bk9wZW4hOiBib29sZWFuO1xyXG4gIEBPdXRwdXQoJ2lzT3BlbkNoYW5nZScpIGlzRHJvcGRvd25PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvLyEgdmlldyBjaGlsZHJlblxyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBzZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChmb3J3YXJkUmVmKCgpID0+IEFyZGl1bURyb3Bkb3duUGFuZWxDb21wb25lbnQpKVxyXG4gIGRyb3Bkb3duUGFuZWwhOiBBcmRpdW1Ecm9wZG93blBhbmVsQ29tcG9uZW50O1xyXG5cclxuICAvLyEgdGVtcGxhdGVzXHJcbiAgQENvbnRlbnRDaGlsZChBcmRPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIG9wdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEFyZE9wdGdyb3VwVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBvcHRncm91cFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEFyZFZhbHVlVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICB2YWx1ZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEFyZFNlbGVjdFBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBwbGFjZWhvbGRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEFyZExvYWRpbmdTcGlubmVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBsb2FkaW5nU3Bpbm5lclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEFyZExvYWRpbmdQbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgbG9hZGluZ1BsYWNlaG9sZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkRHJvcGRvd25IZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGRyb3Bkb3duSGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkRHJvcGRvd25Gb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGRyb3Bkb3duRm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkTm9JdGVtc0ZvdW5kVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBub0l0ZW1zRm91bmRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChBcmRBZGRDdXN0b21UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGFkZEN1c3RvbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKEFyZEl0ZW1MaW1pdFJlYWNoZWRUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGl0ZW1MaW1pdFJlYWNoZWRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChBcmRJdGVtRGlzcGxheUxpbWl0VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBpdGVtRGlzcGxheUxpbWl0VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAQ29udGVudENoaWxkKEFyZFNlbGVjdFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgcHJlZml4VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkU2VsZWN0U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBzdWZmaXhUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vISBjb250ZXh0IHByb3ZpZGVyc1xyXG4gIGdldFZhbHVlQ29udGV4dChpdGVtOiBBcmRPcHRpb24pOiBWYWx1ZUNvbnRleHQge1xyXG4gICAgY29uc3QgJHRoaXMgPSB0aGlzO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJGltcGxpY2l0OiBpdGVtLFxyXG4gICAgICBpdGVtLFxyXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSxcclxuICAgICAgdW5zZWxlY3QoKSB7XHJcbiAgICAgICAgJHRoaXMudW5zZWxlY3RJdGVtKGl0ZW0pO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0U3RhdHNDb250ZXh0KCk6IFN0YXRzQ29udGV4dCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnRvdGFsSXRlbXMsXHJcbiAgICAgIGZvdW5kSXRlbXM6IHRoaXMuZm91bmRJdGVtcyxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldFNlYXJjaENvbnRleHQoKTogU2VhcmNoQ29udGV4dCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAkaW1wbGljaXQ6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnRvdGFsSXRlbXMsXHJcbiAgICAgIGZvdW5kSXRlbXM6IHRoaXMuZm91bmRJdGVtcyxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldFBsYWNlaG9sZGVyQ29udGV4dCgpOiBQbGFjZWhvbGRlckNvbnRleHQge1xyXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyRm9yQ3VycmVudENvbnRleHQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwbGFjZWhvbGRlcixcclxuICAgICAgJGltcGxpY2l0OiBwbGFjZWhvbGRlcixcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldEN1c3RvbU9wdGlvbkNvbnRleHQoKTogQ3VzdG9tT3B0aW9uQ29udGV4dCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAkaW1wbGljaXQ6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgc2VhcmNoVGVybTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0R3JvdXBDb250ZXh0KGdyb3VwOiBBcmRPcHRpb25Hcm91cCk6IEdyb3VwQ29udGV4dCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAkaW1wbGljaXQ6IGdyb3VwLFxyXG4gICAgICBncm91cCxcclxuICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogZ3JvdXAuY2hpbGRyZW4uZmlsdGVyKHYgPT4gdi5zZWxlY3RlZCkubGVuZ3RoLFxyXG4gICAgICB0b3RhbENoaWxkcmVuOiBncm91cC5jaGlsZHJlbi5sZW5ndGgsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRPcHRpb25Db250ZXh0KGl0ZW06IEFyZE9wdGlvbik6IE9wdGlvbkNvbnRleHQge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJGltcGxpY2l0OiBpdGVtLFxyXG4gICAgICBpdGVtLFxyXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldEl0ZW1MaW1pdENvbnRleHQoKTogSXRlbUxpbWl0Q29udGV4dCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnRvdGFsSXRlbXMsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0ZWRJdGVtcy5sZW5ndGgsXHJcbiAgICAgIGl0ZW1MaW1pdDogdGhpcy5tYXhTZWxlY3RlZEl0ZW1zLFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0SXRlbURpc3BsYXlMaW1pdENvbnRleHQoKTogSXRlbURpc3BsYXlMaW1pdENvbnRleHQge1xyXG4gICAgbGV0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1TdG9yYWdlLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdG90YWxJdGVtczogdGhpcy50b3RhbEl0ZW1zLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICBpdGVtTGltaXQ6IHRoaXMubWF4U2VsZWN0ZWRJdGVtcyxcclxuICAgICAgb3ZlcmZsb3dDb3VudDogc2VsZWN0ZWRJdGVtcyAtICh0aGlzLml0ZW1EaXNwbGF5TGltaXQgPz8gMCksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIHNjcm9sbFN0cmF0ZWd5T3B0czogU2Nyb2xsU3RyYXRlZ3lPcHRpb25zXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5lbGVtZW50ID0gX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8vISBkcm9wZG93biBvdmVybGF5XHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25Ib3N0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgZHJvcGRvd25Ib3N0ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBkcm9wZG93blRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBkcm9wZG93bk92ZXJsYXk/OiBPdmVybGF5UmVmO1xyXG5cclxuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcclxuICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5kcm9wZG93bkhvc3QpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pO1xyXG5cclxuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5T3B0cy5ibG9jaygpLFxyXG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRyb3Bkb3duT3ZlcmxheSA9IHRoaXMub3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcclxuXHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93blRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkuYXR0YWNoKHBvcnRhbCk7XHJcbiAgICB0aGlzLnNldE92ZXJsYXlTaXplKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duT3ZlcmxheSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZHJvcGRvd25PdmVybGF5LmRpc3Bvc2UoKTtcclxuICAgIGRlbGV0ZSB0aGlzLmRyb3Bkb3duT3ZlcmxheTtcclxuICB9XHJcblxyXG4gIHNldE92ZXJsYXlTaXplKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duT3ZlcmxheSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmRyb3Bkb3duSG9zdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkudXBkYXRlU2l6ZSh7IHdpZHRoOiByZWN0LndpZHRoIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE92ZXJsYXlTaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLyEgaG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NldFNlYXJjaElucHV0QXR0cmlidXRlcygpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xyXG4gICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0l0ZW1zSW5wdXRVc2VkKSB7XHJcbiAgICAgIHRoaXMuX3NldEl0ZW1zRnJvbUNvbXBvbmVudHMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy9maXJlIGl0ZW1zIGxvYWQgaGFuZGxlciB3aGVuIGxvYWRpbmcgaXMgc2V0IHRvIGZhbHNlXHJcbiAgICBpZiAoY2hhbmdlc1snbG9hZGluZyddKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzWydsb2FkaW5nJ10uY3VycmVudFZhbHVlID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5fb25JdGVtc0xvYWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9zZXQgZ3JvdXBJdGVtcyB0byB0cnVlIGJ5IGRlZmF1bHQgaWYgZ3JvdXBMYWJlbEZyb20gb3IgaXRlbXNBbHJlYWR5R3JvdXBlZCBpcyBzZXQgdG8gdHJ1ZSBhcyB0aGUgZmlyc3QgY2hhbmdlXHJcbiAgICBpZiAoKGNoYW5nZXNbJ2dyb3VwTGFiZWxGcm9tJ10/LmZpcnN0Q2hhbmdlIHx8IGNoYW5nZXNbJ2l0ZW1zQWxyZWFkeUdyb3VwZWQnXT8uZmlyc3RDaGFuZ2UpICYmICFjaGFuZ2VzWydncm91cEl0ZW1zJ10pIHtcclxuICAgICAgdGhpcy5ncm91cEl0ZW1zID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfb25JdGVtc0xvYWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3NlYXJjaEJhckZvY3VzZWQpIHJldHVybjtcclxuICAgIHRoaXMub3BlbigpO1xyXG4gIH1cclxuICBwcml2YXRlIF9wcmludFByaW1pdGl2ZVdhcm5pbmdzKCkge1xyXG4gICAgZnVuY3Rpb24gbWFrZVdhcm5pbmcoc3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgY29uc29sZS53YXJuKGBTa2lwcGVkIHVzaW5nIFske3N0cn1dIHByb3BlcnR5IGJvdW5kIHRvIDxhcmQtc2VsZWN0PiwgYXMgc29tZSBwcm92aWRlZCBpdGVtcyBhcmUgb2YgcHJpbWl0aXZlIHR5cGVgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbHVlRnJvbSkge1xyXG4gICAgICBtYWtlV2FybmluZygndmFsdWVGcm9tJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sYWJlbEZyb20pIHtcclxuICAgICAgbWFrZVdhcm5pbmcoJ2xhYmVsRnJvbScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRGcm9tKSB7XHJcbiAgICAgIG1ha2VXYXJuaW5nKCdkaXNhYmxlZEZyb20nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3VwTGFiZWxGcm9tKSB7XHJcbiAgICAgIG1ha2VXYXJuaW5nKCdncm91cExhYmVsRnJvbScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JvdXBEaXNhYmxlZEZyb20pIHtcclxuICAgICAgbWFrZVdhcm5pbmcoJ2dyb3VwRGlzYWJsZWRGcm9tJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGlsZHJlbkZyb20pIHtcclxuICAgICAgbWFrZVdhcm5pbmcoJ2NoaWxkcmVuRnJvbScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaW52ZXJ0RGlzYWJsZWQpIHtcclxuICAgICAgbWFrZVdhcm5pbmcoJ2ludmVydERpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyEgZ2V0dGVyc1xyXG4gIGdldCBmaXJzdEhpZ2hsaWdodGVkSXRlbSgpOiBBcmRPcHRpb24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtcz8uZmlyc3QoKTtcclxuICB9XHJcbiAgZ2V0IHNob3VsZERpc3BsYXlQbGFjZWhvbGRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5pdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCAmJiAhdGhpcy5zZWFyY2hUZXJtO1xyXG4gIH1cclxuICBnZXQgc2hvdWxkRGlzcGxheVZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbVN0b3JhZ2UuaXNBbnlJdGVtU2VsZWN0ZWQgJiYgKCF0aGlzLnNlYXJjaFRlcm0gfHwgdGhpcy5tdWx0aXNlbGVjdGFibGUpO1xyXG4gIH1cclxuICBnZXQgc2hvdWxkU2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyYWJsZSAmJiAhdGhpcy5fZGlzYWJsZWQgJiYgKHRoaXMuaXRlbVN0b3JhZ2UuaXNBbnlJdGVtU2VsZWN0ZWQgfHwgdGhpcy5zZWFyY2hUZXJtICE9ICcnKTtcclxuICB9XHJcbiAgZ2V0IGl0ZW1zVG9EaXNwbGF5KCk6IEl0ZXJhYmxlSXRlcmF0b3I8QXJkT3B0aW9uR3JvdXA+IHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1TdG9yYWdlLmdyb3Vwcy52YWx1ZXMoKTtcclxuICB9XHJcbiAgZ2V0IHNob3VsZFNob3dOb0l0ZW1zRm91bmQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS5pc05vSXRlbXNGb3VuZCAmJiAhdGhpcy5pc0xvYWRpbmcgJiYgIXRoaXMuc2hvdWxkU2hvd0FkZEN1c3RvbTtcclxuICB9XHJcbiAgZ2V0IHRvdGFsSXRlbXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1TdG9yYWdlLml0ZW1zLmxlbmd0aDtcclxuICB9XHJcbiAgZ2V0IGZvdW5kSXRlbXMoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5zZWFyY2hhYmxlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbVN0b3JhZ2UuZmlsdGVyZWRJdGVtcy5sZW5ndGg7XHJcbiAgfVxyXG4gIGdldCBzaG91bGRTaG93SXRlbURpc3BsYXlMaW1pdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm11bHRpc2VsZWN0YWJsZSAmJiB0aGlzLml0ZW1EaXNwbGF5TGltaXQgIT0gSW5maW5pdHkgJiYgdGhpcy5pdGVtU3RvcmFnZS5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IHRoaXMuaXRlbURpc3BsYXlMaW1pdDtcclxuICB9XHJcbiAgZ2V0IGlzSW5wdXRFbGVtZW50UmVhZG9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWRkQ3VzdG9tICYmICghdGhpcy5zZWFyY2hhYmxlIHx8IHRoaXMuaXRlbVN0b3JhZ2UuaXNJdGVtTGltaXRSZWFjaGVkKTtcclxuICB9XHJcbiAgaXNWYWx1ZVdpdGhpbkRpc3BsYXlMaW1pdChpOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5tdWx0aXNlbGVjdGFibGUgfHwgdGhpcy5pdGVtRGlzcGxheUxpbWl0ID09IEluZmluaXR5IHx8IGkgPCB0aGlzLml0ZW1EaXNwbGF5TGltaXQ7XHJcbiAgfVxyXG4gIGdldCBwbGFjZWhvbGRlckZvckN1cnJlbnRDb250ZXh0KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hQbGFjZWhvbGRlciAmJiB0aGlzLnNlYXJjaGFibGUgJiYgKHRoaXMuX3NlYXJjaEJhckZvY3VzZWQgfHwgdGhpcy5faXNDbGlja2VkV2l0aGluKSkgcmV0dXJuIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXI7XHJcbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIC8vISBzZWFyY2ggaW5wdXQgZXZlbnQgaGFuZGxlcnNcclxuICBmaWx0ZXIoZmlsdGVyVGVybTogc3RyaW5nLCBzdXBwcmVzc1NlYXJjaEV2ZW50OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoVGVybSA9IGZpbHRlclRlcm07XHJcbiAgICBsZXQgbWF0Y2hpbmcgPSB0aGlzLml0ZW1TdG9yYWdlLmZpbHRlcihmaWx0ZXJUZXJtKTtcclxuICAgIGlmICghc3VwcHJlc3NTZWFyY2hFdmVudCkgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHsgc2VhcmNoOiBmaWx0ZXJUZXJtLCBtYXRjaGluZyB9KTtcclxuICAgIHRoaXMub3BlbigpO1xyXG4gIH1cclxuICBvblNlYXJjaElucHV0Rm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlYXJjaEJhckZvY3VzZWQgPSB0cnVlO1xyXG4gIH1cclxuICBvblNlYXJjaElucHV0Qmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9zZWFyY2hCYXJGb2N1c2VkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcblxyXG4gICAgdGhpcy5fc2VhcmNoQmFyRm9jdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuICAvLyEgaXRlbSBzZWxlY3Rpb24gaGFuZGxlcnNcclxuICB0b2dnbGVJdGVtKGl0ZW06IEFyZE9wdGlvbik6IHZvaWQge1xyXG4gICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy51bnNlbGVjdEl0ZW0oaXRlbSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtKTtcclxuICB9XHJcbiAgc2VsZWN0SXRlbSguLi5pdGVtczogQXJkT3B0aW9uW10pOiB2b2lkIHtcclxuICAgIGxldCBbc2VsZWN0ZWQsIHVuc2VsZWN0ZWQsIGZhaWxlZFRvU2VsZWN0XSA9IHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0SXRlbSguLi5pdGVtcyk7XHJcblxyXG4gICAgaWYgKHVuc2VsZWN0ZWQubGVuZ3RoID4gMCkgdGhpcy5yZW1vdmVFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChmYWlsZWRUb1NlbGVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZmFpbGVkVG9BZGRFdmVudC5lbWl0KGZhaWxlZFRvU2VsZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmFkZEV2ZW50LmVtaXQoc2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XHJcblxyXG4gICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgIGlmICghdGhpcy5rZWVwU2VhcmNoQWZ0ZXJTZWxlY3QpIHRoaXMuX2NsZWFyU2VhcmNoKHRydWUpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmtlZXBPcGVuIHx8IHRoaXMuaXRlbVN0b3JhZ2UuaXNOb0l0ZW1zVG9TZWxlY3QpIHtcclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgdW5zZWxlY3RJdGVtKC4uLml0ZW1zOiBBcmRPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgbGV0IHVuc2VsZWN0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLnVuc2VsZWN0SXRlbSguLi5pdGVtcyk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5fZW1pdENoYW5nZSgpO1xyXG4gICAgaWYgKCF0aGlzLmtlZXBTZWFyY2hBZnRlclNlbGVjdCkgdGhpcy5fY2xlYXJTZWFyY2goKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmtlZXBPcGVuIHx8IHRoaXMuaXRlbVN0b3JhZ2UuaXNOb0l0ZW1zVG9TZWxlY3QpIHtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9jbGVhckFsbEl0ZW1zKCk6IHZvaWQge1xyXG4gICAgbGV0IGNsZWFyZWQgPSB0aGlzLml0ZW1TdG9yYWdlLmNsZWFyQWxsU2VsZWN0ZWQodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMuY2xlYXJFdmVudC5lbWl0KCk7XHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50LmVtaXQoY2xlYXJlZCk7XHJcbiAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsZWFyTGFzdEl0ZW0oKTogdm9pZCB7XHJcbiAgICBsZXQgY2xlYXJlZFZhbHVlID0gdGhpcy5pdGVtU3RvcmFnZS5jbGVhckxhc3RTZWxlY3RlZCgpLnZhbHVlO1xyXG5cclxuICAgIHRoaXMuZm9jdXMoKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50LmVtaXQoW2NsZWFyZWRWYWx1ZV0pO1xyXG4gICAgdGhpcy5fZW1pdENoYW5nZSgpO1xyXG4gIH1cclxuICAvLyEgaGlnaGxpZ2gtcmVsYXRlZFxyXG4gIG9uTW91c2VNb3ZlKCkge1xyXG4gICAgdGhpcy5faXNNb3VzZUJlaW5nVXNlZCA9IHRydWU7XHJcbiAgfVxyXG4gIG9uR3JvdXBNb3VzZW92ZXIoZ3JvdXA6IEFyZE9wdGlvbkdyb3VwKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3RhYmxlIHx8IHRoaXMubm9Hcm91cEFjdGlvbnMpIHJldHVybjtcclxuICAgIHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0R3JvdXAoZ3JvdXApO1xyXG4gIH1cclxuICBvbkl0ZW1Nb3VzZU92ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBvbkl0ZW1Nb3VzZUVudGVyKG9wdGlvbjogQXJkT3B0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9pc01vdXNlQmVpbmdVc2VkKSByZXR1cm47XHJcbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodFNpbmdsZUl0ZW0ob3B0aW9uKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBvbkl0ZW1Nb3VzZUxlYXZlKG9wdGlvbjogQXJkT3B0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9pc01vdXNlQmVpbmdVc2VkKSByZXR1cm47XHJcbiAgICB0aGlzLml0ZW1TdG9yYWdlLnVuaGlnaGxpZ2h0SXRlbShvcHRpb24pO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIC8vISBjbGljayBoYW5kbGVyc1xyXG4gIHByaXZhdGUgX2lzQ2xpY2tlZFdpdGhpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uSXRlbUNsaWNrKG9wdGlvbjogQXJkT3B0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5jbGVhcmFibGUpIHRoaXMudG9nZ2xlSXRlbShvcHRpb24pO1xyXG4gICAgZWxzZSB0aGlzLnNlbGVjdEl0ZW0ob3B0aW9uKTtcclxuXHJcbiAgICB0aGlzLl9pc0NsaWNrZWRXaXRoaW4gPSB0cnVlO1xyXG4gIH1cclxuICBvbkdyb3VwQ2xpY2soZ3JvdXA6IEFyZE9wdGlvbkdyb3VwKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3RhYmxlIHx8IHRoaXMubm9Hcm91cEFjdGlvbnMpIHJldHVybjtcclxuICAgIGlmIChncm91cC5jaGlsZHJlbi5ldmVyeShvID0+IG8uc2VsZWN0ZWQpKSB7XHJcbiAgICAgIHRoaXMudW5zZWxlY3RJdGVtKC4uLmdyb3VwLmNoaWxkcmVuKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RJdGVtKC4uLmdyb3VwLmNoaWxkcmVuKTtcclxuXHJcbiAgICB0aGlzLl9pc0NsaWNrZWRXaXRoaW4gPSB0cnVlO1xyXG4gIH1cclxuICBoYW5kbGVDbGVhckJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgdGhpcy5fY2xlYXJTZWFyY2goKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2xlYXJBbGxJdGVtcygpO1xyXG4gIH1cclxuICBoYW5kbGVEcm9wZG93bkFycm93Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIHRoaXMuX2lzQ2xpY2tlZFdpdGhpbiA9IHRydWU7XHJcblxyXG4gICAgdGhpcy50b2dnbGUoKTtcclxuICB9XHJcbiAgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNEcm9wZG93bk9wZW4pIHJldHVybjtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICh0aGlzLmVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgaGFuZGxlQW55d2hlcmVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKHRhcmdldC50YWdOYW1lICE9ICdJTlBVVCcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc0NsaWNrZWRXaXRoaW4gPSB0cnVlO1xyXG5cclxuICAgIGlmICghdGhpcy5fc2VhcmNoQmFyRm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NlYXJjaGFibGUpIHtcclxuICAgICAgdGhpcy5vcGVuKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvZ2dsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJylcclxuICBvbk1vdXNldXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc0NsaWNrZWRXaXRoaW4gPSBmYWxzZTtcclxuICB9XHJcbiAgLy8hIGRyb3Bkb3duIHN0YXRlIGhhbmRsZXJzXHJcbiAgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEcm9wZG93bk9wZW4pIHtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZW4oKTtcclxuICB9XHJcbiAgb3BlbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNEcm9wZG93bk9wZW4pIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF1dG9IaWdobGlnaHRGaXJzdCkgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcclxuXHJcbiAgICB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcblxyXG4gICAgdGhpcy5vcGVuRXZlbnQuZW1pdCgpO1xyXG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNEcm9wZG93bk9wZW4pO1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzRHJvcGRvd25PcGVuKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XHJcblxyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xyXG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNEcm9wZG93bk9wZW4pO1xyXG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG4gIC8vISBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoISg8YW55PnRoaXMuX2NkKS5kZXN0cm95ZWQpIHtcclxuICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyEgc2VhcmNoXHJcbiAgcHJpdmF0ZSBfY2xlYXJTZWFyY2goc3VwcHJlc3NTZWFyY2hFdmVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZXRTZWFyY2goJycsIHN1cHByZXNzU2VhcmNoRXZlbnQpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXRTZWFyY2goc2VhcmNoVGVybTogc3RyaW5nLCBzdXBwcmVzc1NlYXJjaEV2ZW50OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoVGVybSA9IHNlYXJjaFRlcm07XHJcbiAgICB0aGlzLmZpbHRlcihzZWFyY2hUZXJtLCBzdXBwcmVzc1NlYXJjaEV2ZW50KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2V0U2VhcmNoSW5wdXRBdHRyaWJ1dGVzKCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgIGF1dG9jb3JyZWN0OiAnb2ZmJyxcclxuICAgICAgYXV0b2NhcGl0YWxpemU6ICdvZmYnLFxyXG4gICAgICBhdXRvY29tcGxldGU6ICdvZmYnLFxyXG4gICAgICAuLi50aGlzLmlucHV0QXR0cnMsXHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyEga2V5IHByZXNzIGhhbmRsZXJzXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgIGNhc2UgJ0VudGVyJzoge1xyXG4gICAgICAgIHRoaXMuX29uRW50ZXJQcmVzcyhldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1NwYWNlJzoge1xyXG4gICAgICAgIHRoaXMuX29uU3BhY2VQcmVzcyhldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcclxuICAgICAgICB0aGlzLl9vbkFycm93RG93blByZXNzKGV2ZW50KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcclxuICAgICAgICB0aGlzLl9vbkFycm93VXBQcmVzcyhldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0hvbWUnOiB7XHJcbiAgICAgICAgdGhpcy5fb25Ib21lUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdFbmQnOiB7XHJcbiAgICAgICAgdGhpcy5fb25FbmRQcmVzcyhldmVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XHJcbiAgICAgIGNhc2UgJ0RlbGV0ZSc6IHtcclxuICAgICAgICB0aGlzLl9vbkJhY2tzcGFjZU9yRGVsZXRlUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdLZXlBJzoge1xyXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICB0aGlzLl9vbkN0cmxBUHJlc3MoZXZlbnQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9vbkVudGVyUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBsZXQgc2hvdWxkQ2xvc2UgPSB0cnVlO1xyXG5cclxuICAgIC8vc2VsZWN0IHRoZSBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgb3B0aW9uXHJcbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duT3BlbiAmJiB0aGlzLmZpcnN0SGlnaGxpZ2h0ZWRJdGVtKSB7XHJcbiAgICAgIGlmICh0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodGVkSXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKSkge1xyXG4gICAgICAgIHRoaXMudW5zZWxlY3RJdGVtKC4uLnRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKC4uLnRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vYWRkIGEgY3VzdG9tIG9wdGlvblxyXG4gICAgZWxzZSBpZiAodGhpcy5pc0Ryb3Bkb3duT3BlbiAmJiB0aGlzLnNob3VsZFNob3dBZGRDdXN0b20pIHtcclxuICAgICAgYXdhaXQgdGhpcy5hZGRDdXN0b21PcHRpb24odGhpcy5zZWFyY2hUZXJtKTtcclxuICAgIH1cclxuICAgIC8vaW4gY2FzZSBvZiBubyBhY3Rpb24sIG9wZW4gdGhlIGRyb3Bkb3duIChvciBrZWVwIGl0IG9wZW4pXHJcbiAgICBlbHNlIHNob3VsZENsb3NlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLmtlZXBPcGVuICYmIHNob3VsZENsb3NlKSB7XHJcbiAgICAgIHRoaXMuaXRlbVN0b3JhZ2UuY2xlYXJBbGxIaWdobGlnaHRzKCk7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9vblNwYWNlUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKSByZXR1cm47XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMub3BlbigpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vbkFycm93RG93blByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5vcGVuKCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHJlY2VudGx5SGlnaGxpZ2h0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodE5leHRJdGVtKCsxLCBldmVudC5zaGlmdEtleSk7XHJcbiAgICBpZiAocmVjZW50bHlIaWdobGlnaHRlZCkge1xyXG4gICAgICB0aGlzLml0ZW1TdG9yYWdlLnNldFJlY2VudGx5SGlnaGxpZ2h0ZWQocmVjZW50bHlIaWdobGlnaHRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kcm9wZG93blBhbmVsLnNjcm9sbFRvUmVjZW50bHlIaWdobGlnaHRlZCgnYm90dG9tJyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29uQXJyb3dVcFByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNEcm9wZG93bk9wZW4pIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHJlY2VudGx5SGlnaGxpZ2h0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodE5leHRJdGVtKC0xLCBldmVudC5zaGlmdEtleSk7XHJcbiAgICBpZiAocmVjZW50bHlIaWdobGlnaHRlZCkge1xyXG4gICAgICB0aGlzLml0ZW1TdG9yYWdlLnNldFJlY2VudGx5SGlnaGxpZ2h0ZWQocmVjZW50bHlIaWdobGlnaHRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kcm9wZG93blBhbmVsLnNjcm9sbFRvUmVjZW50bHlIaWdobGlnaHRlZCgndG9wJyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29uSG9tZVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNEcm9wZG93bk9wZW4gfHwgKHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgIT0gMCAmJiB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgIT0gMCkpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHJlY2VudGx5SGlnaGxpZ2h0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xyXG4gICAgaWYgKCFyZWNlbnRseUhpZ2hsaWdodGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pdGVtU3RvcmFnZS5zZXRSZWNlbnRseUhpZ2hsaWdodGVkKHJlY2VudGx5SGlnaGxpZ2h0ZWQpO1xyXG4gICAgdGhpcy5kcm9wZG93blBhbmVsLnNjcm9sbFRvUmVjZW50bHlIaWdobGlnaHRlZCgndG9wJyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29uRW5kUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuaXNEcm9wZG93bk9wZW4gfHxcclxuICAgICAgKHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgIT0gdGhpcy5zZWFyY2hUZXJtLmxlbmd0aCAmJiB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgIT0gdGhpcy5zZWFyY2hUZXJtLmxlbmd0aClcclxuICAgIClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLl9pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcmVjZW50bHlIaWdobGlnaHRlZCA9IHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0TGFzdEl0ZW0oKTtcclxuICAgIGlmICghcmVjZW50bHlIaWdobGlnaHRlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXRlbVN0b3JhZ2Uuc2V0UmVjZW50bHlIaWdobGlnaHRlZChyZWNlbnRseUhpZ2hsaWdodGVkKTtcclxuICAgIHRoaXMuZHJvcGRvd25QYW5lbC5zY3JvbGxUb1JlY2VudGx5SGlnaGxpZ2h0ZWQoJ2JvdHRvbScpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vbkJhY2tzcGFjZU9yRGVsZXRlUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaFRlcm0gfHwgIXRoaXMuX2NsZWFyYWJsZSB8fCB0aGlzLm5vQmFja3NwYWNlQ2xlYXIgfHwgIXRoaXMuaXRlbVN0b3JhZ2UuaXNBbnlJdGVtU2VsZWN0ZWQpIHJldHVybjtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMubXVsdGlzZWxlY3RhYmxlICYmIHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMuX2NsZWFyTGFzdEl0ZW0oKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2xlYXJBbGxJdGVtcygpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vbkN0cmxBUHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0QWxsSXRlbXMoKTtcclxuICB9XHJcbn1cclxuIiwiPGFyZC1mb3JtLWZpZWxkLWZyYW1lXHJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgIFt2YXJpYW50XT1cInZhcmlhbnRcIlxyXG4gICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXHJcbiAgICBbaXNGb2N1c2VkXT1cImlzRm9jdXNlZFwiXHJcbiAgICBbcHJlZml4VGVtcGxhdGVdPVwicHJlZml4VGVtcGxhdGVcIlxyXG4gICAgW3N1ZmZpeFRlbXBsYXRlXT1cInN1ZmZpeFRlbXBsYXRlXCJcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImFyZC1zZWxlY3RcIlxyXG4gICAgICAgICNkcm9wZG93bkhvc3RcclxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQW55d2hlcmVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICBbY2xhc3MuYXJkLWhhcy12YWx1ZV09XCJpdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwibmdDbGFzc2VzXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXNlbGVjdC12YWx1ZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZERpc3BsYXlQbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UGxhY2Vob2xkZXJUZW1wbGF0ZSBsZXQtcGxobGRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtcGxhY2Vob2xkZXJcIj57eyBwbGhsZHIgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicGxhY2Vob2xkZXJUZW1wbGF0ZSB8fCBkZWZhdWx0UGxhY2Vob2xkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFBsYWNlaG9sZGVyQ29udGV4dCgpXCJcclxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGREaXNwbGF5VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtc2VsZWN0LXZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtU3RvcmFnZS5zZWxlY3RlZEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXZhbHVlLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmhpZGRlbl09XCIhaXNWYWx1ZVdpdGhpbkRpc3BsYXlMaW1pdChpKSA/IHRydWUgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1ZhbHVlV2l0aGluRGlzcGxheUxpbWl0KGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidmFsdWVUZW1wbGF0ZSB8fCAobXVsdGlzZWxlY3RhYmxlID8gZGVmYXVsdE11bHRpVmFsdWVUZW1wbGF0ZSA6ICBkZWZhdWx0VmFsdWVUZW1wbGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0VmFsdWVDb250ZXh0KGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZhbHVlVGVtcGxhdGUgbGV0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbYXJkSW5uZXJIVE1MXT1cIml0ZW0ubGFiZWxcIiBbYXJkRXNjYXBlSW5uZXJIVE1MXT1cImlzSXRlbXNJbnB1dFVzZWRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNdWx0aVZhbHVlVGVtcGxhdGUgbGV0LWl0ZW0gbGV0LXVuc2VsZWN0PVwidW5zZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YXJkLWRlbGV0YWJsZS1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGUpPVwidW5zZWxlY3QoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJ2YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZWQtc3Ryb25nXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2FyZElubmVySFRNTF09XCJpdGVtLmxhYmVsXCIgW2FyZEVzY2FwZUlubmVySFRNTF09XCJpc0l0ZW1zSW5wdXRVc2VkXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hcmQtZGVsZXRhYmxlLWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCAmJiBzaG91bGRTaG93SXRlbURpc3BsYXlMaW1pdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1vdmVyZmxvdy1pbmRpY2F0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbURpc3BsYXlMaW1pdFRlbXBsYXRlIHx8IGRlZmF1bHRJdGVtRGlzcGxheUxpbWl0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SXRlbURpc3BsYXlMaW1pdENvbnRleHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEl0ZW1EaXNwbGF5TGltaXRUZW1wbGF0ZSBsZXQtY291bnQ9XCJvdmVyZmxvd0NvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tjb3VudH19IG1vcmUuLi48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1zZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcclxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNEcm9wZG93bk9wZW5cIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImlzRHJvcGRvd25PcGVuID8gaHRtbElkIDogbnVsbFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAjZm9jdXNhYmxlRWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJzZWFyY2hJbnB1dElkXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzSW5wdXRFbGVtZW50UmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpc0Ryb3Bkb3duT3BlbiA/IGh0bWxJZCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXIoc2VhcmNoSW5wdXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uU2VhcmNoSW5wdXRGb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25TZWFyY2hJbnB1dEJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXNlbGVjdC1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nU3Bpbm5lclRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtc2ltcGxlLXNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRpbmdTcGlubmVyVGVtcGxhdGUgfHwgZGVmYXVsdExvYWRpbmdTcGlubmVyVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGFyZC1fY2xlYXItYnV0dG9uICpuZ0lmPVwic2hvdWxkU2hvd0NsZWFyQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjbGVhckJ1dHRvblRpdGxlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGVhckJ1dHRvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9hcmQtX2NsZWFyLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZHJvcGRvd24tYXJyb3ctd3JhcHBlclwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEcm9wZG93bkFycm93Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJkLWRyb3Bkb3duLWFycm93XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1oaXRib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9hcmQtZm9ybS1maWVsZC1mcmFtZT5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duVGVtcGxhdGU+XHJcbiAgICA8YXJkLWRyb3Bkb3duLXBhbmVsXHJcbiAgICAgICAgY2xhc3M9XCJhcmQtZHJvcGRvd24tcGFuZWwgYXJkLXNlbGVjdC1kcm9wZG93bi1wYW5lbFwiXHJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJPcHRpb25zIGxpc3RcIlxyXG4gICAgICAgIFtoZWFkZXJUZW1wbGF0ZV09XCJkcm9wZG93bkhlYWRlclRlbXBsYXRlXCJcclxuICAgICAgICBbZm9vdGVyVGVtcGxhdGVdPVwiZHJvcGRvd25Gb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgW2FwcGVhcmFuY2VdPVwiZHJvcGRvd25BcHBlYXJhbmNlXCJcclxuICAgICAgICBbdmFyaWFudF09XCJkcm9wZG93blZhcmlhbnRcIlxyXG4gICAgICAgIFtpc09wZW5dPVwidHJ1ZVwiXHJcbiAgICAgICAgW2ZpbHRlclZhbHVlXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgIFtwYW5lbElkXT1cImh0bWxJZFwiXHJcbiAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXHJcbiAgICAgICAgKGFyZENsaWNrT3V0c2lkZSk9XCJoYW5kbGVPdXRzaWRlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKG1vdXNlbW92ZSk9XCJvbk1vdXNlTW92ZSgpXCJcclxuICAgICAgICAoc2Nyb2xsKT1cInNjcm9sbEV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNjcm9sbFRvRW5kKT1cInNjcm9sbFRvRW5kRXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3VsZFNob3dOb0l0ZW1zRm91bmRcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhcmQtb3B0Z3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgcm9sZT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBpdGVtU3RvcmFnZS5ncm91cHNcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFyZC1ncm91cC1kaXNhYmxlZF09XCJncm91cC5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLWdyb3VwLXNlbGVjdGVkXT1cImdyb3VwLnNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtZ3JvdXAtaGlnaGxpZ2h0ZWRdPVwiZ3JvdXAuaGlnaGxpZ2h0ZWRcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJvbkdyb3VwTW91c2VvdmVyKGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKGdyb3VwKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJycgJiYgZ3JvdXAubGFiZWwgIT09IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGdyb3VwVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJkLW9wdGdyb3VwLWxhYmVsXCIgW2FyZElubmVySFRNTF09XCJncm91cC5sYWJlbFwiIFthcmRFc2NhcGVJbm5lckhUTUxdPVwiaXNJdGVtc0lucHV0VXNlZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0Z3JvdXBUZW1wbGF0ZSB8fCBkZWZhdWx0T3B0Z3JvdXBUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRHcm91cENvbnRleHQoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtb3B0Z3JvdXAtY2hpbGRyZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLW9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLmNoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC1vcHRpb24tZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC1vcHRpb24tc2VsZWN0ZWRdPVwib3B0aW9uLnNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC1vcHRpb24taGlnaGxpZ2h0ZWRdPVwib3B0aW9uLmhpZ2hsaWdodGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC1vcHRpb24taGlnaGxpZ2h0ZWQtcmVjZW50XT1cIm9wdGlvbi5oaWdobGlnaHRlZF9yZWNlbnRseVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwib3B0aW9uLnNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiaHRtbElkICsgJy0nICsgb3B0aW9uLmluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKG9wdGlvbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25JdGVtTW91c2VPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkl0ZW1Nb3VzZUVudGVyKG9wdGlvbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uSXRlbU1vdXNlTGVhdmUob3B0aW9uLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtb3B0aW9uLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRpb25UZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXJkSW5uZXJIVE1MXT1cIm9wdGlvbi5sYWJlbFwiIFthcmRFc2NhcGVJbm5lckhUTUxdPVwiaXNJdGVtc0lucHV0VXNlZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGUgfHwgZGVmYXVsdE9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0T3B0aW9uQ29udGV4dChvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dOb0l0ZW1zRm91bmRcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Tm9JdGVtc0ZvdW5kVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLW9wdGlvbiBhcmQtb3B0aW9uLWRpc2FibGVkXCI+e3tub0l0ZW1zRm91bmRUZXh0fX08L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJub0l0ZW1zRm91bmRUZW1wbGF0ZSB8fCBkZWZhdWx0Tm9JdGVtc0ZvdW5kVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFNlYXJjaENvbnRleHQoKVwiPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd0FkZEN1c3RvbVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBZGRDdXN0b21UZW1wbGF0ZSBsZXQtc2VhcmNoVGVybT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtb3B0aW9uIGFyZC1vcHRpb24taGlnaGxpZ2h0ZWQgYXJkLWFkZC1jdXN0b21cIiAoY2xpY2spPVwiYWRkQ3VzdG9tT3B0aW9uKHNlYXJjaFRlcm0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcmQtYWRkLWN1c3RvbS1sYWJlbFwiPkFkZCBvcHRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcmQtYWRkLWN1c3RvbS12YWx1ZVwiPlwie3tzZWFyY2hUZXJtfX1cIjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFkZEN1c3RvbVRlbXBsYXRlIHx8IGRlZmF1bHRBZGRDdXN0b21UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q3VzdG9tT3B0aW9uQ29udGV4dCgpXCI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZ1BsYWNlaG9sZGVyVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLW9wdGlvbiBhcmQtb3B0aW9uLWRpc2FibGVkXCI+e3tsb2FkaW5nUGxhY2Vob2xkZXJUZXh0fX08L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsb2FkaW5nUGxhY2Vob2xkZXJUZW1wbGF0ZSB8fCBkZWZhdWx0TG9hZGluZ1BsYWNlaG9sZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFNlYXJjaENvbnRleHQoKVwiPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9hcmQtZHJvcGRvd24tcGFuZWw+XHJcbjwvbmctdGVtcGxhdGU+Il19