@ts-core/angular 15.0.1 → 15.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/VICommonModule.d.ts +10 -13
  2. package/application/ApplicationComponent.d.ts +1 -3
  3. package/directive/ResizeDirective.d.ts +2 -2
  4. package/directive/SelectOnFocusDirective.d.ts +1 -1
  5. package/esm2020/VICommonModule.mjs +4 -14
  6. package/esm2020/application/ApplicationComponent.mjs +2 -3
  7. package/esm2020/application/MessageBaseComponent.mjs +1 -1
  8. package/esm2020/directive/AutoScrollBottomDirective.mjs +2 -2
  9. package/esm2020/directive/ResizeDirective.mjs +5 -5
  10. package/esm2020/directive/SelectOnFocusDirective.mjs +2 -2
  11. package/esm2020/language/LanguageModule.mjs +1 -8
  12. package/esm2020/manager/ResizeManager.mjs +3 -11
  13. package/esm2020/pipe/CamelCasePipe.mjs +4 -12
  14. package/esm2020/pipe/StartCasePipe.mjs +4 -5
  15. package/esm2020/pipe/TimePipe.mjs +3 -2
  16. package/esm2020/pipe/TruncatePipe.mjs +3 -5
  17. package/esm2020/public-api.mjs +1 -68
  18. package/esm2020/service/PipeBaseService.mjs +1 -1
  19. package/esm2020/theme/ThemeAssetDirective.mjs +1 -1
  20. package/esm2020/theme/ThemeStyleDirective.mjs +2 -2
  21. package/esm2020/util/ViewUtil.mjs +1 -1
  22. package/fesm2015/ts-core-angular.mjs +3091 -7551
  23. package/fesm2015/ts-core-angular.mjs.map +1 -1
  24. package/fesm2020/ts-core-angular.mjs +3057 -7515
  25. package/fesm2020/ts-core-angular.mjs.map +1 -1
  26. package/htdocs/common.js +3 -3
  27. package/manager/ResizeManager.d.ts +1 -1
  28. package/package.json +3 -10
  29. package/pipe/CamelCasePipe.d.ts +0 -1
  30. package/public-api.d.ts +0 -60
  31. package/style/_core.scss +120 -0
  32. package/style/_filter.scss +14 -0
  33. package/style/_mouse.scss +27 -0
  34. package/style/_scroll.scss +20 -0
  35. package/style/_text.scss +20 -0
  36. package/application/ShellBaseComponent.d.ts +0 -20
  37. package/bottomSheet/BottomSheetImpl.d.ts +0 -77
  38. package/bottomSheet/BottomSheetModule.d.ts +0 -13
  39. package/bottomSheet/BottomSheetService.d.ts +0 -31
  40. package/bottomSheet/component/BottomSheetBaseComponent.d.ts +0 -13
  41. package/component/VIComponentModule.d.ts +0 -33
  42. package/component/cdk-table/CdkTableBaseComponent.d.ts +0 -60
  43. package/component/cdk-table/CdkTableDataSource.d.ts +0 -13
  44. package/component/cdk-table/CdkTableFilterableMapCollection.d.ts +0 -14
  45. package/component/cdk-table/CdkTablePaginableBookmarkMapCollection.d.ts +0 -11
  46. package/component/cdk-table/CdkTablePaginableMapCollection.d.ts +0 -13
  47. package/component/cdk-table/cdk-table-filterable/cdk-table-filterable.component.d.ts +0 -9
  48. package/component/cdk-table/cdk-table-paginable/cdk-table-paginable.component.d.ts +0 -18
  49. package/component/cdk-table/cdk-table-paginable-bookmark/cdk-table-paginable-bookmark.component.d.ts +0 -9
  50. package/component/cdk-table/cell/CdkTableCellClassNamePipe.d.ts +0 -8
  51. package/component/cdk-table/cell/CdkTableCellStyleNamePipe.d.ts +0 -10
  52. package/component/cdk-table/cell/CdkTableCellValuePipe.d.ts +0 -17
  53. package/component/cdk-table/cell/CdkTableCellValuePipePure.d.ts +0 -8
  54. package/component/cdk-table/column/CdkTableColumnClassNamePipe.d.ts +0 -8
  55. package/component/cdk-table/column/CdkTableColumnStyleNamePipe.d.ts +0 -10
  56. package/component/cdk-table/column/ICdkTableColumn.d.ts +0 -25
  57. package/component/cdk-table/row/CdkTableRowClassNamePipe.d.ts +0 -8
  58. package/component/cdk-table/row/CdkTableRowStyleNamePipe.d.ts +0 -10
  59. package/component/cdk-table/row/ICdkTableRow.d.ts +0 -8
  60. package/component/language/language-selector/language-selector.component.d.ts +0 -19
  61. package/component/menu-list/menu-list.component.d.ts +0 -9
  62. package/component/select-list/select-list.component.d.ts +0 -9
  63. package/component/tab-group/tab-group.component.d.ts +0 -16
  64. package/directive/MenuTriggerForDirective.d.ts +0 -11
  65. package/error/WindowClosedError.d.ts +0 -6
  66. package/esm2020/application/ShellBaseComponent.mjs +0 -78
  67. package/esm2020/bottomSheet/BottomSheetImpl.mjs +0 -273
  68. package/esm2020/bottomSheet/BottomSheetModule.mjs +0 -37
  69. package/esm2020/bottomSheet/BottomSheetService.mjs +0 -107
  70. package/esm2020/bottomSheet/component/BottomSheetBaseComponent.mjs +0 -59
  71. package/esm2020/component/VIComponentModule.mjs +0 -117
  72. package/esm2020/component/cdk-table/CdkTableBaseComponent.mjs +0 -192
  73. package/esm2020/component/cdk-table/CdkTableDataSource.mjs +0 -58
  74. package/esm2020/component/cdk-table/CdkTableFilterableMapCollection.mjs +0 -94
  75. package/esm2020/component/cdk-table/CdkTablePaginableBookmarkMapCollection.mjs +0 -49
  76. package/esm2020/component/cdk-table/CdkTablePaginableMapCollection.mjs +0 -57
  77. package/esm2020/component/cdk-table/cdk-table-filterable/cdk-table-filterable.component.mjs +0 -37
  78. package/esm2020/component/cdk-table/cdk-table-paginable/cdk-table-paginable.component.mjs +0 -65
  79. package/esm2020/component/cdk-table/cdk-table-paginable-bookmark/cdk-table-paginable-bookmark.component.mjs +0 -37
  80. package/esm2020/component/cdk-table/cell/CdkTableCellClassNamePipe.mjs +0 -25
  81. package/esm2020/component/cdk-table/cell/CdkTableCellStyleNamePipe.mjs +0 -22
  82. package/esm2020/component/cdk-table/cell/CdkTableCellValuePipe.mjs +0 -77
  83. package/esm2020/component/cdk-table/cell/CdkTableCellValuePipePure.mjs +0 -22
  84. package/esm2020/component/cdk-table/column/CdkTableColumnClassNamePipe.mjs +0 -22
  85. package/esm2020/component/cdk-table/column/CdkTableColumnStyleNamePipe.mjs +0 -22
  86. package/esm2020/component/cdk-table/column/ICdkTableColumn.mjs +0 -2
  87. package/esm2020/component/cdk-table/row/CdkTableRowClassNamePipe.mjs +0 -22
  88. package/esm2020/component/cdk-table/row/CdkTableRowStyleNamePipe.mjs +0 -22
  89. package/esm2020/component/cdk-table/row/ICdkTableRow.mjs +0 -2
  90. package/esm2020/component/language/language-selector/language-selector.component.mjs +0 -79
  91. package/esm2020/component/menu-list/menu-list.component.mjs +0 -16
  92. package/esm2020/component/select-list/select-list.component.mjs +0 -16
  93. package/esm2020/component/tab-group/tab-group.component.mjs +0 -71
  94. package/esm2020/directive/MenuTriggerForDirective.mjs +0 -53
  95. package/esm2020/error/WindowClosedError.mjs +0 -19
  96. package/esm2020/language/LanguageMatPaginatorIntl.mjs +0 -62
  97. package/esm2020/language/LanguageMomentDateAdapter.mjs +0 -13
  98. package/esm2020/notification/INotification.mjs +0 -7
  99. package/esm2020/notification/INotificationContent.mjs +0 -132
  100. package/esm2020/notification/NotificationConfig.mjs +0 -16
  101. package/esm2020/notification/NotificationFactory.mjs +0 -19
  102. package/esm2020/notification/NotificationImpl.mjs +0 -139
  103. package/esm2020/notification/NotificationModule.mjs +0 -53
  104. package/esm2020/notification/NotificationProperties.mjs +0 -2
  105. package/esm2020/notification/NotificationService.mjs +0 -239
  106. package/esm2020/notification/component/NotificationBaseComponent.mjs +0 -4
  107. package/esm2020/notification/component/NotificationQuestionBaseComponent.mjs +0 -50
  108. package/esm2020/notification/component/notification/notification.component.mjs +0 -61
  109. package/esm2020/service/BootstrapBreakpointService.mjs +0 -116
  110. package/esm2020/window/IWindow.mjs +0 -32
  111. package/esm2020/window/IWindowContent.mjs +0 -132
  112. package/esm2020/window/WindowBase.mjs +0 -168
  113. package/esm2020/window/WindowConfig.mjs +0 -232
  114. package/esm2020/window/WindowFactory.mjs +0 -27
  115. package/esm2020/window/WindowImpl.mjs +0 -361
  116. package/esm2020/window/WindowModule.mjs +0 -58
  117. package/esm2020/window/WindowProperties.mjs +0 -2
  118. package/esm2020/window/WindowService.mjs +0 -366
  119. package/esm2020/window/WindowServiceEvent.mjs +0 -9
  120. package/esm2020/window/component/WindowBaseComponent.mjs +0 -75
  121. package/esm2020/window/component/WindowDragAreaDirective.mjs +0 -97
  122. package/esm2020/window/component/WindowDragable.mjs +0 -69
  123. package/esm2020/window/component/WindowElement.mjs +0 -95
  124. package/esm2020/window/component/WindowQuestionBaseComponent.mjs +0 -17
  125. package/esm2020/window/component/WindowResizeable.mjs +0 -88
  126. package/esm2020/window/component/window-close-element/window-close-element.component.mjs +0 -55
  127. package/esm2020/window/component/window-expand-element/window-expand-element.component.mjs +0 -56
  128. package/esm2020/window/component/window-minimize-element/window-minimize-element.component.mjs +0 -75
  129. package/esm2020/window/component/window-question/window-question.component.mjs +0 -50
  130. package/esm2020/window/component/window-resize-element/window-resize-element.component.mjs +0 -56
  131. package/language/LanguageMatPaginatorIntl.d.ts +0 -20
  132. package/language/LanguageMomentDateAdapter.d.ts +0 -5
  133. package/notification/INotification.d.ts +0 -26
  134. package/notification/INotificationContent.d.ts +0 -31
  135. package/notification/NotificationConfig.d.ts +0 -13
  136. package/notification/NotificationFactory.d.ts +0 -11
  137. package/notification/NotificationImpl.d.ts +0 -38
  138. package/notification/NotificationModule.d.ts +0 -18
  139. package/notification/NotificationProperties.d.ts +0 -9
  140. package/notification/NotificationService.d.ts +0 -56
  141. package/notification/component/NotificationBaseComponent.d.ts +0 -3
  142. package/notification/component/NotificationQuestionBaseComponent.d.ts +0 -10
  143. package/notification/component/notification/notification.component.d.ts +0 -14
  144. package/service/BootstrapBreakpointService.d.ts +0 -45
  145. package/style/mat/bootstrap/_background.scss +0 -10
  146. package/style/mat/bootstrap/_border.scss +0 -207
  147. package/style/mat/bootstrap/_text.scss +0 -43
  148. package/style/mat/bootstrap/_variables.scss +0 -8
  149. package/style/mat/vi-mat-bootstrap.scss +0 -50
  150. package/style/mat/vi-mat.scss +0 -570
  151. package/style/mixin.scss +0 -69
  152. package/style/mouse.scss +0 -47
  153. package/window/IWindow.d.ts +0 -41
  154. package/window/IWindowContent.d.ts +0 -34
  155. package/window/WindowBase.d.ts +0 -33
  156. package/window/WindowConfig.d.ts +0 -64
  157. package/window/WindowFactory.d.ts +0 -12
  158. package/window/WindowImpl.d.ts +0 -89
  159. package/window/WindowModule.d.ts +0 -20
  160. package/window/WindowProperties.d.ts +0 -9
  161. package/window/WindowService.d.ts +0 -71
  162. package/window/WindowServiceEvent.d.ts +0 -7
  163. package/window/component/WindowBaseComponent.d.ts +0 -20
  164. package/window/component/WindowDragAreaDirective.d.ts +0 -19
  165. package/window/component/WindowDragable.d.ts +0 -13
  166. package/window/component/WindowElement.d.ts +0 -22
  167. package/window/component/WindowQuestionBaseComponent.d.ts +0 -5
  168. package/window/component/WindowResizeable.d.ts +0 -10
  169. package/window/component/window-close-element/window-close-element.component.d.ts +0 -12
  170. package/window/component/window-expand-element/window-expand-element.component.d.ts +0 -12
  171. package/window/component/window-minimize-element/window-minimize-element.component.d.ts +0 -15
  172. package/window/component/window-question/window-question.component.d.ts +0 -12
  173. package/window/component/window-resize-element/window-resize-element.component.d.ts +0 -12
@@ -575,4 +575,4 @@ export class ViewUtil {
575
575
  // --------------------------------------------------------------------------
576
576
  ViewUtil._renderer = null;
577
577
  ViewUtil._document = null;
578
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9WaWV3VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThELGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sUUFBUTtJQVVWLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWdCO1FBQ3ZDLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUIsT0FBTztTQUNWO1FBQ0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hFLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWU7UUFDdEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxNQUFNO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLEVBQUU7SUFD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LGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDN0M7U0FDSjtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXlCLEVBQUUsV0FBcUI7UUFDeEUsSUFBSSxXQUFXLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtnQkFDbEIsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjthQUNKO1NBQ0o7UUFDRCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7QUFub0JELDZFQUE2RTtBQUM3RSxFQUFFO0FBQ0YsWUFBWTtBQUNaLEVBQUU7QUFDRiw2RUFBNkU7QUFFOUQsa0JBQVMsR0FBYyxJQUFJLENBQUM7QUFDNUIsa0JBQVMsR0FBYSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgUmVuZGVyZXIyLCBSZW5kZXJlclN0eWxlRmxhZ3MyLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFeHRlbmRlZEVycm9yIH0gZnJvbSAnQHRzLWNvcmUvY29tbW9uJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIFZpZXdVdGlsIHtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbnN0YW50c1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByaXZhdGUgc3RhdGljIF9yZW5kZXJlcjogUmVuZGVyZXIyID0gbnVsbDtcbiAgICBwcml2YXRlIHN0YXRpYyBfZG9jdW1lbnQ6IERvY3VtZW50ID0gbnVsbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHJlbmRlcmVyKCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGlmIChfLmlzTmlsKFZpZXdVdGlsLl9yZW5kZXJlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeHRlbmRlZEVycm9yKGBWaWV3VXRpbCBpcyBub3QgaW5pdGlhbGl6ZWQ6IHJlbmRlcmVyIGluIG5pbGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBWaWV3VXRpbC5fcmVuZGVyZXI7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IHJlbmRlcmVyKHZhbHVlOiBSZW5kZXJlcjIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBWaWV3VXRpbC5fcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5fcmVuZGVyZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudCB7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChWaWV3VXRpbC5fZG9jdW1lbnQpID8gVmlld1V0aWwuX2RvY3VtZW50IDogZG9jdW1lbnQ7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0IGRvY3VtZW50KHZhbHVlOiBEb2N1bWVudCkge1xuICAgICAgICBWaWV3VXRpbC5fZG9jdW1lbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCB3aW5kb3coKTogV2luZG93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRQcml2YXRlIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5kb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENvbW1vbiBQcm9wZXJ0aWVzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZUVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50ID0gSFRNTEVsZW1lbnQ+KGVsZW1lbnQ6IElWaWV3RWxlbWVudDxUPik6IFQge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCBhcyBUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIV8uaXNOaWwoZWxlbWVudCkgPyBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlQmFzZTY0KGVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQgfCBIVE1MQ2FudmFzRWxlbWVudCB8IEhUTUxWaWRlb0VsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgY2FudmFzID0gVmlld1V0aWwuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KGNhbnZhcywgJ3dpZHRoJywgZWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KGNhbnZhcywgJ2hlaWdodCcsIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGVsZW1lbnQsIDAsIDAsIGVsZW1lbnQub2Zmc2V0V2lkdGgsIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIHZhbHVlID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0Q29udGVudChjb250YWluZXI6IElWaWV3RWxlbWVudCwgaXNOZWVkQ29weVRvQ2xpcGJvYXJkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBpc1dhc0Rpc2FibGVkID0gY29udGFpbmVyLmRpc2FibGVkO1xuICAgICAgICAgICAgaWYgKGlzV2FzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRhaW5lci5zZWxlY3QoKTtcbiAgICAgICAgICAgIGlmIChpc05lZWRDb3B5VG9DbGlwYm9hcmQpIHtcbiAgICAgICAgICAgICAgICBWaWV3VXRpbC5jb3B5VG9DbGlwYm9hcmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1dhc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSBWaWV3VXRpbC53aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICAgICAgICAgIGxldCByYW5nZSA9IFZpZXdVdGlsLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgICBpZiAoIV8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICAgICAgaWYgKGlzTmVlZENvcHlUb0NsaXBib2FyZCkge1xuICAgICAgICAgICAgICAgIFZpZXdVdGlsLmNvcHlUb0NsaXBib2FyZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRCYWNrZ3JvdW5kKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBpbWFnZTogc3RyaW5nLCByZXBlYXQ6IHN0cmluZyA9ICdyZXBlYXQnKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKGltYWdlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlU3R5bGUoY29udGFpbmVyLCAnYmFja2dyb3VuZEltYWdlJyk7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVTdHlsZShjb250YWluZXIsICdiYWNrZ3JvdW5kUmVwZWF0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWltYWdlLmluY2x1ZGVzKCd1cmwoJykpIHtcbiAgICAgICAgICAgIGltYWdlID0gJ3VybCgnICsgaW1hZ2UgKyAnKSc7XG4gICAgICAgIH1cblxuICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdiYWNrZ3JvdW5kSW1hZ2UnLCBpbWFnZSk7XG4gICAgICAgIFZpZXdVdGlsLnNldFN0eWxlKGNvbnRhaW5lciwgJ2JhY2tncm91bmRSZXBlYXQnLCByZXBlYXQpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q2hpbGQgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRWxlbWVudDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGNsYXNzTmFtZT86IHN0cmluZywgaW5uZXJIVE1MPzogc3RyaW5nKTogVCB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gVmlld1V0aWwucmVuZGVyZXIuY3JlYXRlRWxlbWVudChuYW1lKTtcbiAgICAgICAgaWYgKCFfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eShlbGVtZW50LCAnY2xhc3NOYW1lJywgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNOaWwoaW5uZXJIVE1MKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0UHJvcGVydHkoZWxlbWVudCwgJ2lubmVySFRNTCcsIGlubmVySFRNTCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhcHBlbmRDaGlsZChwYXJlbnQ6IGFueSwgY2hpbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwocGFyZW50KSAmJiAhXy5pc05pbChjaGlsZCkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDaGlsZChwYXJlbnQ6IGFueSwgY2hpbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwocGFyZW50KSAmJiAhXy5pc05pbChjaGlsZCkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHBhcmVudCwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0b2dnbGVDaGlsZChjb250YWluZXI6IE5vZGUsIGNoaWxkOiBOb2RlLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaXNDb250YWlucyA9IGNvbnRhaW5lci5jb250YWlucyhjaGlsZCk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhaXNDb250YWlucykge1xuICAgICAgICAgICAgVmlld1V0aWwuYXBwZW5kQ2hpbGQoY29udGFpbmVyLCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSAmJiBpc0NvbnRhaW5zKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVDaGlsZChjb250YWluZXIsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0U2l6ZSBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdGFnZVdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBWaWV3VXRpbC53aW5kb3cuaW5uZXJXaWR0aCB8fCBWaWV3VXRpbC5kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0U3RhZ2VIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFZpZXdVdGlsLndpbmRvdy5pbm5lckhlaWdodCB8fCBWaWV3VXRpbC5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENhbnZhc0NvbnRleHQyZChjb250YWluZXI6IElWaWV3RWxlbWVudDxIVE1MQ2FudmFzRWxlbWVudD4sIG9wdGlvbnM/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyk6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB7XG4gICAgICAgIGxldCBjYW52YXMgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRCb3VuZGluZ1JlY3RhbmdsZShjb250YWluZXI6IElWaWV3RWxlbWVudCk6IERPTVJlY3Qge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSB8fCBfLmlzTmlsKGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IE5hTixcbiAgICAgICAgICAgICAgICB5OiBOYU4sXG4gICAgICAgICAgICAgICAgd2lkdGg6IE5hTixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IE5hTixcbiAgICAgICAgICAgICAgICB0b3A6IE5hTixcbiAgICAgICAgICAgICAgICByaWdodDogTmFOLFxuICAgICAgICAgICAgICAgIGxlZnQ6IE5hTixcbiAgICAgICAgICAgICAgICBib3R0b206IE5hTlxuICAgICAgICAgICAgfSBhcyBET01SZWN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRXaWR0aChjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnd2lkdGgnKSk7XG4gICAgICAgIGlmIChfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBWaWV3VXRpbC5nZXRCb3VuZGluZ1JlY3RhbmdsZShjb250YWluZXIpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBjb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0V2lkdGgoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHZhbHVlOiBudW1iZXIsIGlzTmVlZENoZWNrTGltaXRzOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSB8fCBfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNOZWVkQ2hlY2tMaW1pdHMgJiZcbiAgICAgICAgICAgICh2YWx1ZSA8IFZpZXdVdGlsLmdldE1pbldpZHRoKGNvbnRhaW5lcikgfHwgdmFsdWUgPiBWaWV3VXRpbC5nZXRNYXhXaWR0aChjb250YWluZXIpIHx8IHZhbHVlID09PSBWaWV3VXRpbC5nZXRXaWR0aChjb250YWluZXIpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIFZpZXdVdGlsLnNldFN0eWxlKGNvbnRhaW5lciwgJ3dpZHRoJywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXhXaWR0aChjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICdtYXhXaWR0aCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNaW5XaWR0aChjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICdtaW5XaWR0aCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SGVpZ2h0KGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ2hlaWdodCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFZpZXdVdGlsLmdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcikuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBzZXRIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHZhbHVlOiBudW1iZXIsIGlzTmVlZENoZWNrTGltaXRzOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSB8fCBfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTmVlZENoZWNrTGltaXRzICYmXG4gICAgICAgICAgICAodmFsdWUgPCBWaWV3VXRpbC5nZXRNaW5IZWlnaHQoY29udGFpbmVyKSB8fCB2YWx1ZSA+IFZpZXdVdGlsLmdldE1heEhlaWdodChjb250YWluZXIpIHx8IHZhbHVlID09PSBWaWV3VXRpbC5nZXRIZWlnaHQoY29udGFpbmVyKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnaGVpZ2h0JywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF4SGVpZ2h0KGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21heEhlaWdodCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWluSGVpZ2h0KGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21pbkhlaWdodCcpKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNpemUoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBpc05lZWRDaGVja0xpbWl0czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBWaWV3VXRpbC5zZXRXaWR0aChjb250YWluZXIsIHdpZHRoLCBpc05lZWRDaGVja0xpbWl0cyk7XG4gICAgICAgIFZpZXdVdGlsLnNldEhlaWdodChjb250YWluZXIsIGhlaWdodCwgaXNOZWVkQ2hlY2tMaW1pdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0WChjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICdsZWZ0JykpO1xuICAgICAgICByZXR1cm4gXy5pc05hTih2YWx1ZSkgPyAwIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRYKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpICYmICFfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnbGVmdCcsIHZhbHVlICsgJ3B4Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAndG9wJykpO1xuICAgICAgICByZXR1cm4gXy5pc05hTih2YWx1ZSkgPyAwIDogdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgc2V0WShjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwoY29udGFpbmVyKSAmJiAhXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFN0eWxlKGNvbnRhaW5lciwgJ3RvcCcsIHZhbHVlICsgJ3B4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBtb3ZlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBWaWV3VXRpbC5zZXRYKGNvbnRhaW5lciwgeCk7XG4gICAgICAgIFZpZXdVdGlsLnNldFkoY29udGFpbmVyLCB5KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdEZvY3VzIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIGZvY3VzSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGxldCBjYXJldEluZGV4ID0gMDtcbiAgICAgICAgaWYgKCFfLmlzTmlsKGlucHV0LnZhbHVlKSkge1xuICAgICAgICAgICAgY2FyZXRJbmRleCA9IE1hdGgubWF4KDAsIGlucHV0LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShjYXJldEluZGV4LCBjYXJldEluZGV4KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdENsYXNzZXMgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkQ2xhc3MoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoIV8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuYWRkQ2xhc3MoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkQ2xhc3Nlcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZXM6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KG5hbWVzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChuYW1lID0+IFZpZXdVdGlsLmFkZENsYXNzKGNvbnRhaW5lciwgbmFtZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlQ2xhc3MoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoIV8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlQ2xhc3Nlcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZXM6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KG5hbWVzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChuYW1lID0+IFZpZXdVdGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgbmFtZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaGFzQ2xhc3MoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICByZXR1cm4gIV8uaXNOaWwoY29udGFpbmVyKSA/IGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMobmFtZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvZ2dsZUNsYXNzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgVmlld1V0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgbmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvZ2dsZUNsYXNzZXMoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5hZGRDbGFzc2VzKGNvbnRhaW5lciwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVDbGFzc2VzKGNvbnRhaW5lciwgbmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5KGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChjb250YWluZXIpID8gY29udGFpbmVyW25hbWVdIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFByb3BlcnR5KGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnNldFByb3BlcnR5KGNvbnRhaW5lciwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlUHJvcGVydHkoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlUHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBWaWV3VXRpbC5yZW1vdmVBdHRyaWJ1dGUoY29udGFpbmVyLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZUF0dHJpYnV0ZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSB8fCBfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoY29udGFpbmVyLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldEF0dHJpYnV0ZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSB8fCBfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNOaWwodmFsdWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoY29udGFpbmVyLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVBdHRyaWJ1dGUoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0U3R5bGUoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChuYW1lKSB8fCBfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250YWluZXIuc3R5bGVbbmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRTdHlsZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBmbGFncz86IFJlbmRlcmVyU3R5bGVGbGFnczIpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCBuYW1lKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuc2V0U3R5bGUoY29udGFpbmVyLCBuYW1lLCB2YWx1ZSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVTdHlsZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nLCBmbGFncz86IFJlbmRlcmVyU3R5bGVGbGFnczIpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNvbnRhaW5lciwgbmFtZSwgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0VmlkZW8gTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlVmlkZW8oaXNNdXRlOiBib29sZWFuID0gdHJ1ZSwgaXNJbmxpbmU6IGJvb2xlYW4gPSBmYWxzZSk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgICAgICBsZXQgdmlkZW8gPSBWaWV3VXRpbC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eSh2aWRlbywgJ2F1dG9wbGF5JywgdHJ1ZSk7XG4gICAgICAgIGlmIChpc011dGUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFZpZGVvTXV0ZVBhcmFtZXRlcnModmlkZW8sIGlzTXV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5saW5lKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRWaWRlb0lubGluZVBhcmFtZXRlcnModmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWRlbztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFZpZGVvTXV0ZVBhcmFtZXRlcnModmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGlzTXV0ZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgdmlkZW8ubXV0ZWQgPSB2aWRlby5kZWZhdWx0TXV0ZWQgPSBpc011dGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFZpZGVvSW5saW5lUGFyYW1ldGVycyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBWaWV3VXRpbC5zZXRBdHRyaWJ1dGUodmlkZW8sICd3ZWJraXQtcGxheXNpbmxpbmUnLCAxKTtcbiAgICAgICAgVmlld1V0aWwuc2V0QXR0cmlidXRlKHZpZGVvLCAncGxheXNpbmxpbmUnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFZpZGVvRXJyb3IodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICBpZiAoXy5pc05pbCh2aWRlbykgfHwgXy5pc05pbCh2aWRlby5lcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVycm9yOiBNZWRpYUVycm9yID0gdmlkZW8uZXJyb3I7XG4gICAgICAgIGxldCB2YWx1ZSA9ICdWaWRlbyBlcnJvciAnICsgdmlkZW8uc3JjICsgJywgJztcbiAgICAgICAgc3dpdGNoIChlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX0FCT1JURUQ6XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ21lZGlhIGFib3J0ZWQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBNZWRpYUVycm9yLk1FRElBX0VSUl9ERUNPREU6XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ2Vycm9yIHRvIGRlY29kZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX05FVFdPUks6XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJ25ldHdvcmsgZXJyb3InO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBNZWRpYUVycm9yLk1FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRDpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnc291cmNlIG5vdCBzdXBwb3J0ZWQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHBsYXlWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXy5pc05pbCh2aWRlbykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB2aWRlby5wbGF5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBwbGF5QXVkaW8oYXVkaW86IEhUTUxBdWRpb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoYXVkaW8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF1ZGlvLnBsYXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHBhdXNlVmlkZW8odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNWaWRlb1BsYXlpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKHZpZGVvKSA/ICF2aWRlby5wYXVzZWQgJiYgIXZpZGVvLmVuZGVkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBsb2FkVmlkZW8odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgdmlkZW8ubG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdG9wVmlkZW9JZk5lZWQodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKHZpZGVvKSAmJiAoIV8uaXNOaWwodmlkZW8uc3JjKSB8fCAhXy5pc05pbCh2aWRlby5zcmNPYmplY3QpKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc3RvcFZpZGVvKHZpZGVvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3RvcFZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZGVvLnNyY09iamVjdCBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICBsZXQgdHJhY2tzID0gdmlkZW8uc3JjT2JqZWN0LmdldFRyYWNrcygpO1xuICAgICAgICAgICAgdHJhY2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpZGVvLnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgdmlkZW8ucGF1c2UoKTtcbiAgICAgICAgdmlkZW8uc3JjID0gJyc7XG4gICAgICAgIHZpZGVvLmxvYWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGRpc3Bvc2VWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBWaWV3VXRpbC5zdG9wVmlkZW8odmlkZW8pO1xuICAgICAgICBWaWV3VXRpbC5yZW1vdmVDaGlsZCh2aWRlby5wYXJlbnROb2RlLCB2aWRlbyk7XG4gICAgICAgIHZpZGVvLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZVZpZGVvcyhjb250YWluZXI6IElWaWV3RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSBjb250YWluZXIuY2hpbGRyZW4uaXRlbShpKTtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIFZpZXdVdGlsLmRpc3Bvc2VWaWRlbyhpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0T2JqZWN0IE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIGRpc3Bvc2VPYmplY3RzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBpc0lFQnJvd3Nlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGZvciAobGV0IGkgPSBjb250YWluZXIuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBpdGVtID0gY29udGFpbmVyLmNoaWxkcmVuLml0ZW0oaSk7XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEhUTUxPYmplY3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgVmlld1V0aWwuZGlzcG9zZU9iamVjdChpdGVtLCBpc0lFQnJvd3Nlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGRpc3Bvc2VPYmplY3Qob2JqZWN0OiBIVE1MT2JqZWN0RWxlbWVudCwgaXNJRUJyb3dzZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0lFQnJvd3NlciAmJiBvYmplY3RbJ3JlYWR5U3RhdGUnXSA9PT0gNCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9iamVjdFtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2ldID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgVmlld1V0aWwucmVtb3ZlQ2hpbGQob2JqZWN0LnBhcmVudE5vZGUsIG9iamVjdCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBJVmlld0VsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50ID0gSFRNTEVsZW1lbnQ+ID0gSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPFQ+IHwgVmlld0NvbnRhaW5lclJlZjtcbiJdfQ==
578
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbC9WaWV3VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThDLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sUUFBUTtJQVVWLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWdCO1FBQ3ZDLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUIsT0FBTztTQUNWO1FBQ0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hFLENBQUM7SUFDTSxNQUFNLEtBQUssUUFBUSxDQUFDLEtBQWU7UUFDdEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxNQUFNO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLEVBQUU7SUFD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LGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDN0M7U0FDSjtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXlCLEVBQUUsV0FBcUI7UUFDeEUsSUFBSSxXQUFXLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtnQkFDbEIsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjthQUNKO1NBQ0o7UUFDRCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7QUFub0JELDZFQUE2RTtBQUM3RSxFQUFFO0FBQ0YsWUFBWTtBQUNaLEVBQUU7QUFDRiw2RUFBNkU7QUFFOUQsa0JBQVMsR0FBYyxJQUFJLENBQUM7QUFDNUIsa0JBQVMsR0FBYSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIFJlbmRlcmVyU3R5bGVGbGFnczIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV4dGVuZGVkRXJyb3IgfSBmcm9tICdAdHMtY29yZS9jb21tb24nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY2xhc3MgVmlld1V0aWwge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q29uc3RhbnRzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3JlbmRlcmVyOiBSZW5kZXJlcjIgPSBudWxsO1xuICAgIHByaXZhdGUgc3RhdGljIF9kb2N1bWVudDogRG9jdW1lbnQgPSBudWxsO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgcmVuZGVyZXIoKTogUmVuZGVyZXIyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoVmlld1V0aWwuX3JlbmRlcmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4dGVuZGVkRXJyb3IoYFZpZXdVdGlsIGlzIG5vdCBpbml0aWFsaXplZDogcmVuZGVyZXIgaW4gbmlsYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFZpZXdVdGlsLl9yZW5kZXJlcjtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBzZXQgcmVuZGVyZXIodmFsdWU6IFJlbmRlcmVyMikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFZpZXdVdGlsLl9yZW5kZXJlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFZpZXdVdGlsLl9yZW5kZXJlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGRvY3VtZW50KCk6IERvY3VtZW50IHtcbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKFZpZXdVdGlsLl9kb2N1bWVudCkgPyBWaWV3VXRpbC5fZG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBzZXQgZG9jdW1lbnQodmFsdWU6IERvY3VtZW50KSB7XG4gICAgICAgIFZpZXdVdGlsLl9kb2N1bWVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHdpbmRvdygpOiBXaW5kb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vXG4gICAgLy9cdFByaXZhdGUgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvcHlUb0NsaXBib2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFZpZXdVdGlsLmRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q29tbW9uIFByb3BlcnRpZXNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlRWxlbWVudDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4oZWxlbWVudDogSVZpZXdFbGVtZW50PFQ+KTogVCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50IGFzIFQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhXy5pc05pbChlbGVtZW50KSA/IGVsZW1lbnQubmF0aXZlRWxlbWVudCA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVCYXNlNjQoZWxlbWVudDogSFRNTEltYWdlRWxlbWVudCB8IEhUTUxDYW52YXNFbGVtZW50IHwgSFRNTFZpZGVvRWxlbWVudCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBjYW52YXMgPSBWaWV3VXRpbC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgVmlld1V0aWwuc2V0UHJvcGVydHkoY2FudmFzLCAnd2lkdGgnLCBlbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgVmlld1V0aWwuc2V0UHJvcGVydHkoY2FudmFzLCAnaGVpZ2h0JywgZWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoZWxlbWVudCwgMCwgMCwgZWxlbWVudC5vZmZzZXRXaWR0aCwgZWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgICAgICAgdmFsdWUgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMS4wKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RDb250ZW50KGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBpc05lZWRDb3B5VG9DbGlwYm9hcmQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgICAgICAgICAgbGV0IGlzV2FzRGlzYWJsZWQgPSBjb250YWluZXIuZGlzYWJsZWQ7XG4gICAgICAgICAgICBpZiAoaXNXYXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGFpbmVyLnNlbGVjdCgpO1xuICAgICAgICAgICAgaWYgKGlzTmVlZENvcHlUb0NsaXBib2FyZCkge1xuICAgICAgICAgICAgICAgIFZpZXdVdGlsLmNvcHlUb0NsaXBib2FyZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzV2FzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IFZpZXdVdGlsLndpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgICAgICAgICAgbGV0IHJhbmdlID0gVmlld1V0aWwuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuXG4gICAgICAgICAgICBpZiAoaXNOZWVkQ29weVRvQ2xpcGJvYXJkKSB7XG4gICAgICAgICAgICAgICAgVmlld1V0aWwuY29weVRvQ2xpcGJvYXJkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldEJhY2tncm91bmQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIGltYWdlOiBzdHJpbmcsIHJlcGVhdDogc3RyaW5nID0gJ3JlcGVhdCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoaW1hZ2UpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVTdHlsZShjb250YWluZXIsICdiYWNrZ3JvdW5kSW1hZ2UnKTtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZVN0eWxlKGNvbnRhaW5lciwgJ2JhY2tncm91bmRSZXBlYXQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaW1hZ2UuaW5jbHVkZXMoJ3VybCgnKSkge1xuICAgICAgICAgICAgaW1hZ2UgPSAndXJsKCcgKyBpbWFnZSArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIFZpZXdVdGlsLnNldFN0eWxlKGNvbnRhaW5lciwgJ2JhY2tncm91bmRJbWFnZScsIGltYWdlKTtcbiAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnYmFja2dyb3VuZFJlcGVhdCcsIHJlcGVhdCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRDaGlsZCBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVFbGVtZW50PFQgPSBhbnk+KG5hbWU6IHN0cmluZywgY2xhc3NOYW1lPzogc3RyaW5nLCBpbm5lckhUTUw/OiBzdHJpbmcpOiBUIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBWaWV3VXRpbC5yZW5kZXJlci5jcmVhdGVFbGVtZW50KG5hbWUpO1xuICAgICAgICBpZiAoIV8uaXNOaWwobmFtZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KGVsZW1lbnQsICdjbGFzc05hbWUnLCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbChpbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRQcm9wZXJ0eShlbGVtZW50LCAnaW5uZXJIVE1MJywgaW5uZXJIVE1MKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFwcGVuZENoaWxkKHBhcmVudDogYW55LCBjaGlsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChwYXJlbnQpICYmICFfLmlzTmlsKGNoaWxkKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZUNoaWxkKHBhcmVudDogYW55LCBjaGlsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChwYXJlbnQpICYmICFfLmlzTmlsKGNoaWxkKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIucmVtb3ZlQ2hpbGQocGFyZW50LCBjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvZ2dsZUNoaWxkKGNvbnRhaW5lcjogTm9kZSwgY2hpbGQ6IE5vZGUsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGxldCBpc0NvbnRhaW5zID0gY29udGFpbmVyLmNvbnRhaW5zKGNoaWxkKTtcbiAgICAgICAgaWYgKHZhbHVlICYmICFpc0NvbnRhaW5zKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5hcHBlbmRDaGlsZChjb250YWluZXIsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlICYmIGlzQ29udGFpbnMpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUNoaWxkKGNvbnRhaW5lciwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRTaXplIE1ldGhvZHNcbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFN0YWdlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFZpZXdVdGlsLndpbmRvdy5pbm5lcldpZHRoIHx8IFZpZXdVdGlsLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdGFnZUhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gVmlld1V0aWwud2luZG93LmlubmVySGVpZ2h0IHx8IFZpZXdVdGlsLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q2FudmFzQ29udGV4dDJkKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50PEhUTUxDYW52YXNFbGVtZW50Piwgb3B0aW9ucz86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzKTogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHtcbiAgICAgICAgbGV0IGNhbnZhcyA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIG9wdGlvbnMpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogRE9NUmVjdCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOaWwoY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogTmFOLFxuICAgICAgICAgICAgICAgIHk6IE5hTixcbiAgICAgICAgICAgICAgICB3aWR0aDogTmFOLFxuICAgICAgICAgICAgICAgIGhlaWdodDogTmFOLFxuICAgICAgICAgICAgICAgIHRvcDogTmFOLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiBOYU4sXG4gICAgICAgICAgICAgICAgbGVmdDogTmFOLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogTmFOXG4gICAgICAgICAgICB9IGFzIERPTVJlY3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFdpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICd3aWR0aCcpKTtcbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFZpZXdVdGlsLmdldEJvdW5kaW5nUmVjdGFuZ2xlKGNvbnRhaW5lcikud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzZXRXaWR0aChjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlciwgaXNOZWVkQ2hlY2tMaW1pdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc05lZWRDaGVja0xpbWl0cyAmJlxuICAgICAgICAgICAgKHZhbHVlIDwgVmlld1V0aWwuZ2V0TWluV2lkdGgoY29udGFpbmVyKSB8fCB2YWx1ZSA+IFZpZXdVdGlsLmdldE1heFdpZHRoKGNvbnRhaW5lcikgfHwgdmFsdWUgPT09IFZpZXdVdGlsLmdldFdpZHRoKGNvbnRhaW5lcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAnd2lkdGgnLCB2YWx1ZSArICdweCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1heFdpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21heFdpZHRoJykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1pbldpZHRoKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ21pbldpZHRoJykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnaGVpZ2h0JykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gVmlld1V0aWwuZ2V0Qm91bmRpbmdSZWN0YW5nbGUoY29udGFpbmVyKS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIHNldEhlaWdodChjb250YWluZXI6IElWaWV3RWxlbWVudCwgdmFsdWU6IG51bWJlciwgaXNOZWVkQ2hlY2tMaW1pdHM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpIHx8IF8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNOZWVkQ2hlY2tMaW1pdHMgJiZcbiAgICAgICAgICAgICh2YWx1ZSA8IFZpZXdVdGlsLmdldE1pbkhlaWdodChjb250YWluZXIpIHx8IHZhbHVlID4gVmlld1V0aWwuZ2V0TWF4SGVpZ2h0KGNvbnRhaW5lcikgfHwgdmFsdWUgPT09IFZpZXdVdGlsLmdldEhlaWdodChjb250YWluZXIpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdoZWlnaHQnLCB2YWx1ZSArICdweCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXhIZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnbWF4SGVpZ2h0JykpO1xuICAgICAgICBpZiAoXy5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBnZXRNaW5IZWlnaHQoY29udGFpbmVyOiBJVmlld0VsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlRmxvYXQoVmlld1V0aWwuZ2V0U3R5bGUoY29udGFpbmVyLCAnbWluSGVpZ2h0JykpO1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2l6ZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGlzTmVlZENoZWNrTGltaXRzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldFdpZHRoKGNvbnRhaW5lciwgd2lkdGgsIGlzTmVlZENoZWNrTGltaXRzKTtcbiAgICAgICAgVmlld1V0aWwuc2V0SGVpZ2h0KGNvbnRhaW5lciwgaGVpZ2h0LCBpc05lZWRDaGVja0xpbWl0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRYKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KFZpZXdVdGlsLmdldFN0eWxlKGNvbnRhaW5lciwgJ2xlZnQnKSk7XG4gICAgICAgIHJldHVybiBfLmlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFgoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFfLmlzTmlsKGNvbnRhaW5lcikgJiYgIV8uaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zZXRTdHlsZShjb250YWluZXIsICdsZWZ0JywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0WShjb250YWluZXI6IElWaWV3RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChfLmlzTmlsKGNvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsICd0b3AnKSk7XG4gICAgICAgIHJldHVybiBfLmlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBzZXRZKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpICYmICFfLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0U3R5bGUoY29udGFpbmVyLCAndG9wJywgdmFsdWUgKyAncHgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIG1vdmUoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldFgoY29udGFpbmVyLCB4KTtcbiAgICAgICAgVmlld1V0aWwuc2V0WShjb250YWluZXIsIHkpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Rm9jdXMgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgZm9jdXNJbnB1dChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IGNhcmV0SW5kZXggPSAwO1xuICAgICAgICBpZiAoIV8uaXNOaWwoaW5wdXQudmFsdWUpKSB7XG4gICAgICAgICAgICBjYXJldEluZGV4ID0gTWF0aC5tYXgoMCwgaW5wdXQudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGNhcmV0SW5kZXgsIGNhcmV0SW5kZXgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy9cbiAgICAvL1x0Q2xhc3NlcyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5hZGRDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRDbGFzc2VzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT4gVmlld1V0aWwuYWRkQ2xhc3MoY29udGFpbmVyLCBuYW1lKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5yZW1vdmVDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVDbGFzc2VzKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT4gVmlld1V0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBoYXNDbGFzcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiAhXy5pc05pbChjb250YWluZXIpID8gY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9nZ2xlQ2xhc3MoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5hZGRDbGFzcyhjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVmlld1V0aWwucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdG9nZ2xlQ2xhc3Nlcyhjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLmFkZENsYXNzZXMoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUNsYXNzZXMoY29udGFpbmVyLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuICFfLmlzTmlsKGNvbnRhaW5lcikgPyBjb250YWluZXJbbmFtZV0gOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0UHJvcGVydHkoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTmlsKHZhbHVlKSkge1xuICAgICAgICAgICAgVmlld1V0aWwucmVuZGVyZXIuc2V0UHJvcGVydHkoY29udGFpbmVyLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW1vdmVQcm9wZXJ0eShjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmVQcm9wZXJ0eShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlQXR0cmlidXRlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0QXR0cmlidXRlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnJlbW92ZUF0dHJpYnV0ZShjb250YWluZXIsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdHlsZShjb250YWluZXI6IElWaWV3RWxlbWVudCwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29udGFpbmVyID0gVmlld1V0aWwucGFyc2VFbGVtZW50KGNvbnRhaW5lcik7XG4gICAgICAgIGlmIChfLmlzTmlsKG5hbWUpIHx8IF8uaXNOaWwoY29udGFpbmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5zdHlsZVtuYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNldFN0eWxlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSBWaWV3VXRpbC5nZXRTdHlsZShjb250YWluZXIsIG5hbWUpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5yZW5kZXJlci5zZXRTdHlsZShjb250YWluZXIsIG5hbWUsIHZhbHVlLCBmbGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZVN0eWxlKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50LCBuYW1lOiBzdHJpbmcsIGZsYWdzPzogUmVuZGVyZXJTdHlsZUZsYWdzMik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgaWYgKF8uaXNOaWwobmFtZSkgfHwgXy5pc05pbChjb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgVmlld1V0aWwucmVuZGVyZXIucmVtb3ZlU3R5bGUoY29udGFpbmVyLCBuYW1lLCBmbGFncyk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRWaWRlbyBNZXRob2RzXG4gICAgLy9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVWaWRlbyhpc011dGU6IGJvb2xlYW4gPSB0cnVlLCBpc0lubGluZTogYm9vbGVhbiA9IGZhbHNlKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgICAgIGxldCB2aWRlbyA9IFZpZXdVdGlsLmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgIFZpZXdVdGlsLnNldFByb3BlcnR5KHZpZGVvLCAnYXV0b3BsYXknLCB0cnVlKTtcbiAgICAgICAgaWYgKGlzTXV0ZSkge1xuICAgICAgICAgICAgVmlld1V0aWwuc2V0VmlkZW9NdXRlUGFyYW1ldGVycyh2aWRlbywgaXNNdXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbmxpbmUpIHtcbiAgICAgICAgICAgIFZpZXdVdGlsLnNldFZpZGVvSW5saW5lUGFyYW1ldGVycyh2aWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZGVvO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0VmlkZW9NdXRlUGFyYW1ldGVycyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgaXNNdXRlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5tdXRlZCA9IHZpZGVvLmRlZmF1bHRNdXRlZCA9IGlzTXV0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2V0VmlkZW9JbmxpbmVQYXJhbWV0ZXJzKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnNldEF0dHJpYnV0ZSh2aWRlbywgJ3dlYmtpdC1wbGF5c2lubGluZScsIDEpO1xuICAgICAgICBWaWV3VXRpbC5zZXRBdHRyaWJ1dGUodmlkZW8sICdwbGF5c2lubGluZScsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VmlkZW9FcnJvcih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSB8fCBfLmlzTmlsKHZpZGVvLmVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I6IE1lZGlhRXJyb3IgPSB2aWRlby5lcnJvcjtcbiAgICAgICAgbGV0IHZhbHVlID0gJ1ZpZGVvIGVycm9yICcgKyB2aWRlby5zcmMgKyAnLCAnO1xuICAgICAgICBzd2l0Y2ggKGVycm9yLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWVkaWFFcnJvci5NRURJQV9FUlJfQUJPUlRFRDpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnbWVkaWEgYWJvcnRlZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX0RFQ09ERTpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnZXJyb3IgdG8gZGVjb2RlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTWVkaWFFcnJvci5NRURJQV9FUlJfTkVUV09SSzpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnbmV0d29yayBlcnJvcic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE1lZGlhRXJyb3IuTUVESUFfRVJSX1NSQ19OT1RfU1VQUE9SVEVEOlxuICAgICAgICAgICAgICAgIHZhbHVlICs9ICdzb3VyY2Ugbm90IHN1cHBvcnRlZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGxheVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChfLmlzTmlsKHZpZGVvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHZpZGVvLnBsYXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHBsYXlBdWRpbyhhdWRpbzogSFRNTEF1ZGlvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXy5pc05pbChhdWRpbykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXVkaW8ucGxheSgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGF1c2VWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1ZpZGVvUGxheWluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIV8uaXNOaWwodmlkZW8pID8gIXZpZGVvLnBhdXNlZCAmJiAhdmlkZW8uZW5kZWQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxvYWRWaWRlbyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICB2aWRlby5sb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0b3BWaWRlb0lmTmVlZCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIV8uaXNOaWwodmlkZW8pICYmICghXy5pc05pbCh2aWRlby5zcmMpIHx8ICFfLmlzTmlsKHZpZGVvLnNyY09iamVjdCkpKSB7XG4gICAgICAgICAgICBWaWV3VXRpbC5zdG9wVmlkZW8odmlkZW8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdG9wVmlkZW8odmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKF8uaXNOaWwodmlkZW8pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlkZW8uc3JjT2JqZWN0IGluc3RhbmNlb2YgTWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgIGxldCB0cmFja3MgPSB2aWRlby5zcmNPYmplY3QuZ2V0VHJhY2tzKCk7XG4gICAgICAgICAgICB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICB2aWRlby5wYXVzZSgpO1xuICAgICAgICB2aWRlby5zcmMgPSAnJztcbiAgICAgICAgdmlkZW8ubG9hZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZVZpZGVvKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFZpZXdVdGlsLnN0b3BWaWRlbyh2aWRlbyk7XG4gICAgICAgIFZpZXdVdGlsLnJlbW92ZUNoaWxkKHZpZGVvLnBhcmVudE5vZGUsIHZpZGVvKTtcbiAgICAgICAgdmlkZW8ucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBkaXNwb3NlVmlkZW9zKGNvbnRhaW5lcjogSVZpZXdFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnRhaW5lciA9IFZpZXdVdGlsLnBhcnNlRWxlbWVudChjb250YWluZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IGNvbnRhaW5lci5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgVmlld1V0aWwuZGlzcG9zZVZpZGVvKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvL1xuICAgIC8vXHRPYmplY3QgTWV0aG9kc1xuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZU9iamVjdHMoY29udGFpbmVyOiBJVmlld0VsZW1lbnQsIGlzSUVCcm93c2VyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb250YWluZXIgPSBWaWV3VXRpbC5wYXJzZUVsZW1lbnQoY29udGFpbmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSBjb250YWluZXIuY2hpbGRyZW4uaXRlbShpKTtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSFRNTE9iamVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBWaWV3VXRpbC5kaXNwb3NlT2JqZWN0KGl0ZW0sIGlzSUVCcm93c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGlzcG9zZU9iamVjdChvYmplY3Q6IEhUTUxPYmplY3RFbGVtZW50LCBpc0lFQnJvd3Nlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzSUVCcm93c2VyICYmIG9iamVjdFsncmVhZHlTdGF0ZSddID09PSA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpIGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqZWN0W2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBWaWV3VXRpbC5yZW1vdmVDaGlsZChvYmplY3QucGFyZW50Tm9kZSwgb2JqZWN0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIElWaWV3RWxlbWVudDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4gPSBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8VD4gfCBWaWV3Q29udGFpbmVyUmVmO1xuIl19