cmat 0.0.16 → 0.0.17

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 (240) hide show
  1. package/components/select-search/select-search.component.d.ts +2 -1
  2. package/esm2022/components/adapter/dayjs-date-adapter.mjs +4 -4
  3. package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +4 -4
  4. package/esm2022/components/adapter/native-datetime-adapter.mjs +4 -4
  5. package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +4 -4
  6. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +4 -4
  7. package/esm2022/components/breadcrumb/breadcrumb.service.mjs +4 -4
  8. package/esm2022/components/card/card.component.mjs +4 -4
  9. package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +4 -4
  10. package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +4 -4
  11. package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +4 -4
  12. package/esm2022/components/chip-input/chip-input.component.mjs +4 -4
  13. package/esm2022/components/custom-formly/types/button/button.component.mjs +4 -4
  14. package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +4 -4
  15. package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +4 -4
  16. package/esm2022/components/custom-formly/types/chips/chips.component.mjs +4 -4
  17. package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +4 -4
  18. package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +4 -4
  19. package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +4 -4
  20. package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +4 -4
  21. package/esm2022/components/custom-formly/types/number/number.component.mjs +4 -4
  22. package/esm2022/components/custom-formly/types/quill/quill.component.mjs +4 -4
  23. package/esm2022/components/custom-formly/types/radio/radio.component.mjs +4 -4
  24. package/esm2022/components/custom-formly/types/rating/rating.component.mjs +4 -4
  25. package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +4 -4
  26. package/esm2022/components/custom-formly/types/select/select.component.mjs +4 -4
  27. package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +4 -4
  28. package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +4 -4
  29. package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +4 -4
  30. package/esm2022/components/custom-formly/types/table/table.component.mjs +4 -4
  31. package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +4 -4
  32. package/esm2022/components/custom-formly/types/tags/tags.component.mjs +4 -4
  33. package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +4 -4
  34. package/esm2022/components/custom-formly/types/upload/upload.component.mjs +4 -4
  35. package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +4 -4
  36. package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +4 -4
  37. package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +4 -4
  38. package/esm2022/components/custom-formly/wrappers/form-field/form-field.component.mjs +4 -4
  39. package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +4 -4
  40. package/esm2022/components/date-range/date-range.component.mjs +4 -4
  41. package/esm2022/components/drawer/drawer.component.mjs +4 -4
  42. package/esm2022/components/drawer/drawer.service.mjs +4 -4
  43. package/esm2022/components/fullscreen/fullscreen.component.mjs +4 -4
  44. package/esm2022/components/highlight/highlight.component.mjs +4 -4
  45. package/esm2022/components/highlight/highlight.service.mjs +4 -4
  46. package/esm2022/components/json-editor/json-editor.component.mjs +4 -4
  47. package/esm2022/components/masonry/masonry.component.mjs +4 -4
  48. package/esm2022/components/material-color-picker/material-color-picker.component.mjs +4 -4
  49. package/esm2022/components/material-datetimepicker/calendar-body.mjs +4 -4
  50. package/esm2022/components/material-datetimepicker/calendar.mjs +4 -4
  51. package/esm2022/components/material-datetimepicker/clock.mjs +4 -4
  52. package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +4 -4
  53. package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +4 -4
  54. package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +7 -7
  55. package/esm2022/components/material-datetimepicker/datetimepicker.mjs +7 -7
  56. package/esm2022/components/material-datetimepicker/month-view.mjs +4 -4
  57. package/esm2022/components/material-datetimepicker/multi-year-view.mjs +4 -4
  58. package/esm2022/components/material-datetimepicker/time.mjs +7 -7
  59. package/esm2022/components/material-datetimepicker/year-view.mjs +4 -4
  60. package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +4 -4
  61. package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +4 -4
  62. package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +4 -4
  63. package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +4 -4
  64. package/esm2022/components/navigation/horizontal/horizontal.component.mjs +4 -4
  65. package/esm2022/components/navigation/navigation.service.mjs +4 -4
  66. package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +4 -4
  67. package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +4 -4
  68. package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +4 -4
  69. package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +4 -4
  70. package/esm2022/components/navigation/vertical/components/group/group.component.mjs +4 -4
  71. package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +4 -4
  72. package/esm2022/components/navigation/vertical/vertical.component.mjs +4 -4
  73. package/esm2022/components/pagination/pagination.component.mjs +4 -4
  74. package/esm2022/components/pagination/pagination.directive.mjs +4 -4
  75. package/esm2022/components/pagination/pagination.pipe.mjs +4 -4
  76. package/esm2022/components/pagination/pagination.service.mjs +4 -4
  77. package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +4 -4
  78. package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +4 -4
  79. package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +4 -4
  80. package/esm2022/components/popover/popover-trigger.mjs +4 -4
  81. package/esm2022/components/popover/popover.component.mjs +4 -4
  82. package/esm2022/components/popover/popover.target.mjs +4 -4
  83. package/esm2022/components/progress-bar/progress-bar.component.mjs +4 -4
  84. package/esm2022/components/rating/rating.component.mjs +4 -4
  85. package/esm2022/components/select-search/select-no-entries-found.directive.mjs +4 -4
  86. package/esm2022/components/select-search/select-search-clear.directive.mjs +4 -4
  87. package/esm2022/components/select-search/select-search.component.mjs +4 -4
  88. package/esm2022/components/select-tree/select-tree.component.mjs +4 -4
  89. package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +10 -10
  90. package/esm2022/components/timeline/timeline.component.mjs +4 -4
  91. package/esm2022/components/toast/toast-modal.component.mjs +4 -4
  92. package/esm2022/components/toast/toast.component.mjs +4 -4
  93. package/esm2022/components/toast/toast.service.mjs +4 -4
  94. package/esm2022/components/transfer-picker/filter/filter.component.mjs +4 -4
  95. package/esm2022/components/transfer-picker/search/search.component.mjs +4 -4
  96. package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +4 -4
  97. package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +4 -4
  98. package/esm2022/components/transfer-picker/transfer-picker.component.mjs +4 -4
  99. package/esm2022/components/transfer-picker/transfer-picker.service.mjs +4 -4
  100. package/esm2022/components/upload/files.util.service.mjs +4 -4
  101. package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +4 -4
  102. package/esm2022/components/upload/upload.component.mjs +4 -4
  103. package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +4 -4
  104. package/esm2022/directives/animate-on-scroll/scroll.service.mjs +4 -4
  105. package/esm2022/directives/autofocus/autofocus.directive.mjs +4 -4
  106. package/esm2022/directives/debounce/abstract-debounce.directive.mjs +4 -4
  107. package/esm2022/directives/debounce/debounce-click.directive.mjs +4 -4
  108. package/esm2022/directives/debounce/debounce-keyup.directive.mjs +4 -4
  109. package/esm2022/directives/digit-only/digit-only.directive.mjs +4 -4
  110. package/esm2022/directives/digit-only/mask.directive.mjs +4 -4
  111. package/esm2022/directives/equal-validator/equal-validator.directive.mjs +4 -4
  112. package/esm2022/lib/mock-api/mock-api.interceptor.mjs +4 -4
  113. package/esm2022/lib/mock-api/mock-api.service.mjs +4 -4
  114. package/esm2022/pipes/bytes/bytes.pipe.mjs +4 -4
  115. package/esm2022/pipes/date-format/date-format.pipe.mjs +4 -4
  116. package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +4 -4
  117. package/esm2022/pipes/group-by/group-by.pipe.mjs +4 -4
  118. package/esm2022/pipes/keys/keys.pipe.mjs +4 -4
  119. package/esm2022/pipes/secure/secure-pipe.mjs +4 -4
  120. package/esm2022/pipes/uppercase/uppercase.pipe.mjs +4 -4
  121. package/esm2022/services/alert/alert.service.mjs +4 -4
  122. package/esm2022/services/config/config.service.mjs +4 -4
  123. package/esm2022/services/config/urlStateConfig.service.mjs +4 -4
  124. package/esm2022/services/confirmation/confirmation.service.mjs +4 -4
  125. package/esm2022/services/confirmation/dialog/dialog.component.mjs +4 -4
  126. package/esm2022/services/data/data.service.mjs +6 -6
  127. package/esm2022/services/loading/loading.interceptor.mjs +4 -4
  128. package/esm2022/services/loading/loading.service.mjs +4 -4
  129. package/esm2022/services/local-storage/local-storage.service.mjs +4 -4
  130. package/esm2022/services/media-watcher/media-watcher.service.mjs +4 -4
  131. package/esm2022/services/platform/platform.service.mjs +4 -4
  132. package/esm2022/services/splash-screen/splash-screen.service.mjs +4 -4
  133. package/esm2022/services/title/title.service.mjs +4 -4
  134. package/esm2022/services/translation/translation.service.mjs +4 -4
  135. package/esm2022/services/utils/utils.service.mjs +36 -4
  136. package/fesm2022/cmat-components-adapter.mjs +9 -9
  137. package/fesm2022/cmat-components-adapter.mjs.map +1 -1
  138. package/fesm2022/cmat-components-breadcrumb.mjs +9 -9
  139. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  140. package/fesm2022/cmat-components-card.mjs +3 -3
  141. package/fesm2022/cmat-components-card.mjs.map +1 -1
  142. package/fesm2022/cmat-components-cascade.mjs +9 -9
  143. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  144. package/fesm2022/cmat-components-chip-input.mjs +3 -3
  145. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  146. package/fesm2022/cmat-components-custom-formly.mjs +81 -81
  147. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  148. package/fesm2022/cmat-components-date-range.mjs +3 -3
  149. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  150. package/fesm2022/cmat-components-drawer.mjs +6 -6
  151. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  152. package/fesm2022/cmat-components-fullscreen.mjs +3 -3
  153. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
  154. package/fesm2022/cmat-components-highlight.mjs +6 -6
  155. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  156. package/fesm2022/cmat-components-json-editor.mjs +3 -3
  157. package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
  158. package/fesm2022/cmat-components-masonry.mjs +3 -3
  159. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  160. package/fesm2022/cmat-components-material-color-picker.mjs +3 -3
  161. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  162. package/fesm2022/cmat-components-material-datetimepicker.mjs +42 -42
  163. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  164. package/fesm2022/cmat-components-navigation.mjs +39 -39
  165. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  166. package/fesm2022/cmat-components-pagination.mjs +12 -12
  167. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  168. package/fesm2022/cmat-components-password-strength.mjs +9 -9
  169. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  170. package/fesm2022/cmat-components-popover.mjs +9 -9
  171. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  172. package/fesm2022/cmat-components-progress-bar.mjs +3 -3
  173. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  174. package/fesm2022/cmat-components-rating.mjs +3 -3
  175. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  176. package/fesm2022/cmat-components-select-search.mjs +9 -9
  177. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  178. package/fesm2022/cmat-components-select-tree.mjs +3 -3
  179. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  180. package/fesm2022/cmat-components-timeline.mjs +12 -12
  181. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  182. package/fesm2022/cmat-components-toast.mjs +9 -9
  183. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  184. package/fesm2022/cmat-components-transfer-picker.mjs +18 -18
  185. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  186. package/fesm2022/cmat-components-upload.mjs +9 -9
  187. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  188. package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
  189. package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
  190. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  191. package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
  192. package/fesm2022/cmat-directives-debounce.mjs +9 -9
  193. package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
  194. package/fesm2022/cmat-directives-digit-only.mjs +6 -6
  195. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  196. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  197. package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
  198. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  199. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
  200. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  201. package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
  202. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  203. package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
  204. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  205. package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
  206. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  207. package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
  208. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  209. package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
  210. package/fesm2022/cmat-pipes-secure.mjs +3 -3
  211. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  212. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  213. package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
  214. package/fesm2022/cmat-services-alert.mjs +3 -3
  215. package/fesm2022/cmat-services-alert.mjs.map +1 -1
  216. package/fesm2022/cmat-services-config.mjs +6 -6
  217. package/fesm2022/cmat-services-config.mjs.map +1 -1
  218. package/fesm2022/cmat-services-confirmation.mjs +6 -6
  219. package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
  220. package/fesm2022/cmat-services-data.mjs +5 -5
  221. package/fesm2022/cmat-services-data.mjs.map +1 -1
  222. package/fesm2022/cmat-services-loading.mjs +6 -6
  223. package/fesm2022/cmat-services-loading.mjs.map +1 -1
  224. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  225. package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
  226. package/fesm2022/cmat-services-media-watcher.mjs +3 -3
  227. package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
  228. package/fesm2022/cmat-services-platform.mjs +3 -3
  229. package/fesm2022/cmat-services-platform.mjs.map +1 -1
  230. package/fesm2022/cmat-services-splash-screen.mjs +3 -3
  231. package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
  232. package/fesm2022/cmat-services-title.mjs +3 -3
  233. package/fesm2022/cmat-services-title.mjs.map +1 -1
  234. package/fesm2022/cmat-services-translation.mjs +3 -3
  235. package/fesm2022/cmat-services-translation.mjs.map +1 -1
  236. package/fesm2022/cmat-services-utils.mjs +35 -3
  237. package/fesm2022/cmat-services-utils.mjs.map +1 -1
  238. package/package.json +37 -37
  239. package/services/data/data.service.d.ts +1 -1
  240. package/services/utils/utils.service.d.ts +4 -0
@@ -604,10 +604,10 @@ export class CmatDatetimepickerCalendarComponent {
604
604
  _2digit(n) {
605
605
  return ('00' + n).slice(-2);
606
606
  }
607
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CmatDatetimepickerCalendarComponent, deps: [{ token: i0.ElementRef }, { token: i1.CmatDatetimepickerIntl }, { token: i2.DatetimeAdapter, optional: true }, { token: CMAT_DATETIME_FORMATS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
608
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: CmatDatetimepickerCalendarComponent, isStandalone: true, selector: "cmat-datetimepicker-calendar", inputs: { multiYearSelector: "multiYearSelector", startView: "startView", twelvehour: "twelvehour", timeInterval: "timeInterval", dateFilter: "dateFilter", preventSameDateTimeSelection: "preventSameDateTimeSelection", type: "type", startAt: "startAt", timeInput: "timeInput", selected: "selected", minDate: "minDate", maxDate: "maxDate" }, outputs: { userSelection: "userSelection", selectedChange: "selectedChange", viewChanged: "viewChanged" }, host: { listeners: { "keydown": "handleCalendarBodyKeydown($event)" }, properties: { "class.cmat-datetimepicker-calendar-with-time-input": "timeInput", "class": "this.class", "attr.aria-label": "this.label", "role": "this.role", "tabindex": "this.tabindex" } }, exportAs: ["cmatDatetimepickerCalendar"], ngImport: i0, template: "<div class=\"cmat-datetimepicker-calendar-header\">\r\n @if (type !== 'time') {\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-year header-button\"\r\n [class.active]=\"currentView === 'year' || currentView === 'multi-year'\" [attr.aria-label]=\"yearButtonLabel\"\r\n (click)=\"yearClicked()\">\r\n <span class=\"font-medium\">{{ yearButtonText }}</span>\r\n @if (multiYearSelector || type === 'year') {\r\n <svg class=\"cmat-datetimepicker-calendar-header-year-dropdown\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\">\r\n <path d=\"M7,10L12,15L17,10H7Z\"></path>\r\n </svg>\r\n }\r\n </div>\r\n }\r\n @if (type !== 'year') {\r\n <div class=\"cmat-datetimepicker-calendar-header-date-time\">\r\n @if (type !== 'time') {\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-date header-button\"\r\n [class.active]=\"currentView === 'month'\" [class.not-clickable]=\"type === 'month'\"\r\n [attr.aria-label]=\"dateButtonLabel\" (click)=\"dateClicked()\">{{ dateButtonText }}</div>\r\n }\r\n @if (type.endsWith('time')) {\r\n <span class=\"cmat-datetimepicker-calendar-header-time\" [class.active]=\"currentView === 'clock'\">\r\n <span class=\"cmat-datetimepicker-calendar-header-hour-minute-container flex place-items-center\">\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-hours header-button\"\r\n [class.active]=\"clockView === 'hour'\" [attr.aria-label]=\"hourButtonLabel\" (click)=\"hoursClicked()\">\r\n {{ hoursButtonText }}</div>\r\n <span class=\"cmat-datetimepicker-calendar-header-hour-minute-separator\">&#58;</span>\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-minutes header-button\"\r\n [class.active]=\"clockView === 'minute'\" [attr.aria-label]=\"minuteButtonLabel\" (click)=\"minutesClicked()\">{{\r\n minutesButtonText }}</div>\r\n </span>\r\n @if (twelvehour) {\r\n <span class=\"cmat-datetimepicker-calendar-header-ampm-container flex place-items-center\">\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-ampm header-button\"\r\n aria-label=\"AM\" [class.active]=\"AMPM === 'AM'\" (click)=\"ampmClicked('AM')\">AM</div>\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-ampm header-button\"\r\n aria-label=\"PM\" [class.active]=\"AMPM === 'PM'\" (click)=\"ampmClicked('PM')\">PM</div>\r\n </span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"cmat-datetimepicker-calendar-content\" [ngClass]=\"{'flex flex-col justify-center': currentView==='clock'}\">\r\n @if (currentView === 'month' || currentView === 'year' || currentView === 'multi-year') {\r\n <div class=\"cmat-datetimepickermonth-content\">\r\n <div class=\"cmat-datetimepicker-calendar-controls\">\r\n <button mat-icon-button type=\"button\" class=\"cmat-datetimepicker-calendar-previous-button\"\r\n [class.disabled]=\"!previousEnabled()\" [attr.aria-disabled]=\"!previousEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel\" (click)=\"previousClicked()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path>\r\n </svg>\r\n </button>\r\n <div class=\"cmat-datetimepicker-calendar-period-button text-default font-medium\" [@slideCalendar]=\"calendarState\"\r\n (@slideCalendar.done)=\"calendarStateDone()\">\r\n <strong>{{ yearPeriodText }}</strong>\r\n </div>\r\n <button type=\"button\" mat-icon-button class=\"cmat-datetimepicker-calendar-next-button\"\r\n [class.disabled]=\"!nextEnabled()\" [attr.aria-disabled]=\"!nextEnabled()\" [attr.aria-label]=\"nextButtonLabel\"\r\n (click)=\"nextClicked()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n @switch (currentView) {\r\n @case ('month') {\r\n <cmat-datetimepicker-month-view [activeDate]=\"activeDate\" [dateFilter]=\"dateFilterForViews\"\r\n [selected]=\"selected!\" [type]=\"type\" (userSelection)=\"userSelected()\" (selectedChange)=\"dateSelected($event)\">\r\n </cmat-datetimepicker-month-view>\r\n }\r\n @case ('year') {\r\n <cmat-datetimepicker-year-view [activeDate]=\"activeDate\" [dateFilter]=\"dateFilterForViews\"\r\n [selected]=\"selected!\" [type]=\"type\" (userSelection)=\"userSelected()\" (selectedChange)=\"monthSelected($event)\">\r\n </cmat-datetimepicker-year-view>\r\n }\r\n @case ('multi-year') {\r\n <cmat-datetimepicker-multi-year-view [activeDate]=\"activeDate\" [dateFilter]=\"dateFilterForViews\"\r\n [maxDate]=\"maxDate\" [minDate]=\"minDate\" [selected]=\"selected!\" [type]=\"type\"\r\n (userSelection)=\"userSelected()\" (selectedChange)=\"yearSelected($event)\">\r\n </cmat-datetimepicker-multi-year-view>\r\n }\r\n @default {\r\n @if (timeInput) {\r\n <cmat-datetimepicker-time [AMPM]=\"AMPM\" [clockView]=\"clockView\"\r\n [twelvehour]=\"twelvehour\" [dateFilter]=\"dateFilter\" [interval]=\"timeInterval\" [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\" [selected]=\"activeDate\" (userSelection)=\"userSelected()\" (activeDateChange)=\"onActiveDateChange($event)\"\r\n (selectedChange)=\"timeSelected($event)\" (ampmChange)=\"ampmClicked($event)\" (clockViewChange)=\"clockView = $event\">\r\n </cmat-datetimepicker-time>\r\n } @else {\r\n <cmat-datetimepicker-clock [dateFilter]=\"dateFilter\" [interval]=\"timeInterval\"\r\n [maxDate]=\"maxDate\" [minDate]=\"minDate\" [selected]=\"activeDate\" [startView]=\"clockView\"\r\n [twelvehour]=\"twelvehour\" (userSelection)=\"userSelected()\" (activeDateChange)=\"onActiveDateChange($event)\" (selectedChange)=\"dialTimeSelected($event)\">\r\n </cmat-datetimepicker-clock>\r\n }\r\n }\r\n }\r\n</div>", styles: [".cmat-datetimepicker-calendar{display:block;outline:none}.cmat-datetimepicker-calendar-header{box-sizing:border-box;padding:8px;border-radius:4px 4px 0 0;min-width:264px}.cmat-datetimepicker-calendar-header .header-button{color:#fff!important;padding:0 4px;font-size:inherit;white-space:normal;word-break:break-word;font-weight:500;cursor:pointer}.cmat-datetimepicker-calendar-header-year.header-button{font-size:26px;line-height:24px;display:flex}.cmat-datetimepicker-calendar-header-date-time{font-size:24px;line-height:36px;display:flex;flex-direction:row}.cmat-datetimepicker-calendar-header-year:not(.active),.cmat-datetimepicker-calendar-header-date:not(.active),.cmat-datetimepicker-calendar-header-hours:not(.active),.cmat-datetimepicker-calendar-header-minutes:not(.active),.cmat-datetimepicker-calendar-header-ampm:not(.active){opacity:.6}.cmat-datetimepicker-calendar-header-year.not-clickable,.cmat-datetimepicker-calendar-header-date.not-clickable,.cmat-datetimepicker-calendar-header-hours.not-clickable,.cmat-datetimepicker-calendar-header-minutes.not-clickable,.cmat-datetimepicker-calendar-header-ampm.not-clickable{cursor:initial}.cmat-datetimepicker-calendar-header-time{display:inline-flex}.cmat-datetimepicker-calendar-header-time:not(.active){opacity:.6}.cmat-datetimepicker-calendar-header-time:not(.active) .cmat-datetimepicker-calendar-header-hours,.cmat-datetimepicker-calendar-header-time:not(.active) .cmat-datetimepicker-calendar-header-minutes,.cmat-datetimepicker-calendar-header-time:not(.active) .cmat-datetimepicker-calendar-header-ampm{opacity:1}.cmat-datetimepicker-calendar-header-hour-minute-separator{display:inline-block;width:8px;text-align:center}.cmat-datetimepicker-calendar-header-ampm-container{display:inline-flex;flex-direction:column;line-height:18px;font-size:12px}.cmat-datetimepicker-calendar-content{width:100%;padding:8px;outline:none;box-sizing:border-box;overflow:hidden}.cmat-datetimepicker-calendar-controls{display:flex;justify-content:space-between;margin:0 calc(4.7142857143% - 16px)}.cmat-datetimepicker-calendar-period-button{display:inline-block;height:40px;line-height:40px;outline:none;border:0;background:transparent;box-sizing:border-box}.cmat-datetimepicker-calendar-previous-button.disabled,.cmat-datetimepicker-calendar-next-button.disabled{pointer-events:none}.cmat-datetimepicker-calendar-previous-button svg,.cmat-datetimepicker-calendar-next-button svg{fill:currentColor;vertical-align:top}[dir=rtl] .cmat-datetimepicker-calendar-previous-button svg,[dir=rtl] .cmat-datetimepicker-calendar-next-button svg{transform:rotate(180deg)}.cmat-datetimepicker-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.cmat-datetimepicker-calendar-table-header th{text-align:center;padding:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: CmatDatetimepickerMonthViewComponent, selector: "cmat-datetimepicker-month-view", inputs: ["type", "dateFilter", "activeDate", "selected"], outputs: ["userSelection", "selectedChange"], exportAs: ["cmatDatetimepickerMonthView"] }, { kind: "component", type: CmatDatetimepickerYearViewComponent, selector: "cmat-datetimepicker-year-view", inputs: ["type", "dateFilter", "activeDate", "selected"], outputs: ["userSelection", "selectedChange"], exportAs: ["cmatDatetimepickerYearView"] }, { kind: "component", type: CmatDatetimepickerMultiYearViewComponent, selector: "cmat-datetimepicker-multi-year-view", inputs: ["type", "dateFilter", "activeDate", "selected", "minDate", "maxDate"], outputs: ["userSelection", "selectedChange"], exportAs: ["cmatDatetimepickerMultiYearView"] }, { kind: "component", type: CmatDatetimepickerTimeComponent, selector: "cmat-datetimepicker-time", inputs: ["dateFilter", "interval", "AMPM", "twelvehour", "activeDate", "selected", "minDate", "maxDate", "clockView"], outputs: ["selectedChange", "activeDateChange", "userSelection", "ampmChange", "clockViewChange"], exportAs: ["cmatDatetimepickerTime"] }, { kind: "component", type: CmatDatetimepickerClockComponent, selector: "cmat-datetimepicker-clock", inputs: ["dateFilter", "interval", "twelvehour", "activeDate", "selected", "minDate", "maxDate", "startView"], outputs: ["userSelection", "selectedChange", "activeDateChange"], exportAs: ["cmatDatetimepickerClock"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [slideCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
607
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDatetimepickerCalendarComponent, deps: [{ token: i0.ElementRef }, { token: i1.CmatDatetimepickerIntl }, { token: i2.DatetimeAdapter, optional: true }, { token: CMAT_DATETIME_FORMATS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
608
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatDatetimepickerCalendarComponent, isStandalone: true, selector: "cmat-datetimepicker-calendar", inputs: { multiYearSelector: "multiYearSelector", startView: "startView", twelvehour: "twelvehour", timeInterval: "timeInterval", dateFilter: "dateFilter", preventSameDateTimeSelection: "preventSameDateTimeSelection", type: "type", startAt: "startAt", timeInput: "timeInput", selected: "selected", minDate: "minDate", maxDate: "maxDate" }, outputs: { userSelection: "userSelection", selectedChange: "selectedChange", viewChanged: "viewChanged" }, host: { listeners: { "keydown": "handleCalendarBodyKeydown($event)" }, properties: { "class.cmat-datetimepicker-calendar-with-time-input": "timeInput", "class": "this.class", "attr.aria-label": "this.label", "role": "this.role", "tabindex": "this.tabindex" } }, exportAs: ["cmatDatetimepickerCalendar"], ngImport: i0, template: "<div class=\"cmat-datetimepicker-calendar-header\">\r\n @if (type !== 'time') {\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-year header-button\"\r\n [class.active]=\"currentView === 'year' || currentView === 'multi-year'\" [attr.aria-label]=\"yearButtonLabel\"\r\n (click)=\"yearClicked()\">\r\n <span class=\"font-medium\">{{ yearButtonText }}</span>\r\n @if (multiYearSelector || type === 'year') {\r\n <svg class=\"cmat-datetimepicker-calendar-header-year-dropdown\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\">\r\n <path d=\"M7,10L12,15L17,10H7Z\"></path>\r\n </svg>\r\n }\r\n </div>\r\n }\r\n @if (type !== 'year') {\r\n <div class=\"cmat-datetimepicker-calendar-header-date-time\">\r\n @if (type !== 'time') {\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-date header-button\"\r\n [class.active]=\"currentView === 'month'\" [class.not-clickable]=\"type === 'month'\"\r\n [attr.aria-label]=\"dateButtonLabel\" (click)=\"dateClicked()\">{{ dateButtonText }}</div>\r\n }\r\n @if (type.endsWith('time')) {\r\n <span class=\"cmat-datetimepicker-calendar-header-time\" [class.active]=\"currentView === 'clock'\">\r\n <span class=\"cmat-datetimepicker-calendar-header-hour-minute-container flex place-items-center\">\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-hours header-button\"\r\n [class.active]=\"clockView === 'hour'\" [attr.aria-label]=\"hourButtonLabel\" (click)=\"hoursClicked()\">\r\n {{ hoursButtonText }}</div>\r\n <span class=\"cmat-datetimepicker-calendar-header-hour-minute-separator\">&#58;</span>\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-minutes header-button\"\r\n [class.active]=\"clockView === 'minute'\" [attr.aria-label]=\"minuteButtonLabel\" (click)=\"minutesClicked()\">{{\r\n minutesButtonText }}</div>\r\n </span>\r\n @if (twelvehour) {\r\n <span class=\"cmat-datetimepicker-calendar-header-ampm-container flex place-items-center\">\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-ampm header-button\"\r\n aria-label=\"AM\" [class.active]=\"AMPM === 'AM'\" (click)=\"ampmClicked('AM')\">AM</div>\r\n <div role=\"presentation\" class=\"cmat-datetimepicker-calendar-header-ampm header-button\"\r\n aria-label=\"PM\" [class.active]=\"AMPM === 'PM'\" (click)=\"ampmClicked('PM')\">PM</div>\r\n </span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"cmat-datetimepicker-calendar-content\" [ngClass]=\"{'flex flex-col justify-center': currentView==='clock'}\">\r\n @if (currentView === 'month' || currentView === 'year' || currentView === 'multi-year') {\r\n <div class=\"cmat-datetimepickermonth-content\">\r\n <div class=\"cmat-datetimepicker-calendar-controls\">\r\n <button mat-icon-button type=\"button\" class=\"cmat-datetimepicker-calendar-previous-button\"\r\n [class.disabled]=\"!previousEnabled()\" [attr.aria-disabled]=\"!previousEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel\" (click)=\"previousClicked()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path>\r\n </svg>\r\n </button>\r\n <div class=\"cmat-datetimepicker-calendar-period-button text-default font-medium\" [@slideCalendar]=\"calendarState\"\r\n (@slideCalendar.done)=\"calendarStateDone()\">\r\n <strong>{{ yearPeriodText }}</strong>\r\n </div>\r\n <button type=\"button\" mat-icon-button class=\"cmat-datetimepicker-calendar-next-button\"\r\n [class.disabled]=\"!nextEnabled()\" [attr.aria-disabled]=\"!nextEnabled()\" [attr.aria-label]=\"nextButtonLabel\"\r\n (click)=\"nextClicked()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\r\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n @switch (currentView) {\r\n @case ('month') {\r\n <cmat-datetimepicker-month-view [activeDate]=\"activeDate\" [dateFilter]=\"dateFilterForViews\"\r\n [selected]=\"selected!\" [type]=\"type\" (userSelection)=\"userSelected()\" (selectedChange)=\"dateSelected($event)\">\r\n </cmat-datetimepicker-month-view>\r\n }\r\n @case ('year') {\r\n <cmat-datetimepicker-year-view [activeDate]=\"activeDate\" [dateFilter]=\"dateFilterForViews\"\r\n [selected]=\"selected!\" [type]=\"type\" (userSelection)=\"userSelected()\" (selectedChange)=\"monthSelected($event)\">\r\n </cmat-datetimepicker-year-view>\r\n }\r\n @case ('multi-year') {\r\n <cmat-datetimepicker-multi-year-view [activeDate]=\"activeDate\" [dateFilter]=\"dateFilterForViews\"\r\n [maxDate]=\"maxDate\" [minDate]=\"minDate\" [selected]=\"selected!\" [type]=\"type\"\r\n (userSelection)=\"userSelected()\" (selectedChange)=\"yearSelected($event)\">\r\n </cmat-datetimepicker-multi-year-view>\r\n }\r\n @default {\r\n @if (timeInput) {\r\n <cmat-datetimepicker-time [AMPM]=\"AMPM\" [clockView]=\"clockView\"\r\n [twelvehour]=\"twelvehour\" [dateFilter]=\"dateFilter\" [interval]=\"timeInterval\" [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\" [selected]=\"activeDate\" (userSelection)=\"userSelected()\" (activeDateChange)=\"onActiveDateChange($event)\"\r\n (selectedChange)=\"timeSelected($event)\" (ampmChange)=\"ampmClicked($event)\" (clockViewChange)=\"clockView = $event\">\r\n </cmat-datetimepicker-time>\r\n } @else {\r\n <cmat-datetimepicker-clock [dateFilter]=\"dateFilter\" [interval]=\"timeInterval\"\r\n [maxDate]=\"maxDate\" [minDate]=\"minDate\" [selected]=\"activeDate\" [startView]=\"clockView\"\r\n [twelvehour]=\"twelvehour\" (userSelection)=\"userSelected()\" (activeDateChange)=\"onActiveDateChange($event)\" (selectedChange)=\"dialTimeSelected($event)\">\r\n </cmat-datetimepicker-clock>\r\n }\r\n }\r\n }\r\n</div>", styles: [".cmat-datetimepicker-calendar{display:block;outline:none}.cmat-datetimepicker-calendar-header{box-sizing:border-box;padding:8px;border-radius:4px 4px 0 0;min-width:264px}.cmat-datetimepicker-calendar-header .header-button{color:#fff!important;padding:0 4px;font-size:inherit;white-space:normal;word-break:break-word;font-weight:500;cursor:pointer}.cmat-datetimepicker-calendar-header-year.header-button{font-size:26px;line-height:24px;display:flex}.cmat-datetimepicker-calendar-header-date-time{font-size:24px;line-height:36px;display:flex;flex-direction:row}.cmat-datetimepicker-calendar-header-year:not(.active),.cmat-datetimepicker-calendar-header-date:not(.active),.cmat-datetimepicker-calendar-header-hours:not(.active),.cmat-datetimepicker-calendar-header-minutes:not(.active),.cmat-datetimepicker-calendar-header-ampm:not(.active){opacity:.6}.cmat-datetimepicker-calendar-header-year.not-clickable,.cmat-datetimepicker-calendar-header-date.not-clickable,.cmat-datetimepicker-calendar-header-hours.not-clickable,.cmat-datetimepicker-calendar-header-minutes.not-clickable,.cmat-datetimepicker-calendar-header-ampm.not-clickable{cursor:initial}.cmat-datetimepicker-calendar-header-time{display:inline-flex}.cmat-datetimepicker-calendar-header-time:not(.active){opacity:.6}.cmat-datetimepicker-calendar-header-time:not(.active) .cmat-datetimepicker-calendar-header-hours,.cmat-datetimepicker-calendar-header-time:not(.active) .cmat-datetimepicker-calendar-header-minutes,.cmat-datetimepicker-calendar-header-time:not(.active) .cmat-datetimepicker-calendar-header-ampm{opacity:1}.cmat-datetimepicker-calendar-header-hour-minute-separator{display:inline-block;width:8px;text-align:center}.cmat-datetimepicker-calendar-header-ampm-container{display:inline-flex;flex-direction:column;line-height:18px;font-size:12px}.cmat-datetimepicker-calendar-content{width:100%;padding:8px;outline:none;box-sizing:border-box;overflow:hidden}.cmat-datetimepicker-calendar-controls{display:flex;justify-content:space-between;margin:0 calc(4.7142857143% - 16px)}.cmat-datetimepicker-calendar-period-button{display:inline-block;height:40px;line-height:40px;outline:none;border:0;background:transparent;box-sizing:border-box}.cmat-datetimepicker-calendar-previous-button.disabled,.cmat-datetimepicker-calendar-next-button.disabled{pointer-events:none}.cmat-datetimepicker-calendar-previous-button svg,.cmat-datetimepicker-calendar-next-button svg{fill:currentColor;vertical-align:top}[dir=rtl] .cmat-datetimepicker-calendar-previous-button svg,[dir=rtl] .cmat-datetimepicker-calendar-next-button svg{transform:rotate(180deg)}.cmat-datetimepicker-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.cmat-datetimepicker-calendar-table-header th{text-align:center;padding:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: CmatDatetimepickerMonthViewComponent, selector: "cmat-datetimepicker-month-view", inputs: ["type", "dateFilter", "activeDate", "selected"], outputs: ["userSelection", "selectedChange"], exportAs: ["cmatDatetimepickerMonthView"] }, { kind: "component", type: CmatDatetimepickerYearViewComponent, selector: "cmat-datetimepicker-year-view", inputs: ["type", "dateFilter", "activeDate", "selected"], outputs: ["userSelection", "selectedChange"], exportAs: ["cmatDatetimepickerYearView"] }, { kind: "component", type: CmatDatetimepickerMultiYearViewComponent, selector: "cmat-datetimepicker-multi-year-view", inputs: ["type", "dateFilter", "activeDate", "selected", "minDate", "maxDate"], outputs: ["userSelection", "selectedChange"], exportAs: ["cmatDatetimepickerMultiYearView"] }, { kind: "component", type: CmatDatetimepickerTimeComponent, selector: "cmat-datetimepicker-time", inputs: ["dateFilter", "interval", "AMPM", "twelvehour", "activeDate", "selected", "minDate", "maxDate", "clockView"], outputs: ["selectedChange", "activeDateChange", "userSelection", "ampmChange", "clockViewChange"], exportAs: ["cmatDatetimepickerTime"] }, { kind: "component", type: CmatDatetimepickerClockComponent, selector: "cmat-datetimepicker-clock", inputs: ["dateFilter", "interval", "twelvehour", "activeDate", "selected", "minDate", "maxDate", "startView"], outputs: ["userSelection", "selectedChange", "activeDateChange"], exportAs: ["cmatDatetimepickerClock"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [slideCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
609
609
  }
610
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CmatDatetimepickerCalendarComponent, decorators: [{
610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDatetimepickerCalendarComponent, decorators: [{
611
611
  type: Component,
612
612
  args: [{ selector: 'cmat-datetimepicker-calendar', animations: [slideCalendar], host: {
613
613
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -667,4 +667,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
667
667
  type: HostListener,
668
668
  args: ['keydown', ['$event']]
669
669
  }] } });
670
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvY2FsZW5kYXIudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvY2FsZW5kYXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHFCQUFxQixFQUF3QyxNQUFNLHlCQUF5QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlJLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLFFBQVEs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Z0U7d0JBQ2hFLHNEQUFzRCxFQUFFLFdBQVc7cUJBQ3RFLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxZQUNOLDRCQUE0QixXQUM3QixDQUFDLGVBQWUsRUFBRSxvQ0FBb0MsRUFBRSxtQ0FBbUM7d0JBQ2hHLHdDQUF3QyxFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQzs7MEJBMENwSCxRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQjt5RUF4Q25DLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDZSxLQUFLO3NCQUExQixXQUFXO3VCQUFDLE9BQU87Z0JBQ1ksS0FBSztzQkFBcEMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ1QsSUFBSTtzQkFBeEIsV0FBVzt1QkFBQyxNQUFNO2dCQUNNLFFBQVE7c0JBQWhDLFdBQVc7dUJBQUMsVUFBVTtnQkFvQ25CLElBQUk7c0JBRFAsS0FBSztnQkFlRixPQUFPO3NCQURWLEtBQUs7Z0JBZ0JGLFNBQVM7c0JBRFosS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkFvSk4seUJBQXlCO3NCQUR4QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENNQVRfREFURVRJTUVfRk9STUFUUywgQ21hdERhdGV0aW1lRm9ybWF0cywgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnY21hdC9jb21wb25lbnRzL2FkYXB0ZXInO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJDbG9ja0NvbXBvbmVudCB9IGZyb20gJy4vY2xvY2snO1xyXG5pbXBvcnQgeyBzbGlkZUNhbGVuZGFyIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1hbmltYXRpb25zJztcclxuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWVycm9ycyc7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlckZpbHRlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWZpbHRlcnR5cGUnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJJbnRsIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1pbnRsJztcclxuaW1wb3J0IHsgQ21hdEFNUE0sIENtYXRDYWxlbmRhclZpZXcsIENtYXRDbG9ja1ZpZXcsIENtYXREYXRldGltZXBpY2tlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLXR5cGVzJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aC12aWV3JztcclxuaW1wb3J0IHsgZ2V0QWN0aXZlT2Zmc2V0LCBpc1NhbWVNdWx0aVllYXJWaWV3LCB5ZWFyc1BlclBhZ2UsIHllYXJzUGVyUm93LCBDbWF0RGF0ZXRpbWVwaWNrZXJNdWx0aVllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tdWx0aS15ZWFyLXZpZXcnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyWWVhclZpZXdDb21wb25lbnQgfSBmcm9tICcuL3llYXItdmlldyc7XHJcblxyXG4vKipcclxuICogQSBjYWxlbmRhciB0aGF0IGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgZGF0ZXBpY2tlci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY2FsZW5kYXIuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnY2FsZW5kYXIuc2NzcyddLFxyXG4gICAgYW5pbWF0aW9uczogW3NsaWRlQ2FsZW5kYXJdLFxyXG4gICAgIFxyXG4gICAgaG9zdDoge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cclxuICAgICAgICAnW2NsYXNzLmNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItd2l0aC10aW1lLWlucHV0XSc6ICd0aW1lSW5wdXQnLFxyXG4gICAgfSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBleHBvcnRBczogJ2NtYXREYXRldGltZXBpY2tlckNhbGVuZGFyJyxcclxuICAgIGltcG9ydHM6IFtNYXRCdXR0b25Nb2R1bGUsIENtYXREYXRldGltZXBpY2tlck1vbnRoVmlld0NvbXBvbmVudCwgQ21hdERhdGV0aW1lcGlja2VyWWVhclZpZXdDb21wb25lbnQsXHJcbiAgICAgICAgQ21hdERhdGV0aW1lcGlja2VyTXVsdGlZZWFyVmlld0NvbXBvbmVudCwgQ21hdERhdGV0aW1lcGlja2VyVGltZUNvbXBvbmVudCwgQ21hdERhdGV0aW1lcGlja2VyQ2xvY2tDb21wb25lbnQsIE5nQ2xhc3NdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KCkgdXNlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIC8qKiBBY3RpdmUgbXVsdGkgeWVhciB2aWV3IHdoZW4gY2xpY2sgb24geWVhci4gKi9cclxuICAgIEBJbnB1dCgpIG11bHRpWWVhclNlbGVjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgc2hvdWxkIGJlIHN0YXJ0ZWQgaW4gbW9udGggb3IgeWVhciB2aWV3LiAqL1xyXG4gICAgQElucHV0KCkgc3RhcnRWaWV3OiBDbWF0Q2FsZW5kYXJWaWV3ID0gJ21vbnRoJztcclxuICAgIEBJbnB1dCgpIHR3ZWx2ZWhvdXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHRpbWVJbnRlcnZhbDogbnVtYmVyID0gMTtcclxuICAgIC8qKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIHdoaWNoIGRhdGVzIGFyZSBzZWxlY3RhYmxlLiAqL1xyXG4gICAgQElucHV0KCkgZGF0ZUZpbHRlcjogKGRhdGU6IEQsIHR5cGU6IENtYXREYXRldGltZXBpY2tlckZpbHRlclR5cGUpID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIFByZXZlbnQgdXNlciB0byBzZWxlY3Qgc2FtZSBkYXRlIHRpbWUgKi9cclxuICAgIEBJbnB1dCgpIHByZXZlbnRTYW1lRGF0ZVRpbWVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VzLiAqL1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgdmlldyBoYXMgYmVlbiBjaGFuZ2VkLiAqKi9cclxuICAgIEBPdXRwdXQoKSB2aWV3Q2hhbmdlZDogRXZlbnRFbWl0dGVyPENtYXRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxDbWF0Q2FsZW5kYXJWaWV3PigpO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2NtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXInO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBsYWJlbCA9ICdhcmlhTGFiZWwnO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdyb2xlJykgcm9sZSA9ICdkaWFsb2cnO1xyXG4gICAgQEhvc3RCaW5kaW5nKCd0YWJpbmRleCcpIHRhYmluZGV4ID0gMDtcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICBBTVBNOiBDbWF0QU1QTTtcclxuICAgIGNsb2NrVmlldzogQ21hdENsb2NrVmlldyA9ICdob3VyJztcclxuICAgIGNhbGVuZGFyU3RhdGU6IHN0cmluZztcclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgaXMgaW4gbW9udGggdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2N1cnJlbnRWaWV3OiBDbWF0Q2FsZW5kYXJWaWV3O1xyXG4gICAgcHJpdmF0ZSBfaW50bENoYW5nZXM6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX2NsYW1wZWRBY3RpdmVEYXRlOiBEO1xyXG4gICAgcHJpdmF0ZSBfdHlwZTogQ21hdERhdGV0aW1lcGlja2VyVHlwZSA9ICdkYXRlJztcclxuICAgIHByaXZhdGUgX3N0YXJ0QXQ6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbWluRGF0ZTogRCB8IG51bGw7XHJcbiAgICBwcml2YXRlIF9tYXhEYXRlOiBEIHwgbnVsbDtcclxuICAgIHByaXZhdGUgX3RpbWVJbnB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfaW50bDogQ21hdERhdGV0aW1lcGlja2VySW50bCxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9hZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChDTUFUX0RBVEVUSU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVGb3JtYXRzOiBDbWF0RGF0ZXRpbWVGb3JtYXRzLFxyXG4gICAgICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgICAgIGlmICghdGhpcy5fYWRhcHRlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignQ0RhdGV0aW1lQWRhcHRlcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlRm9ybWF0cykge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignQ01BVF9EQVRFVElNRV9GT1JNQVRTJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pbnRsQ2hhbmdlcyA9IF9pbnRsLmNoYW5nZXNcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiBjaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0eXBlKCk6IENtYXREYXRldGltZXBpY2tlclR5cGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0eXBlKHZhbHVlOiBDbWF0RGF0ZXRpbWVwaWNrZXJUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlIHx8ICdkYXRlJztcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAneWVhcicpIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVllYXJTZWxlY3RvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBIGRhdGUgcmVwcmVzZW50aW5nIHRoZSBwZXJpb2QgKG1vbnRoIG9yIHllYXIpIHRvIHN0YXJ0IHRoZSBjYWxlbmRhciBpbi4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHN0YXJ0QXQoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzdGFydEF0KHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0QXQgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBpcyBpbiB0aW1lIG1vZGUuIEluIHRpbWUgbW9kZSB0aGUgY2FsZW5kYXIgY2xvY2sgZ2V0cyB0aW1lIGlucHV0IGVsZW1lbnRzIHJhdGhlciB0aGVuIGp1c3QgY2xvY2tcclxuICAgICAqXHJcbiAgICAgKiBXaGVuIHRvdWNoVWkgaXMgZW5hYmxlZCB0aGlzIHdpbGwgYmUgZGlzYWJsZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdGltZUlucHV0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90aW1lSW5wdXQ7XHJcbiAgICB9XHJcbiAgICBzZXQgdGltZUlucHV0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fdGltZUlucHV0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlLiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IEQgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1heERhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21heERhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBhY3RpdmUgZGF0ZS4gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIHRpbWUgcGVyaW9kIGlzIHNob3duIGFuZCB3aGljaCBkYXRlIGlzXHJcbiAgICAgKiBoaWdobGlnaHRlZCB3aGVuIHVzaW5nIGtleWJvYXJkIG5hdmlnYXRpb24uXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgYWN0aXZlRGF0ZSgpOiBEIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xhbXBlZEFjdGl2ZURhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcclxuICAgICAgICBjb25zdCBvbGRBY3RpdmVEYXRlID0gdGhpcy5fY2xhbXBlZEFjdGl2ZURhdGU7XHJcbiAgICAgICAgdGhpcy5fY2xhbXBlZEFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZSh2YWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xyXG4gICAgICAgIGlmIChvbGRBY3RpdmVEYXRlICYmIHRoaXMuX2NsYW1wZWRBY3RpdmVEYXRlICYmIHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcgJiZcclxuICAgICAgICAgICAgIXRoaXMuX2FkYXB0ZXIuc2FtZU1vbnRoQW5kWWVhcihvbGRBY3RpdmVEYXRlLCB0aGlzLl9jbGFtcGVkQWN0aXZlRGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2FkYXB0ZXIuaXNJbk5leHRNb250aChvbGRBY3RpdmVEYXRlLCB0aGlzLl9jbGFtcGVkQWN0aXZlRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUNhbGVuZGFyU3RhdGUoJ3JpZ2h0Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VDYWxlbmRhclN0YXRlKCdsZWZ0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBjdXJyZW50VmlldygpOiBDbWF0Q2FsZW5kYXJWaWV3IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGN1cnJlbnRWaWV3KHZpZXc6IENtYXRDYWxlbmRhclZpZXcpIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VmlldyA9IHZpZXc7XHJcbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZC5lbWl0KHZpZXcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjdXJyZW50IGNhbGVuZGFyIHZpZXcuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHllYXJCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5hY3RpdmVEYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHllYXJQZXJpb2RUZXh0KCk6IHN0cmluZyB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbXVsdGkteWVhcicpIHtcclxuICAgICAgICAgICAgLy8gVGhlIG9mZnNldCBmcm9tIHRoZSBhY3RpdmUgeWVhciB0byB0aGUgXCJzbG90XCIgZm9yIHRoZSBzdGFydGluZyB5ZWFyIGlzIHRoZVxyXG4gICAgICAgICAgICAvLyAqYWN0dWFsKiBmaXJzdCByZW5kZXJlZCB5ZWFyIGluIHRoZSBtdWx0aS15ZWFyIHZpZXcsIGFuZCB0aGUgbGFzdCB5ZWFyIGlzXHJcbiAgICAgICAgICAgIC8vIGp1c3QgeWVhcnNQZXJQYWdlIC0gMSBhd2F5LlxyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVZZWFyID0gdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pblllYXJPZlBhZ2UgPSBhY3RpdmVZZWFyIC0gZ2V0QWN0aXZlT2Zmc2V0KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFllYXJPZlBhZ2UgPSBtaW5ZZWFyT2ZQYWdlICsgeWVhcnNQZXJQYWdlIC0gMTtcclxuICAgICAgICAgICAgY29uc3QgbWluWWVhck5hbWUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGUobWluWWVhck9mUGFnZSwgMCwgMSkpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXhZZWFyTmFtZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZShtYXhZZWFyT2ZQYWdlLCAwLCAxKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRsLmZvcm1hdFllYXJSYW5nZShtaW5ZZWFyTmFtZSwgbWF4WWVhck5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcgPyB0aGlzLl9hZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKVt0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSldIDpcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgeWVhckJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlZZWFyU2VsZWN0b3JcclxuICAgICAgICAgICAgPyB0aGlzLl9pbnRsLnN3aXRjaFRvTXVsdGlZZWFyVmlld0xhYmVsXHJcbiAgICAgICAgICAgIDogdGhpcy5faW50bC5zd2l0Y2hUb1llYXJWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgZGF0ZUJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJylbdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpXTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh0aGlzLmFjdGl2ZURhdGUsIHRoaXMuX2RhdGVGb3JtYXRzLmRpc3BsYXkucG9wdXBIZWFkZXJEYXRlTGFiZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IGRhdGVCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnN3aXRjaFRvTW9udGhWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBob3Vyc0J1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaG91ciA9IHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgIGlmICh0aGlzLnR3ZWx2ZWhvdXIpIHtcclxuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGhvdXIgPSAyNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBob3VyID0gaG91ciA+IDEyID8gKGhvdXIgLSAxMikgOiBob3VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fMmRpZ2l0KGhvdXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgaG91ckJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwuc3dpdGNoVG9DbG9ja0hvdXJWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBtaW51dGVzQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl8yZGlnaXQodGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBtaW51dGVCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnN3aXRjaFRvQ2xvY2tNaW51dGVWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBwcmV2QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuX2N1cnJlbnRWaWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnByZXZNb250aExhYmVsO1xyXG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnByZXZZZWFyTGFiZWw7XHJcbiAgICAgICAgICAgIGNhc2UgJ211bHRpLXllYXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwucHJldk11bHRpWWVhckxhYmVsO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IG5leHRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5fY3VycmVudFZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwubmV4dE1vbnRoTGFiZWw7XHJcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwubmV4dFllYXJMYWJlbDtcclxuICAgICAgICAgICAgY2FzZSAnbXVsdGkteWVhcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50bC5uZXh0TXVsdGlZZWFyTGFiZWw7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25Jbk1vbnRoVmlldyhldmVudCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bkluWWVhclZpZXcoZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ211bHRpLXllYXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25Jbk11bHRpWWVhclZpZXcoZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25JbkNsb2NrVmlldyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBEYXRlIGZpbHRlciBmb3IgdGhlIG1vbnRoIGFuZCB5ZWFyIHZpZXdzLiAqL1xyXG4gICAgZGF0ZUZpbHRlckZvclZpZXdzID0gKGRhdGU6IEQpOiBib29sZWFuID0+ICEhZGF0ZSAmJlxyXG4gICAgICAgICghdGhpcy5kYXRlRmlsdGVyIHx8IHRoaXMuZGF0ZUZpbHRlcihkYXRlLCBDbWF0RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlLkRBVEUpKSAmJlxyXG4gICAgICAgICghdGhpcy5taW5EYXRlIHx8IHRoaXMuX2FkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA+PSAwKSAmJlxyXG4gICAgICAgICghdGhpcy5tYXhEYXRlIHx8IHRoaXMuX2FkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5tYXhEYXRlKSA8PSAwKTtcclxuXHJcbiAgICB1c2VyU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5zdGFydEF0ID8/IHRoaXMuX2FkYXB0ZXIudG9kYXkoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFNUE0odGhpcy5hY3RpdmVEYXRlKTtcclxuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ211bHRpLXllYXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAneWVhcic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdGhpcy5zdGFydFZpZXcgfHwgJ21vbnRoJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGFuZGxlcyBkYXRlIHNlbGVjdGlvbiBpbiB0aGUgbW9udGggdmlldy4gKi9cclxuICAgIGRhdGVTZWxlY3RlZChkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fYWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLnNlbGVjdGVkKSB8fCAhdGhpcy5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMgbW9udGggc2VsZWN0aW9uIGluIHRoZSB5ZWFyIHZpZXcuICovXHJcbiAgICBtb250aFNlbGVjdGVkKG1vbnRoOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21vbnRoJykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2FkYXB0ZXIuc2FtZU1vbnRoQW5kWWVhcihtb250aCwgdGhpcy5zZWxlY3RlZCkgfHwgIXRoaXMucHJldmVudFNhbWVEYXRlVGltZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX2FkYXB0ZXIuZ2V0Rmlyc3REYXRlT2ZNb250aChtb250aCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbW9udGg7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdob3VyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMgeWVhciBzZWxlY3Rpb24gaW4gdGhlIG11bHRpIHllYXIgdmlldy4gKi9cclxuICAgIHllYXJTZWxlY3RlZCh5ZWFyOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXInKSB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5zZWxlY3RlZCAmJiAhdGhpcy5fYWRhcHRlci5zYW1lWWVhcih5ZWFyLCB0aGlzLnNlbGVjdGVkKSkgfHwgIXRoaXMucHJldmVudFNhbWVEYXRlVGltZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGUgPSB0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcih5ZWFyKSwgMCwgMSwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQobm9ybWFsaXplZERhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0geWVhcjtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICd5ZWFyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGltZVNlbGVjdGVkKGRhdGU6IEQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnVwZGF0ZURhdGUoZGF0ZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hZGFwdGVyLnNhbWVEYXRldGltZShkYXRlLCB0aGlzLnNlbGVjdGVkKSB8fCAhdGhpcy5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlhbFRpbWVTZWxlY3RlZChkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xvY2tWaWV3ICE9PSAnbWludXRlJykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnVwZGF0ZURhdGUoZGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tWaWV3ID0gJ21pbnV0ZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9hZGFwdGVyLnNhbWVEYXRldGltZShkYXRlLCB0aGlzLnNlbGVjdGVkKSB8fCAhdGhpcy5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3RpdmVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZURhdGUoZGF0ZTogRCk6IEQge1xyXG4gICAgICAgIGlmICh0aGlzLnR3ZWx2ZWhvdXIpIHtcclxuICAgICAgICAgICAgY29uc3QgSE9VUiA9IHRoaXMuX2FkYXB0ZXIuZ2V0SG91cihkYXRlKTtcclxuICAgICAgICAgICAgaWYgKEhPVVIgPT09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5BTVBNID09PSAnQU0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3VycyhkYXRlLCAtMTIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQU1QTSA9PT0gJ1BNJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3VycyhkYXRlLCAxMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QU1QTShkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FkYXB0ZXIuZ2V0SG91cihkYXRlKSA+IDExKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQU1QTSA9ICdQTSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BTVBNID0gJ0FNJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYW1wbUNsaWNrZWQoc291cmNlOiBDbWF0QU1QTSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuXHJcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGhpcy5BTVBNKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5BTVBNID0gc291cmNlO1xyXG5cclxuICAgICAgICAvLyBpZiBBTVBNIGNoYW5nZWQgZnJvbSBQTSB0byBBTSBzdWJzdHJhY3QgMTIgaG91cnNcclxuICAgICAgICBjb25zdCBjdXJyZW50SG91ciA9IHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgIGxldCBuZXdIb3VyVmFsdWU6IG51bWJlcjtcclxuICAgICAgICBpZiAodGhpcy5BTVBNID09PSAnQU0nKSB7XHJcbiAgICAgICAgICAgIG5ld0hvdXJWYWx1ZSA9IGN1cnJlbnRIb3VyID49IDEyID8gdGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSkgLSAxMiA6IDEyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIDEyIGhvdXJzXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld0hvdXJWYWx1ZSA9IChjdXJyZW50SG91ciArIDEyKSAlIDI0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRldGltZShcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgIG5ld0hvdXJWYWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgeWVhckNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXInIHx8IHRoaXMubXVsdGlZZWFyU2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtdWx0aS15ZWFyJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ3llYXInO1xyXG4gICAgfVxyXG5cclxuICAgIGRhdGVDbGlja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdtb250aCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtb250aCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhvdXJzQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdob3VyJztcclxuICAgIH1cclxuXHJcbiAgICBtaW51dGVzQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdtaW51dGUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBwcmV2aW91cyBidXR0b24uICovXHJcbiAgICBwcmV2aW91c0NsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5jdXJyZW50VmlldyA9PT0gJ21vbnRoJyA/XHJcbiAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLCAtMSkgOlxyXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUsIHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJyA/IC0xIDogLXllYXJzUGVyUGFnZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBuZXh0IGJ1dHRvbi4gKi9cclxuICAgIG5leHRDbGlja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcgP1xyXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgMSkgOlxyXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUsIHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJyA/IDEgOiB5ZWFyc1BlclBhZ2VcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgcHJldmlvdXMgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLiAqL1xyXG4gICAgcHJldmlvdXNFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gIXRoaXMubWluRGF0ZSB8fCAhdGhpcy5faXNTYW1lVmlldyh0aGlzLmFjdGl2ZURhdGUsIHRoaXMubWluRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIG5leHQgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLiAqL1xyXG4gICAgbmV4dEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm1heERhdGUgfHwgIXRoaXMuX2lzU2FtZVZpZXcodGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1heERhdGUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmb2N1c0FjdGl2ZUNlbGwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsZW5kYXJTdGF0ZURvbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclN0YXRlID0gJyc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRoZSB0d28gZGF0ZXMgcmVwcmVzZW50IHRoZSBzYW1lIHZpZXcgaW4gdGhlIGN1cnJlbnQgdmlldyBtb2RlIChtb250aCBvciB5ZWFyKS4gKi9cclxuICAgIHByaXZhdGUgX2lzU2FtZVZpZXcoZGF0ZTE6IEQsIGRhdGUyOiBEKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcihkYXRlMSkgPT09IHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcihkYXRlMikgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgoZGF0ZTEpID09PSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5nZXRZZWFyKGRhdGUxKSA9PT0gdGhpcy5fYWRhcHRlci5nZXRZZWFyKGRhdGUyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBpbiAnbXVsdGkteWVhcicgdmlldy5cclxuICAgICAgICByZXR1cm4gaXNTYW1lTXVsdGlZZWFyVmlldyhcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlciwgZGF0ZTEsIGRhdGUyLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMga2V5ZG93biBldmVudHMgb24gdGhlIGNhbGVuZGFyIGJvZHkgd2hlbiBjYWxlbmRhciBpcyBpbiBtb250aCB2aWV3LiAqL1xyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bkluTW9udGhWaWV3KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLmFjdGl2ZURhdGUsIC0xKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLmFjdGl2ZURhdGUsIC03KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhckRheXModGhpcy5hY3RpdmVEYXRlLCA3KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMuYWN0aXZlRGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAxIC0gdGhpcy5fYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLmFjdGl2ZURhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2FkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodGhpcy5hY3RpdmVEYXRlKSAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUGFnZVVwJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGV2ZW50LmFsdEtleSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpIDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGV2ZW50LmFsdEtleSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgMSkgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLCAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlRmlsdGVyRm9yVmlld3ModGhpcy5hY3RpdmVEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVNlbGVjdGVkKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJldmVudCBkZWZhdWx0IG9yIGZvY3VzIGFjdGl2ZSBjZWxsIG9uIGtleXMgdGhhdCB3ZSBkb24ndCBleHBsaWNpdGx5IGhhbmRsZS5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgdW5leHBlY3RlZCBkZWZhdWx0IGFjdGlvbnMgc3VjaCBhcyBmb3JtIHN1Ym1pc3Npb24uXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiB0aGUgY2FsZW5kYXIgYm9keSB3aGVuIGNhbGVuZGFyIGlzIGluIHllYXIgdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25JblllYXJWaWV3KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLmFjdGl2ZURhdGUsIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fcHJldk1vbnRoSW5TYW1lQ29sKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX25leHRNb250aEluU2FtZUNvbCh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0hvbWUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLmFjdGl2ZURhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgLXRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRW5kJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIDExIC0gdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdQYWdlVXAnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCBldmVudC5hbHRLZXkgPyAtMTAgOiAtMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCBldmVudC5hbHRLZXkgPyAxMCA6IDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmV2ZW50IGRlZmF1bHQgb3IgZm9jdXMgYWN0aXZlIGNlbGwgb24ga2V5cyB0aGF0IHdlIGRvbid0IGV4cGxpY2l0bHkgaGFuZGxlLlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIHRoZSBjYWxlbmRhciBib2R5IHdoZW4gY2FsZW5kYXIgaXMgaW4gbXVsdGkteWVhciB2aWV3LiAqL1xyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bkluTXVsdGlZZWFyVmlldyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCAteWVhcnNQZXJSb3cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCB5ZWFyc1BlclJvdyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnSG9tZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIC1nZXRBY3RpdmVPZmZzZXQodGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHllYXJzUGVyUGFnZSAtIGdldEFjdGl2ZU9mZnNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdQYWdlVXAnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSwgZXZlbnQuYWx0S2V5ID8gLXllYXJzUGVyUGFnZSAqIDEwIDogLXllYXJzUGVyUGFnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSwgZXZlbnQuYWx0S2V5ID8geWVhcnNQZXJQYWdlICogMTAgOiB5ZWFyc1BlclBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICAgICAgICAgIHRoaXMueWVhclNlbGVjdGVkKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIERvbid0IHByZXZlbnQgZGVmYXVsdCBvciBmb2N1cyBhY3RpdmUgY2VsbCBvbiBrZXlzIHRoYXQgd2UgZG9uJ3QgZXhwbGljaXRseSBoYW5kbGUuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIHRoZSBjYWxlbmRhciBib2R5IHdoZW4gY2FsZW5kYXIgaXMgaW4gbW9udGggdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25JbkNsb2NrVmlldyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuY2xvY2tWaWV3ID09PSAnaG91cicgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3Vycyh0aGlzLmFjdGl2ZURhdGUsIDEpIDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTWludXRlcyh0aGlzLmFjdGl2ZURhdGUsIHRoaXMudGltZUludGVydmFsKTtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBob3VycyBjaGFuZ2VkIHRoZSBhbS9wbSB3ZSBzaG91bGQgdXBkYXRlIHRoZSBBTS9QTVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBTVBNKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuY2xvY2tWaWV3ID09PSAnaG91cicgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3Vycyh0aGlzLmFjdGl2ZURhdGUsIC0xKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhck1pbnV0ZXModGhpcy5hY3RpdmVEYXRlLCAtdGhpcy50aW1lSW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGhvdXJzIGNoYW5nZWQgdGhlIGFtL3BtIHdlIHNob3VsZCB1cGRhdGUgdGhlIEFNL1BNXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFNUE0odGhpcy5hY3RpdmVEYXRlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGltZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsVGltZVNlbGVjdGVkKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmV2ZW50IGRlZmF1bHQgb3IgZm9jdXMgYWN0aXZlIGNlbGwgb24ga2V5cyB0aGF0IHdlIGRvbid0IGV4cGxpY2l0bHkgaGFuZGxlLlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIHRoZSBkYXRlIGZvciB0aGUgbW9udGggdGhhdCBjb21lcyBiZWZvcmUgdGhlIGdpdmVuIG1vbnRoIGluIHRoZSBzYW1lIGNvbHVtbiBpbiB0aGVcclxuICAgICAqIGNhbGVuZGFyIHRhYmxlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9wcmV2TW9udGhJblNhbWVDb2woZGF0ZTogRCk6IEQge1xyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBtb250aHMgdG8ganVtcCBmb3J3YXJkIGdpdmVuIHRoYXQgdGhlcmUgYXJlIDIgZW1wdHkgc2xvdHMgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICAgIC8vIG9mIGVhY2ggeWVhci5cclxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUpIDw9IDQgPyAtNSA6XHJcbiAgICAgICAgICAgICh0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUpID49IDcgPyAtNyA6IC0xMik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoZGF0ZSwgaW5jcmVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSB0aGUgZGF0ZSBmb3IgdGhlIG1vbnRoIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGdpdmVuIG1vbnRoIGluIHRoZSBzYW1lIGNvbHVtbiBpbiB0aGVcclxuICAgICAqIGNhbGVuZGFyIHRhYmxlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9uZXh0TW9udGhJblNhbWVDb2woZGF0ZTogRCk6IEQge1xyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBtb250aHMgdG8ganVtcCBmb3J3YXJkIGdpdmVuIHRoYXQgdGhlcmUgYXJlIDIgZW1wdHkgc2xvdHMgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICAgIC8vIG9mIGVhY2ggeWVhci5cclxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUpIDw9IDQgPyA3IDpcclxuICAgICAgICAgICAgKHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgoZGF0ZSkgPj0gNyA/IDUgOiAxMik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoZGF0ZSwgaW5jcmVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VDYWxlbmRhclN0YXRlKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclN0YXRlID0gZGlyZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgXzJkaWdpdChuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAoJzAwJyArIG4pLnNsaWNlKC0yKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXJcIj5cclxuICBAaWYgKHR5cGUgIT09ICd0aW1lJykge1xyXG4gIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXIteWVhciBoZWFkZXItYnV0dG9uXCJcclxuICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFZpZXcgPT09ICd5ZWFyJyB8fCBjdXJyZW50VmlldyA9PT0gJ211bHRpLXllYXInXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ5ZWFyQnV0dG9uTGFiZWxcIlxyXG4gICAgKGNsaWNrKT1cInllYXJDbGlja2VkKClcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW1cIj57eyB5ZWFyQnV0dG9uVGV4dCB9fTwvc3Bhbj5cclxuICAgIEBpZiAobXVsdGlZZWFyU2VsZWN0b3IgfHwgdHlwZSA9PT0gJ3llYXInKSB7XHJcbiAgICA8c3ZnIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXIteWVhci1kcm9wZG93blwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgIDxwYXRoIGQ9XCJNNywxMEwxMiwxNUwxNywxMEg3WlwiPjwvcGF0aD5cclxuICAgIDwvc3ZnPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuICBAaWYgKHR5cGUgIT09ICd5ZWFyJykge1xyXG4gIDxkaXYgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWhlYWRlci1kYXRlLXRpbWVcIj5cclxuICAgIEBpZiAodHlwZSAhPT0gJ3RpbWUnKSB7XHJcbiAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItaGVhZGVyLWRhdGUgaGVhZGVyLWJ1dHRvblwiXHJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFZpZXcgPT09ICdtb250aCdcIiBbY2xhc3Mubm90LWNsaWNrYWJsZV09XCJ0eXBlID09PSAnbW9udGgnXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXRlQnV0dG9uTGFiZWxcIiAoY2xpY2spPVwiZGF0ZUNsaWNrZWQoKVwiPnt7IGRhdGVCdXR0b25UZXh0IH19PC9kaXY+XHJcbiAgICB9XHJcbiAgICBAaWYgKHR5cGUuZW5kc1dpdGgoJ3RpbWUnKSkge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWhlYWRlci10aW1lXCIgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VmlldyA9PT0gJ2Nsb2NrJ1wiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItaGVhZGVyLWhvdXItbWludXRlLWNvbnRhaW5lciBmbGV4IHBsYWNlLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItaG91cnMgaGVhZGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ2hvdXInXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJob3VyQnV0dG9uTGFiZWxcIiAoY2xpY2spPVwiaG91cnNDbGlja2VkKClcIj5cclxuICAgICAgICAgIHt7IGhvdXJzQnV0dG9uVGV4dCB9fTwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItaG91ci1taW51dGUtc2VwYXJhdG9yXCI+JiM1ODs8L3NwYW4+XHJcbiAgICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWhlYWRlci1taW51dGVzIGhlYWRlci1idXR0b25cIlxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjbG9ja1ZpZXcgPT09ICdtaW51dGUnXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJtaW51dGVCdXR0b25MYWJlbFwiIChjbGljayk9XCJtaW51dGVzQ2xpY2tlZCgpXCI+e3tcclxuICAgICAgICAgIG1pbnV0ZXNCdXR0b25UZXh0IH19PC9kaXY+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgQGlmICh0d2VsdmVob3VyKSB7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItYW1wbS1jb250YWluZXIgZmxleCBwbGFjZS1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItaGVhZGVyLWFtcG0gaGVhZGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQU1cIiBbY2xhc3MuYWN0aXZlXT1cIkFNUE0gPT09ICdBTSdcIiAoY2xpY2spPVwiYW1wbUNsaWNrZWQoJ0FNJylcIj5BTTwvZGl2PlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItYW1wbSBoZWFkZXItYnV0dG9uXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJQTVwiIFtjbGFzcy5hY3RpdmVdPVwiQU1QTSA9PT0gJ1BNJ1wiIChjbGljayk9XCJhbXBtQ2xpY2tlZCgnUE0nKVwiPlBNPC9kaXY+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1jb250ZW50XCIgW25nQ2xhc3NdPVwieydmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyJzogY3VycmVudFZpZXc9PT0nY2xvY2snfVwiPlxyXG4gIEBpZiAoY3VycmVudFZpZXcgPT09ICdtb250aCcgfHwgY3VycmVudFZpZXcgPT09ICd5ZWFyJyB8fCBjdXJyZW50VmlldyA9PT0gJ211bHRpLXllYXInKSB7XHJcbiAgPGRpdiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXJtb250aC1jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1jb250cm9sc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvblwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwcmV2aW91c0VuYWJsZWQoKVwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiIXByZXZpb3VzRW5hYmxlZCgpXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZCdXR0b25MYWJlbFwiIChjbGljayk9XCJwcmV2aW91c0NsaWNrZWQoKVwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyelwiPjwvcGF0aD5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLXBlcmlvZC1idXR0b24gdGV4dC1kZWZhdWx0IGZvbnQtbWVkaXVtXCIgW0BzbGlkZUNhbGVuZGFyXT1cImNhbGVuZGFyU3RhdGVcIlxyXG4gICAgICAgIChAc2xpZGVDYWxlbmRhci5kb25lKT1cImNhbGVuZGFyU3RhdGVEb25lKClcIj5cclxuICAgICAgICA8c3Ryb25nPnt7IHllYXJQZXJpb2RUZXh0IH19PC9zdHJvbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLW5leHQtYnV0dG9uXCJcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIW5leHRFbmFibGVkKClcIiBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIiFuZXh0RW5hYmxlZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJuZXh0QnV0dG9uTGFiZWxcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZCgpXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02elwiPjwvcGF0aD5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBzd2l0Y2ggKGN1cnJlbnRWaWV3KSB7XHJcbiAgQGNhc2UgKCdtb250aCcpIHtcclxuICA8Y21hdC1kYXRldGltZXBpY2tlci1tb250aC12aWV3IFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyRm9yVmlld3NcIlxyXG4gICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkIVwiIFt0eXBlXT1cInR5cGVcIiAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiIChzZWxlY3RlZENoYW5nZSk9XCJkYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gIDwvY21hdC1kYXRldGltZXBpY2tlci1tb250aC12aWV3PlxyXG4gIH1cclxuICBAY2FzZSAoJ3llYXInKSB7XHJcbiAgPGNtYXQtZGF0ZXRpbWVwaWNrZXIteWVhci12aWV3IFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyRm9yVmlld3NcIlxyXG4gICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkIVwiIFt0eXBlXT1cInR5cGVcIiAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiIChzZWxlY3RlZENoYW5nZSk9XCJtb250aFNlbGVjdGVkKCRldmVudClcIj5cclxuICA8L2NtYXQtZGF0ZXRpbWVwaWNrZXIteWVhci12aWV3PlxyXG4gIH1cclxuICBAY2FzZSAoJ211bHRpLXllYXInKSB7XHJcbiAgPGNtYXQtZGF0ZXRpbWVwaWNrZXItbXVsdGkteWVhci12aWV3IFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyRm9yVmlld3NcIlxyXG4gICAgW21heERhdGVdPVwibWF4RGF0ZVwiIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbc2VsZWN0ZWRdPVwic2VsZWN0ZWQhXCIgW3R5cGVdPVwidHlwZVwiXHJcbiAgICAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiIChzZWxlY3RlZENoYW5nZSk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gIDwvY21hdC1kYXRldGltZXBpY2tlci1tdWx0aS15ZWFyLXZpZXc+XHJcbiAgfVxyXG4gIEBkZWZhdWx0IHtcclxuICBAaWYgKHRpbWVJbnB1dCkge1xyXG4gIDxjbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUgW0FNUE1dPVwiQU1QTVwiIFtjbG9ja1ZpZXddPVwiY2xvY2tWaWV3XCJcclxuICAgIFt0d2VsdmVob3VyXT1cInR3ZWx2ZWhvdXJcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW2ludGVydmFsXT1cInRpbWVJbnRlcnZhbFwiIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgW21pbkRhdGVdPVwibWluRGF0ZVwiIFtzZWxlY3RlZF09XCJhY3RpdmVEYXRlXCIgKHVzZXJTZWxlY3Rpb24pPVwidXNlclNlbGVjdGVkKClcIiAoYWN0aXZlRGF0ZUNoYW5nZSk9XCJvbkFjdGl2ZURhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwidGltZVNlbGVjdGVkKCRldmVudClcIiAoYW1wbUNoYW5nZSk9XCJhbXBtQ2xpY2tlZCgkZXZlbnQpXCIgKGNsb2NrVmlld0NoYW5nZSk9XCJjbG9ja1ZpZXcgPSAkZXZlbnRcIj5cclxuICA8L2NtYXQtZGF0ZXRpbWVwaWNrZXItdGltZT5cclxuICB9IEBlbHNlIHtcclxuICA8Y21hdC1kYXRldGltZXBpY2tlci1jbG9jayBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW2ludGVydmFsXT1cInRpbWVJbnRlcnZhbFwiXHJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiIFtzZWxlY3RlZF09XCJhY3RpdmVEYXRlXCIgW3N0YXJ0Vmlld109XCJjbG9ja1ZpZXdcIlxyXG4gICAgW3R3ZWx2ZWhvdXJdPVwidHdlbHZlaG91clwiICh1c2VyU2VsZWN0aW9uKT1cInVzZXJTZWxlY3RlZCgpXCIgKGFjdGl2ZURhdGVDaGFuZ2UpPVwib25BY3RpdmVEYXRlQ2hhbmdlKCRldmVudClcIiAoc2VsZWN0ZWRDaGFuZ2UpPVwiZGlhbFRpbWVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgPC9jbWF0LWRhdGV0aW1lcGlja2VyLWNsb2NrPlxyXG4gIH1cclxuICB9XHJcbiAgfVxyXG48L2Rpdj4iXX0=
670
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvY2FsZW5kYXIudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIvY2FsZW5kYXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLHFCQUFxQixFQUF3QyxNQUFNLHlCQUF5QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlJLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLFFBQVEs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Z0U7d0JBQ2hFLHNEQUFzRCxFQUFFLFdBQVc7cUJBQ3RFLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxZQUNOLDRCQUE0QixXQUM3QixDQUFDLGVBQWUsRUFBRSxvQ0FBb0MsRUFBRSxtQ0FBbUM7d0JBQ2hHLHdDQUF3QyxFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQzs7MEJBMENwSCxRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQjt5RUF4Q25DLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDZSxLQUFLO3NCQUExQixXQUFXO3VCQUFDLE9BQU87Z0JBQ1ksS0FBSztzQkFBcEMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ1QsSUFBSTtzQkFBeEIsV0FBVzt1QkFBQyxNQUFNO2dCQUNNLFFBQVE7c0JBQWhDLFdBQVc7dUJBQUMsVUFBVTtnQkFvQ25CLElBQUk7c0JBRFAsS0FBSztnQkFlRixPQUFPO3NCQURWLEtBQUs7Z0JBZ0JGLFNBQVM7c0JBRFosS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkFvSk4seUJBQXlCO3NCQUR4QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENNQVRfREFURVRJTUVfRk9STUFUUywgQ21hdERhdGV0aW1lRm9ybWF0cywgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnY21hdC9jb21wb25lbnRzL2FkYXB0ZXInO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJDbG9ja0NvbXBvbmVudCB9IGZyb20gJy4vY2xvY2snO1xyXG5pbXBvcnQgeyBzbGlkZUNhbGVuZGFyIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1hbmltYXRpb25zJztcclxuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWVycm9ycyc7XHJcbmltcG9ydCB7IENtYXREYXRldGltZXBpY2tlckZpbHRlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLWZpbHRlcnR5cGUnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJJbnRsIH0gZnJvbSAnLi9kYXRldGltZXBpY2tlci1pbnRsJztcclxuaW1wb3J0IHsgQ21hdEFNUE0sIENtYXRDYWxlbmRhclZpZXcsIENtYXRDbG9ja1ZpZXcsIENtYXREYXRldGltZXBpY2tlclR5cGUgfSBmcm9tICcuL2RhdGV0aW1lcGlja2VyLXR5cGVzJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aC12aWV3JztcclxuaW1wb3J0IHsgZ2V0QWN0aXZlT2Zmc2V0LCBpc1NhbWVNdWx0aVllYXJWaWV3LCB5ZWFyc1BlclBhZ2UsIHllYXJzUGVyUm93LCBDbWF0RGF0ZXRpbWVwaWNrZXJNdWx0aVllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tdWx0aS15ZWFyLXZpZXcnO1xyXG5pbXBvcnQgeyBDbWF0RGF0ZXRpbWVwaWNrZXJUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lJztcclxuaW1wb3J0IHsgQ21hdERhdGV0aW1lcGlja2VyWWVhclZpZXdDb21wb25lbnQgfSBmcm9tICcuL3llYXItdmlldyc7XHJcblxyXG4vKipcclxuICogQSBjYWxlbmRhciB0aGF0IGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgZGF0ZXBpY2tlci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY2FsZW5kYXIuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnY2FsZW5kYXIuc2NzcyddLFxyXG4gICAgYW5pbWF0aW9uczogW3NsaWRlQ2FsZW5kYXJdLFxyXG4gICAgIFxyXG4gICAgaG9zdDoge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cclxuICAgICAgICAnW2NsYXNzLmNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItd2l0aC10aW1lLWlucHV0XSc6ICd0aW1lSW5wdXQnLFxyXG4gICAgfSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBleHBvcnRBczogJ2NtYXREYXRldGltZXBpY2tlckNhbGVuZGFyJyxcclxuICAgIGltcG9ydHM6IFtNYXRCdXR0b25Nb2R1bGUsIENtYXREYXRldGltZXBpY2tlck1vbnRoVmlld0NvbXBvbmVudCwgQ21hdERhdGV0aW1lcGlja2VyWWVhclZpZXdDb21wb25lbnQsXHJcbiAgICAgICAgQ21hdERhdGV0aW1lcGlja2VyTXVsdGlZZWFyVmlld0NvbXBvbmVudCwgQ21hdERhdGV0aW1lcGlja2VyVGltZUNvbXBvbmVudCwgQ21hdERhdGV0aW1lcGlja2VyQ2xvY2tDb21wb25lbnQsIE5nQ2xhc3NdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZXRpbWVwaWNrZXJDYWxlbmRhckNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KCkgdXNlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIC8qKiBBY3RpdmUgbXVsdGkgeWVhciB2aWV3IHdoZW4gY2xpY2sgb24geWVhci4gKi9cclxuICAgIEBJbnB1dCgpIG11bHRpWWVhclNlbGVjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgc2hvdWxkIGJlIHN0YXJ0ZWQgaW4gbW9udGggb3IgeWVhciB2aWV3LiAqL1xyXG4gICAgQElucHV0KCkgc3RhcnRWaWV3OiBDbWF0Q2FsZW5kYXJWaWV3ID0gJ21vbnRoJztcclxuICAgIEBJbnB1dCgpIHR3ZWx2ZWhvdXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHRpbWVJbnRlcnZhbDogbnVtYmVyID0gMTtcclxuICAgIC8qKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIHdoaWNoIGRhdGVzIGFyZSBzZWxlY3RhYmxlLiAqL1xyXG4gICAgQElucHV0KCkgZGF0ZUZpbHRlcjogKGRhdGU6IEQsIHR5cGU6IENtYXREYXRldGltZXBpY2tlckZpbHRlclR5cGUpID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIFByZXZlbnQgdXNlciB0byBzZWxlY3Qgc2FtZSBkYXRlIHRpbWUgKi9cclxuICAgIEBJbnB1dCgpIHByZXZlbnRTYW1lRGF0ZVRpbWVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VzLiAqL1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XHJcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgdmlldyBoYXMgYmVlbiBjaGFuZ2VkLiAqKi9cclxuICAgIEBPdXRwdXQoKSB2aWV3Q2hhbmdlZDogRXZlbnRFbWl0dGVyPENtYXRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxDbWF0Q2FsZW5kYXJWaWV3PigpO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2NtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXInO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBsYWJlbCA9ICdhcmlhTGFiZWwnO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdyb2xlJykgcm9sZSA9ICdkaWFsb2cnO1xyXG4gICAgQEhvc3RCaW5kaW5nKCd0YWJpbmRleCcpIHRhYmluZGV4ID0gMDtcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXHJcbiAgICBBTVBNOiBDbWF0QU1QTTtcclxuICAgIGNsb2NrVmlldzogQ21hdENsb2NrVmlldyA9ICdob3VyJztcclxuICAgIGNhbGVuZGFyU3RhdGU6IHN0cmluZztcclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgaXMgaW4gbW9udGggdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2N1cnJlbnRWaWV3OiBDbWF0Q2FsZW5kYXJWaWV3O1xyXG4gICAgcHJpdmF0ZSBfaW50bENoYW5nZXM6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX2NsYW1wZWRBY3RpdmVEYXRlOiBEO1xyXG4gICAgcHJpdmF0ZSBfdHlwZTogQ21hdERhdGV0aW1lcGlja2VyVHlwZSA9ICdkYXRlJztcclxuICAgIHByaXZhdGUgX3N0YXJ0QXQ6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IEQgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbWluRGF0ZTogRCB8IG51bGw7XHJcbiAgICBwcml2YXRlIF9tYXhEYXRlOiBEIHwgbnVsbDtcclxuICAgIHByaXZhdGUgX3RpbWVJbnB1dCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfaW50bDogQ21hdERhdGV0aW1lcGlja2VySW50bCxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9hZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChDTUFUX0RBVEVUSU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVGb3JtYXRzOiBDbWF0RGF0ZXRpbWVGb3JtYXRzLFxyXG4gICAgICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgICAgIGlmICghdGhpcy5fYWRhcHRlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignQ0RhdGV0aW1lQWRhcHRlcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlRm9ybWF0cykge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignQ01BVF9EQVRFVElNRV9GT1JNQVRTJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pbnRsQ2hhbmdlcyA9IF9pbnRsLmNoYW5nZXNcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiBjaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0eXBlKCk6IENtYXREYXRldGltZXBpY2tlclR5cGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0eXBlKHZhbHVlOiBDbWF0RGF0ZXRpbWVwaWNrZXJUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlIHx8ICdkYXRlJztcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAneWVhcicpIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVllYXJTZWxlY3RvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBIGRhdGUgcmVwcmVzZW50aW5nIHRoZSBwZXJpb2QgKG1vbnRoIG9yIHllYXIpIHRvIHN0YXJ0IHRoZSBjYWxlbmRhciBpbi4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHN0YXJ0QXQoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzdGFydEF0KHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0QXQgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBjYWxlbmRhciBpcyBpbiB0aW1lIG1vZGUuIEluIHRpbWUgbW9kZSB0aGUgY2FsZW5kYXIgY2xvY2sgZ2V0cyB0aW1lIGlucHV0IGVsZW1lbnRzIHJhdGhlciB0aGVuIGp1c3QgY2xvY2tcclxuICAgICAqXHJcbiAgICAgKiBXaGVuIHRvdWNoVWkgaXMgZW5hYmxlZCB0aGlzIHdpbGwgYmUgZGlzYWJsZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdGltZUlucHV0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90aW1lSW5wdXQ7XHJcbiAgICB9XHJcbiAgICBzZXQgdGltZUlucHV0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fdGltZUlucHV0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlLiAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IEQgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1heERhdGUoKTogRCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21heERhdGUgPSB0aGlzLl9hZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBhY3RpdmUgZGF0ZS4gVGhpcyBkZXRlcm1pbmVzIHdoaWNoIHRpbWUgcGVyaW9kIGlzIHNob3duIGFuZCB3aGljaCBkYXRlIGlzXHJcbiAgICAgKiBoaWdobGlnaHRlZCB3aGVuIHVzaW5nIGtleWJvYXJkIG5hdmlnYXRpb24uXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgYWN0aXZlRGF0ZSgpOiBEIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xhbXBlZEFjdGl2ZURhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcclxuICAgICAgICBjb25zdCBvbGRBY3RpdmVEYXRlID0gdGhpcy5fY2xhbXBlZEFjdGl2ZURhdGU7XHJcbiAgICAgICAgdGhpcy5fY2xhbXBlZEFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmNsYW1wRGF0ZSh2YWx1ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xyXG4gICAgICAgIGlmIChvbGRBY3RpdmVEYXRlICYmIHRoaXMuX2NsYW1wZWRBY3RpdmVEYXRlICYmIHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcgJiZcclxuICAgICAgICAgICAgIXRoaXMuX2FkYXB0ZXIuc2FtZU1vbnRoQW5kWWVhcihvbGRBY3RpdmVEYXRlLCB0aGlzLl9jbGFtcGVkQWN0aXZlRGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2FkYXB0ZXIuaXNJbk5leHRNb250aChvbGRBY3RpdmVEYXRlLCB0aGlzLl9jbGFtcGVkQWN0aXZlRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUNhbGVuZGFyU3RhdGUoJ3JpZ2h0Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VDYWxlbmRhclN0YXRlKCdsZWZ0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBjdXJyZW50VmlldygpOiBDbWF0Q2FsZW5kYXJWaWV3IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGN1cnJlbnRWaWV3KHZpZXc6IENtYXRDYWxlbmRhclZpZXcpIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VmlldyA9IHZpZXc7XHJcbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZC5lbWl0KHZpZXcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjdXJyZW50IGNhbGVuZGFyIHZpZXcuICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHllYXJCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5hY3RpdmVEYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHllYXJQZXJpb2RUZXh0KCk6IHN0cmluZyB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbXVsdGkteWVhcicpIHtcclxuICAgICAgICAgICAgLy8gVGhlIG9mZnNldCBmcm9tIHRoZSBhY3RpdmUgeWVhciB0byB0aGUgXCJzbG90XCIgZm9yIHRoZSBzdGFydGluZyB5ZWFyIGlzIHRoZVxyXG4gICAgICAgICAgICAvLyAqYWN0dWFsKiBmaXJzdCByZW5kZXJlZCB5ZWFyIGluIHRoZSBtdWx0aS15ZWFyIHZpZXcsIGFuZCB0aGUgbGFzdCB5ZWFyIGlzXHJcbiAgICAgICAgICAgIC8vIGp1c3QgeWVhcnNQZXJQYWdlIC0gMSBhd2F5LlxyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVZZWFyID0gdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pblllYXJPZlBhZ2UgPSBhY3RpdmVZZWFyIC0gZ2V0QWN0aXZlT2Zmc2V0KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFllYXJPZlBhZ2UgPSBtaW5ZZWFyT2ZQYWdlICsgeWVhcnNQZXJQYWdlIC0gMTtcclxuICAgICAgICAgICAgY29uc3QgbWluWWVhck5hbWUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGUobWluWWVhck9mUGFnZSwgMCwgMSkpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXhZZWFyTmFtZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2FkYXB0ZXIuY3JlYXRlRGF0ZShtYXhZZWFyT2ZQYWdlLCAwLCAxKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRsLmZvcm1hdFllYXJSYW5nZShtaW5ZZWFyTmFtZSwgbWF4WWVhck5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcgPyB0aGlzLl9hZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKVt0aGlzLl9hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSldIDpcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgeWVhckJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlZZWFyU2VsZWN0b3JcclxuICAgICAgICAgICAgPyB0aGlzLl9pbnRsLnN3aXRjaFRvTXVsdGlZZWFyVmlld0xhYmVsXHJcbiAgICAgICAgICAgIDogdGhpcy5faW50bC5zd2l0Y2hUb1llYXJWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgZGF0ZUJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJylbdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpXTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh0aGlzLmFjdGl2ZURhdGUsIHRoaXMuX2RhdGVGb3JtYXRzLmRpc3BsYXkucG9wdXBIZWFkZXJEYXRlTGFiZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IGRhdGVCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnN3aXRjaFRvTW9udGhWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBob3Vyc0J1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaG91ciA9IHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgIGlmICh0aGlzLnR3ZWx2ZWhvdXIpIHtcclxuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGhvdXIgPSAyNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBob3VyID0gaG91ciA+IDEyID8gKGhvdXIgLSAxMikgOiBob3VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fMmRpZ2l0KGhvdXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgaG91ckJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwuc3dpdGNoVG9DbG9ja0hvdXJWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBtaW51dGVzQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl8yZGlnaXQodGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBtaW51dGVCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnN3aXRjaFRvQ2xvY2tNaW51dGVWaWV3TGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBwcmV2QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuX2N1cnJlbnRWaWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnByZXZNb250aExhYmVsO1xyXG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRsLnByZXZZZWFyTGFiZWw7XHJcbiAgICAgICAgICAgIGNhc2UgJ211bHRpLXllYXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwucHJldk11bHRpWWVhckxhYmVsO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IG5leHRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5fY3VycmVudFZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwubmV4dE1vbnRoTGFiZWw7XHJcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGwubmV4dFllYXJMYWJlbDtcclxuICAgICAgICAgICAgY2FzZSAnbXVsdGkteWVhcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50bC5uZXh0TXVsdGlZZWFyTGFiZWw7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgaGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25Jbk1vbnRoVmlldyhldmVudCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bkluWWVhclZpZXcoZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ211bHRpLXllYXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25Jbk11bHRpWWVhclZpZXcoZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25JbkNsb2NrVmlldyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBEYXRlIGZpbHRlciBmb3IgdGhlIG1vbnRoIGFuZCB5ZWFyIHZpZXdzLiAqL1xyXG4gICAgZGF0ZUZpbHRlckZvclZpZXdzID0gKGRhdGU6IEQpOiBib29sZWFuID0+ICEhZGF0ZSAmJlxyXG4gICAgICAgICghdGhpcy5kYXRlRmlsdGVyIHx8IHRoaXMuZGF0ZUZpbHRlcihkYXRlLCBDbWF0RGF0ZXRpbWVwaWNrZXJGaWx0ZXJUeXBlLkRBVEUpKSAmJlxyXG4gICAgICAgICghdGhpcy5taW5EYXRlIHx8IHRoaXMuX2FkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA+PSAwKSAmJlxyXG4gICAgICAgICghdGhpcy5tYXhEYXRlIHx8IHRoaXMuX2FkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5tYXhEYXRlKSA8PSAwKTtcclxuXHJcbiAgICB1c2VyU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5zdGFydEF0ID8/IHRoaXMuX2FkYXB0ZXIudG9kYXkoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdEFNUE0odGhpcy5hY3RpdmVEYXRlKTtcclxuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ211bHRpLXllYXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAneWVhcic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdGhpcy5zdGFydFZpZXcgfHwgJ21vbnRoJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGFuZGxlcyBkYXRlIHNlbGVjdGlvbiBpbiB0aGUgbW9udGggdmlldy4gKi9cclxuICAgIGRhdGVTZWxlY3RlZChkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fYWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLnNlbGVjdGVkKSB8fCAhdGhpcy5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMgbW9udGggc2VsZWN0aW9uIGluIHRoZSB5ZWFyIHZpZXcuICovXHJcbiAgICBtb250aFNlbGVjdGVkKG1vbnRoOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21vbnRoJykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2FkYXB0ZXIuc2FtZU1vbnRoQW5kWWVhcihtb250aCwgdGhpcy5zZWxlY3RlZCkgfHwgIXRoaXMucHJldmVudFNhbWVEYXRlVGltZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX2FkYXB0ZXIuZ2V0Rmlyc3REYXRlT2ZNb250aChtb250aCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbW9udGg7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xyXG4gICAgICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdob3VyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMgeWVhciBzZWxlY3Rpb24gaW4gdGhlIG11bHRpIHllYXIgdmlldy4gKi9cclxuICAgIHllYXJTZWxlY3RlZCh5ZWFyOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXInKSB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5zZWxlY3RlZCAmJiAhdGhpcy5fYWRhcHRlci5zYW1lWWVhcih5ZWFyLCB0aGlzLnNlbGVjdGVkKSkgfHwgIXRoaXMucHJldmVudFNhbWVEYXRlVGltZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGUgPSB0aGlzLl9hZGFwdGVyLmNyZWF0ZURhdGV0aW1lKHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcih5ZWFyKSwgMCwgMSwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQobm9ybWFsaXplZERhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0geWVhcjtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICd5ZWFyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGltZVNlbGVjdGVkKGRhdGU6IEQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnVwZGF0ZURhdGUoZGF0ZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hZGFwdGVyLnNhbWVEYXRldGltZShkYXRlLCB0aGlzLnNlbGVjdGVkKSB8fCAhdGhpcy5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlhbFRpbWVTZWxlY3RlZChkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xvY2tWaWV3ICE9PSAnbWludXRlJykge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnVwZGF0ZURhdGUoZGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvY2tWaWV3ID0gJ21pbnV0ZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9hZGFwdGVyLnNhbWVEYXRldGltZShkYXRlLCB0aGlzLnNlbGVjdGVkKSB8fCAhdGhpcy5wcmV2ZW50U2FtZURhdGVUaW1lU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3RpdmVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZURhdGUoZGF0ZTogRCk6IEQge1xyXG4gICAgICAgIGlmICh0aGlzLnR3ZWx2ZWhvdXIpIHtcclxuICAgICAgICAgICAgY29uc3QgSE9VUiA9IHRoaXMuX2FkYXB0ZXIuZ2V0SG91cihkYXRlKTtcclxuICAgICAgICAgICAgaWYgKEhPVVIgPT09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5BTVBNID09PSAnQU0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3VycyhkYXRlLCAtMTIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQU1QTSA9PT0gJ1BNJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3VycyhkYXRlLCAxMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QU1QTShkYXRlOiBEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FkYXB0ZXIuZ2V0SG91cihkYXRlKSA+IDExKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQU1QTSA9ICdQTSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BTVBNID0gJ0FNJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYW1wbUNsaWNrZWQoc291cmNlOiBDbWF0QU1QTSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuXHJcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGhpcy5BTVBNKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5BTVBNID0gc291cmNlO1xyXG5cclxuICAgICAgICAvLyBpZiBBTVBNIGNoYW5nZWQgZnJvbSBQTSB0byBBTSBzdWJzdHJhY3QgMTIgaG91cnNcclxuICAgICAgICBjb25zdCBjdXJyZW50SG91ciA9IHRoaXMuX2FkYXB0ZXIuZ2V0SG91cih0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgIGxldCBuZXdIb3VyVmFsdWU6IG51bWJlcjtcclxuICAgICAgICBpZiAodGhpcy5BTVBNID09PSAnQU0nKSB7XHJcbiAgICAgICAgICAgIG5ld0hvdXJWYWx1ZSA9IGN1cnJlbnRIb3VyID49IDEyID8gdGhpcy5fYWRhcHRlci5nZXRIb3VyKHRoaXMuYWN0aXZlRGF0ZSkgLSAxMiA6IDEyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIDEyIGhvdXJzXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld0hvdXJWYWx1ZSA9IChjdXJyZW50SG91ciArIDEyKSAlIDI0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5jcmVhdGVEYXRldGltZShcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSxcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksXHJcbiAgICAgICAgICAgIG5ld0hvdXJWYWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5nZXRNaW51dGUodGhpcy5hY3RpdmVEYXRlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgeWVhckNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXInIHx8IHRoaXMubXVsdGlZZWFyU2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtdWx0aS15ZWFyJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ3llYXInO1xyXG4gICAgfVxyXG5cclxuICAgIGRhdGVDbGlja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdtb250aCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtb250aCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhvdXJzQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdob3VyJztcclxuICAgIH1cclxuXHJcbiAgICBtaW51dGVzQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2Nsb2NrJztcclxuICAgICAgICB0aGlzLmNsb2NrVmlldyA9ICdtaW51dGUnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBwcmV2aW91cyBidXR0b24uICovXHJcbiAgICBwcmV2aW91c0NsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5jdXJyZW50VmlldyA9PT0gJ21vbnRoJyA/XHJcbiAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLCAtMSkgOlxyXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUsIHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJyA/IC0xIDogLXllYXJzUGVyUGFnZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBuZXh0IGJ1dHRvbi4gKi9cclxuICAgIG5leHRDbGlja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcgP1xyXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgMSkgOlxyXG4gICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUsIHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJyA/IDEgOiB5ZWFyc1BlclBhZ2VcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogV2hldGhlciB0aGUgcHJldmlvdXMgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLiAqL1xyXG4gICAgcHJldmlvdXNFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gIXRoaXMubWluRGF0ZSB8fCAhdGhpcy5faXNTYW1lVmlldyh0aGlzLmFjdGl2ZURhdGUsIHRoaXMubWluRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIG5leHQgcGVyaW9kIGJ1dHRvbiBpcyBlbmFibGVkLiAqL1xyXG4gICAgbmV4dEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm1heERhdGUgfHwgIXRoaXMuX2lzU2FtZVZpZXcodGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1heERhdGUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmb2N1c0FjdGl2ZUNlbGwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsZW5kYXJTdGF0ZURvbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclN0YXRlID0gJyc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBXaGV0aGVyIHRoZSB0d28gZGF0ZXMgcmVwcmVzZW50IHRoZSBzYW1lIHZpZXcgaW4gdGhlIGN1cnJlbnQgdmlldyBtb2RlIChtb250aCBvciB5ZWFyKS4gKi9cclxuICAgIHByaXZhdGUgX2lzU2FtZVZpZXcoZGF0ZTE6IEQsIGRhdGUyOiBEKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcihkYXRlMSkgPT09IHRoaXMuX2FkYXB0ZXIuZ2V0WWVhcihkYXRlMikgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgoZGF0ZTEpID09PSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5nZXRZZWFyKGRhdGUxKSA9PT0gdGhpcy5fYWRhcHRlci5nZXRZZWFyKGRhdGUyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBpbiAnbXVsdGkteWVhcicgdmlldy5cclxuICAgICAgICByZXR1cm4gaXNTYW1lTXVsdGlZZWFyVmlldyhcclxuICAgICAgICAgICAgdGhpcy5fYWRhcHRlciwgZGF0ZTEsIGRhdGUyLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhhbmRsZXMga2V5ZG93biBldmVudHMgb24gdGhlIGNhbGVuZGFyIGJvZHkgd2hlbiBjYWxlbmRhciBpcyBpbiBtb250aCB2aWV3LiAqL1xyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bkluTW9udGhWaWV3KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLmFjdGl2ZURhdGUsIC0xKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLmFjdGl2ZURhdGUsIC03KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhckRheXModGhpcy5hY3RpdmVEYXRlLCA3KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMuYWN0aXZlRGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAxIC0gdGhpcy5fYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLmFjdGl2ZURhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2FkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodGhpcy5hY3RpdmVEYXRlKSAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUGFnZVVwJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGV2ZW50LmFsdEtleSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpIDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGV2ZW50LmFsdEtleSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgMSkgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLCAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlRmlsdGVyRm9yVmlld3ModGhpcy5hY3RpdmVEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVNlbGVjdGVkKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJldmVudCBkZWZhdWx0IG9yIGZvY3VzIGFjdGl2ZSBjZWxsIG9uIGtleXMgdGhhdCB3ZSBkb24ndCBleHBsaWNpdGx5IGhhbmRsZS5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgdW5leHBlY3RlZCBkZWZhdWx0IGFjdGlvbnMgc3VjaCBhcyBmb3JtIHN1Ym1pc3Npb24uXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiB0aGUgY2FsZW5kYXIgYm9keSB3aGVuIGNhbGVuZGFyIGlzIGluIHllYXIgdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25JblllYXJWaWV3KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLmFjdGl2ZURhdGUsIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fcHJldk1vbnRoSW5TYW1lQ29sKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX25leHRNb250aEluU2FtZUNvbCh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0hvbWUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLmFjdGl2ZURhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgLXRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRW5kJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIDExIC0gdGhpcy5fYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdQYWdlVXAnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCBldmVudC5hbHRLZXkgPyAtMTAgOiAtMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCBldmVudC5hbHRLZXkgPyAxMCA6IDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICAgICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCh0aGlzLmFjdGl2ZURhdGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmV2ZW50IGRlZmF1bHQgb3IgZm9jdXMgYWN0aXZlIGNlbGwgb24ga2V5cyB0aGF0IHdlIGRvbid0IGV4cGxpY2l0bHkgaGFuZGxlLlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIHRoZSBjYWxlbmRhciBib2R5IHdoZW4gY2FsZW5kYXIgaXMgaW4gbXVsdGkteWVhciB2aWV3LiAqL1xyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2FsZW5kYXJCb2R5S2V5ZG93bkluTXVsdGlZZWFyVmlldyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCAteWVhcnNQZXJSb3cpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLCB5ZWFyc1BlclJvdyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnSG9tZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIC1nZXRBY3RpdmVPZmZzZXQodGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5hY3RpdmVEYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHllYXJzUGVyUGFnZSAtIGdldEFjdGl2ZU9mZnNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlciwgdGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdQYWdlVXAnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSwgZXZlbnQuYWx0S2V5ID8gLXllYXJzUGVyUGFnZSAqIDEwIDogLXllYXJzUGVyUGFnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUGFnZURvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyWWVhcnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSwgZXZlbnQuYWx0S2V5ID8geWVhcnNQZXJQYWdlICogMTAgOiB5ZWFyc1BlclBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICAgICAgICAgIHRoaXMueWVhclNlbGVjdGVkKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIERvbid0IHByZXZlbnQgZGVmYXVsdCBvciBmb2N1cyBhY3RpdmUgY2VsbCBvbiBrZXlzIHRoYXQgd2UgZG9uJ3QgZXhwbGljaXRseSBoYW5kbGUuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIYW5kbGVzIGtleWRvd24gZXZlbnRzIG9uIHRoZSBjYWxlbmRhciBib2R5IHdoZW4gY2FsZW5kYXIgaXMgaW4gbW9udGggdmlldy4gKi9cclxuICAgIHByaXZhdGUgX2hhbmRsZUNhbGVuZGFyQm9keUtleWRvd25JbkNsb2NrVmlldyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuY2xvY2tWaWV3ID09PSAnaG91cicgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3Vycyh0aGlzLmFjdGl2ZURhdGUsIDEpIDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGFwdGVyLmFkZENhbGVuZGFyTWludXRlcyh0aGlzLmFjdGl2ZURhdGUsIHRoaXMudGltZUludGVydmFsKTtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBob3VycyBjaGFuZ2VkIHRoZSBhbS9wbSB3ZSBzaG91bGQgdXBkYXRlIHRoZSBBTS9QTVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBTVBNKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuY2xvY2tWaWV3ID09PSAnaG91cicgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJIb3Vycyh0aGlzLmFjdGl2ZURhdGUsIC0xKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRhcHRlci5hZGRDYWxlbmRhck1pbnV0ZXModGhpcy5hY3RpdmVEYXRlLCAtdGhpcy50aW1lSW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGhvdXJzIGNoYW5nZWQgdGhlIGFtL3BtIHdlIHNob3VsZCB1cGRhdGUgdGhlIEFNL1BNXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFNUE0odGhpcy5hY3RpdmVEYXRlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGltZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsVGltZVNlbGVjdGVkKHRoaXMuYWN0aXZlRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmV2ZW50IGRlZmF1bHQgb3IgZm9jdXMgYWN0aXZlIGNlbGwgb24ga2V5cyB0aGF0IHdlIGRvbid0IGV4cGxpY2l0bHkgaGFuZGxlLlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIHRoZSBkYXRlIGZvciB0aGUgbW9udGggdGhhdCBjb21lcyBiZWZvcmUgdGhlIGdpdmVuIG1vbnRoIGluIHRoZSBzYW1lIGNvbHVtbiBpbiB0aGVcclxuICAgICAqIGNhbGVuZGFyIHRhYmxlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9wcmV2TW9udGhJblNhbWVDb2woZGF0ZTogRCk6IEQge1xyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBtb250aHMgdG8ganVtcCBmb3J3YXJkIGdpdmVuIHRoYXQgdGhlcmUgYXJlIDIgZW1wdHkgc2xvdHMgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICAgIC8vIG9mIGVhY2ggeWVhci5cclxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUpIDw9IDQgPyAtNSA6XHJcbiAgICAgICAgICAgICh0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUpID49IDcgPyAtNyA6IC0xMik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoZGF0ZSwgaW5jcmVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSB0aGUgZGF0ZSBmb3IgdGhlIG1vbnRoIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGdpdmVuIG1vbnRoIGluIHRoZSBzYW1lIGNvbHVtbiBpbiB0aGVcclxuICAgICAqIGNhbGVuZGFyIHRhYmxlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9uZXh0TW9udGhJblNhbWVDb2woZGF0ZTogRCk6IEQge1xyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBtb250aHMgdG8ganVtcCBmb3J3YXJkIGdpdmVuIHRoYXQgdGhlcmUgYXJlIDIgZW1wdHkgc2xvdHMgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICAgIC8vIG9mIGVhY2ggeWVhci5cclxuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSB0aGlzLl9hZGFwdGVyLmdldE1vbnRoKGRhdGUpIDw9IDQgPyA3IDpcclxuICAgICAgICAgICAgKHRoaXMuX2FkYXB0ZXIuZ2V0TW9udGgoZGF0ZSkgPj0gNyA/IDUgOiAxMik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoZGF0ZSwgaW5jcmVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VDYWxlbmRhclN0YXRlKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclN0YXRlID0gZGlyZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgXzJkaWdpdChuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAoJzAwJyArIG4pLnNsaWNlKC0yKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXJcIj5cclxuICBAaWYgKHR5cGUgIT09ICd0aW1lJykge1xyXG4gIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXIteWVhciBoZWFkZXItYnV0dG9uXCJcclxuICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFZpZXcgPT09ICd5ZWFyJyB8fCBjdXJyZW50VmlldyA9PT0gJ211bHRpLXllYXInXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ5ZWFyQnV0dG9uTGFiZWxcIlxyXG4gICAgKGNsaWNrKT1cInllYXJDbGlja2VkKClcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW1cIj57eyB5ZWFyQnV0dG9uVGV4dCB9fTwvc3Bhbj5cclxuICAgIEBpZiAobXVsdGlZZWFyU2VsZWN0b3IgfHwgdHlwZSA9PT0gJ3llYXInKSB7XHJcbiAgICA8c3ZnIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXIteWVhci1kcm9wZG93blwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgIDxwYXRoIGQ9XCJNNywxMEwxMiwxNUwxNywxMEg3WlwiPjwvcGF0aD5cclxuICAgIDwvc3ZnPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuICBAaWYgKHR5cGUgIT09ICd5ZWFyJykge1xyXG4gIDxkaXYgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWhlYWRlci1kYXRlLXRpbWVcIj5cclxuICAgIEBpZiAodHlwZSAhPT0gJ3RpbWUnKSB7XHJcbiAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItaGVhZGVyLWRhdGUgaGVhZGVyLWJ1dHRvblwiXHJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFZpZXcgPT09ICdtb250aCdcIiBbY2xhc3Mubm90LWNsaWNrYWJsZV09XCJ0eXBlID09PSAnbW9udGgnXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXRlQnV0dG9uTGFiZWxcIiAoY2xpY2spPVwiZGF0ZUNsaWNrZWQoKVwiPnt7IGRhdGVCdXR0b25UZXh0IH19PC9kaXY+XHJcbiAgICB9XHJcbiAgICBAaWYgKHR5cGUuZW5kc1dpdGgoJ3RpbWUnKSkge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWhlYWRlci10aW1lXCIgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VmlldyA9PT0gJ2Nsb2NrJ1wiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItaGVhZGVyLWhvdXItbWludXRlLWNvbnRhaW5lciBmbGV4IHBsYWNlLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItaG91cnMgaGVhZGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImNsb2NrVmlldyA9PT0gJ2hvdXInXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJob3VyQnV0dG9uTGFiZWxcIiAoY2xpY2spPVwiaG91cnNDbGlja2VkKClcIj5cclxuICAgICAgICAgIHt7IGhvdXJzQnV0dG9uVGV4dCB9fTwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItaG91ci1taW51dGUtc2VwYXJhdG9yXCI+JiM1ODs8L3NwYW4+XHJcbiAgICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLWhlYWRlci1taW51dGVzIGhlYWRlci1idXR0b25cIlxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjbG9ja1ZpZXcgPT09ICdtaW51dGUnXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJtaW51dGVCdXR0b25MYWJlbFwiIChjbGljayk9XCJtaW51dGVzQ2xpY2tlZCgpXCI+e3tcclxuICAgICAgICAgIG1pbnV0ZXNCdXR0b25UZXh0IH19PC9kaXY+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgQGlmICh0d2VsdmVob3VyKSB7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItYW1wbS1jb250YWluZXIgZmxleCBwbGFjZS1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXItY2FsZW5kYXItaGVhZGVyLWFtcG0gaGVhZGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQU1cIiBbY2xhc3MuYWN0aXZlXT1cIkFNUE0gPT09ICdBTSdcIiAoY2xpY2spPVwiYW1wbUNsaWNrZWQoJ0FNJylcIj5BTTwvZGl2PlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1oZWFkZXItYW1wbSBoZWFkZXItYnV0dG9uXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJQTVwiIFtjbGFzcy5hY3RpdmVdPVwiQU1QTSA9PT0gJ1BNJ1wiIChjbGljayk9XCJhbXBtQ2xpY2tlZCgnUE0nKVwiPlBNPC9kaXY+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1jb250ZW50XCIgW25nQ2xhc3NdPVwieydmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyJzogY3VycmVudFZpZXc9PT0nY2xvY2snfVwiPlxyXG4gIEBpZiAoY3VycmVudFZpZXcgPT09ICdtb250aCcgfHwgY3VycmVudFZpZXcgPT09ICd5ZWFyJyB8fCBjdXJyZW50VmlldyA9PT0gJ211bHRpLXllYXInKSB7XHJcbiAgPGRpdiBjbGFzcz1cImNtYXQtZGF0ZXRpbWVwaWNrZXJtb250aC1jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY21hdC1kYXRldGltZXBpY2tlci1jYWxlbmRhci1jb250cm9sc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvblwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwcmV2aW91c0VuYWJsZWQoKVwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiIXByZXZpb3VzRW5hYmxlZCgpXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZCdXR0b25MYWJlbFwiIChjbGljayk9XCJwcmV2aW91c0NsaWNrZWQoKVwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyelwiPjwvcGF0aD5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLXBlcmlvZC1idXR0b24gdGV4dC1kZWZhdWx0IGZvbnQtbWVkaXVtXCIgW0BzbGlkZUNhbGVuZGFyXT1cImNhbGVuZGFyU3RhdGVcIlxyXG4gICAgICAgIChAc2xpZGVDYWxlbmRhci5kb25lKT1cImNhbGVuZGFyU3RhdGVEb25lKClcIj5cclxuICAgICAgICA8c3Ryb25nPnt7IHllYXJQZXJpb2RUZXh0IH19PC9zdHJvbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjbWF0LWRhdGV0aW1lcGlja2VyLWNhbGVuZGFyLW5leHQtYnV0dG9uXCJcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIW5leHRFbmFibGVkKClcIiBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIiFuZXh0RW5hYmxlZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJuZXh0QnV0dG9uTGFiZWxcIlxyXG4gICAgICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZCgpXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02elwiPjwvcGF0aD5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBzd2l0Y2ggKGN1cnJlbnRWaWV3KSB7XHJcbiAgQGNhc2UgKCdtb250aCcpIHtcclxuICA8Y21hdC1kYXRldGltZXBpY2tlci1tb250aC12aWV3IFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyRm9yVmlld3NcIlxyXG4gICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkIVwiIFt0eXBlXT1cInR5cGVcIiAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiIChzZWxlY3RlZENoYW5nZSk9XCJkYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gIDwvY21hdC1kYXRldGltZXBpY2tlci1tb250aC12aWV3PlxyXG4gIH1cclxuICBAY2FzZSAoJ3llYXInKSB7XHJcbiAgPGNtYXQtZGF0ZXRpbWVwaWNrZXIteWVhci12aWV3IFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyRm9yVmlld3NcIlxyXG4gICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkIVwiIFt0eXBlXT1cInR5cGVcIiAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiIChzZWxlY3RlZENoYW5nZSk9XCJtb250aFNlbGVjdGVkKCRldmVudClcIj5cclxuICA8L2NtYXQtZGF0ZXRpbWVwaWNrZXIteWVhci12aWV3PlxyXG4gIH1cclxuICBAY2FzZSAoJ211bHRpLXllYXInKSB7XHJcbiAgPGNtYXQtZGF0ZXRpbWVwaWNrZXItbXVsdGkteWVhci12aWV3IFthY3RpdmVEYXRlXT1cImFjdGl2ZURhdGVcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyRm9yVmlld3NcIlxyXG4gICAgW21heERhdGVdPVwibWF4RGF0ZVwiIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbc2VsZWN0ZWRdPVwic2VsZWN0ZWQhXCIgW3R5cGVdPVwidHlwZVwiXHJcbiAgICAodXNlclNlbGVjdGlvbik9XCJ1c2VyU2VsZWN0ZWQoKVwiIChzZWxlY3RlZENoYW5nZSk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gIDwvY21hdC1kYXRldGltZXBpY2tlci1tdWx0aS15ZWFyLXZpZXc+XHJcbiAgfVxyXG4gIEBkZWZhdWx0IHtcclxuICBAaWYgKHRpbWVJbnB1dCkge1xyXG4gIDxjbWF0LWRhdGV0aW1lcGlja2VyLXRpbWUgW0FNUE1dPVwiQU1QTVwiIFtjbG9ja1ZpZXddPVwiY2xvY2tWaWV3XCJcclxuICAgIFt0d2VsdmVob3VyXT1cInR3ZWx2ZWhvdXJcIiBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW2ludGVydmFsXT1cInRpbWVJbnRlcnZhbFwiIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgW21pbkRhdGVdPVwibWluRGF0ZVwiIFtzZWxlY3RlZF09XCJhY3RpdmVEYXRlXCIgKHVzZXJTZWxlY3Rpb24pPVwidXNlclNlbGVjdGVkKClcIiAoYWN0aXZlRGF0ZUNoYW5nZSk9XCJvbkFjdGl2ZURhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwidGltZVNlbGVjdGVkKCRldmVudClcIiAoYW1wbUNoYW5nZSk9XCJhbXBtQ2xpY2tlZCgkZXZlbnQpXCIgKGNsb2NrVmlld0NoYW5nZSk9XCJjbG9ja1ZpZXcgPSAkZXZlbnRcIj5cclxuICA8L2NtYXQtZGF0ZXRpbWVwaWNrZXItdGltZT5cclxuICB9IEBlbHNlIHtcclxuICA8Y21hdC1kYXRldGltZXBpY2tlci1jbG9jayBbZGF0ZUZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW2ludGVydmFsXT1cInRpbWVJbnRlcnZhbFwiXHJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiIFtzZWxlY3RlZF09XCJhY3RpdmVEYXRlXCIgW3N0YXJ0Vmlld109XCJjbG9ja1ZpZXdcIlxyXG4gICAgW3R3ZWx2ZWhvdXJdPVwidHdlbHZlaG91clwiICh1c2VyU2VsZWN0aW9uKT1cInVzZXJTZWxlY3RlZCgpXCIgKGFjdGl2ZURhdGVDaGFuZ2UpPVwib25BY3RpdmVEYXRlQ2hhbmdlKCRldmVudClcIiAoc2VsZWN0ZWRDaGFuZ2UpPVwiZGlhbFRpbWVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgPC9jbWF0LWRhdGV0aW1lcGlja2VyLWNsb2NrPlxyXG4gIH1cclxuICB9XHJcbiAgfVxyXG48L2Rpdj4iXX0=