qms-angular 1.0.50 → 1.0.54

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 (414) hide show
  1. package/bundles/qms-angular.umd.js +19558 -11339
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/app-icon/app-icon.module.js +29 -16
  4. package/esm2015/lib/components/app-icon/icon-registry.service.js +9 -7
  5. package/esm2015/lib/components/badges/index.js +2 -0
  6. package/esm2015/lib/components/badges/models/qms-badges.model.js +13 -0
  7. package/esm2015/lib/components/badges/public_api.js +3 -0
  8. package/esm2015/lib/components/badges/qms-badges.component.js +38 -0
  9. package/esm2015/lib/components/badges/qms-badges.module.js +41 -0
  10. package/esm2015/lib/components/banner/qms-banner/qms-banner.component.js +28 -16
  11. package/esm2015/lib/components/banner/qms-banner/qms-banner.module.js +36 -19
  12. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.js +28 -16
  13. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.js +36 -19
  14. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.component.js +19 -13
  15. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.module.js +30 -17
  16. package/esm2015/lib/components/breadcrumb/breadcrumb-direction-icon.directive.js +11 -10
  17. package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +20 -17
  18. package/esm2015/lib/components/breadcrumb/breadcrumb.js +40 -28
  19. package/esm2015/lib/components/breadcrumb/breadcrumb.module.js +50 -26
  20. package/esm2015/lib/components/button/button-toggle.js +120 -85
  21. package/esm2015/lib/components/button/button.js +86 -78
  22. package/esm2015/lib/components/button/button.module.js +51 -27
  23. package/esm2015/lib/components/comment/comment.js +29 -18
  24. package/esm2015/lib/components/dialog/dialog.js +38 -28
  25. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +24 -16
  26. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.js +71 -31
  27. package/esm2015/lib/components/list/list.js +101 -89
  28. package/esm2015/lib/components/list/list.module.js +94 -50
  29. package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +55 -29
  30. package/esm2015/lib/components/qms-app-bar/qms-app-bar.module.js +39 -20
  31. package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +32 -22
  32. package/esm2015/lib/components/qms-stepper/qms-stepper.module.js +35 -25
  33. package/esm2015/lib/components/related/content/related-content.component.js +19 -12
  34. package/esm2015/lib/components/related/list-other-related/list-related.component.js +29 -25
  35. package/esm2015/lib/components/related/popup/related-popup.component.js +50 -33
  36. package/esm2015/lib/components/related/related.module.js +97 -44
  37. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +23 -17
  38. package/esm2015/lib/components/related/risk/list/list.component.js +22 -18
  39. package/esm2015/lib/components/related/risk/result/result.component.js +23 -16
  40. package/esm2015/lib/components/related/service/related-global.service.js +7 -6
  41. package/esm2015/lib/components/related/sidenav/sidenav.component.js +21 -12
  42. package/esm2015/lib/components/related/tree/tree.component.js +54 -41
  43. package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +22 -18
  44. package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +22 -18
  45. package/esm2015/lib/components/reports/qms-reports.module.js +29 -20
  46. package/esm2015/lib/components/rich-text/rich-text.js +47 -32
  47. package/esm2015/lib/components/rich-text/rich-text.module.js +35 -21
  48. package/esm2015/lib/components/select-dialog/select-dialog.js +31 -16
  49. package/esm2015/lib/components/suffix-field/suffix-field.directive.js +22 -21
  50. package/esm2015/lib/components/table/table-action.js +31 -31
  51. package/esm2015/lib/components/table/table.module.js +37 -21
  52. package/esm2015/lib/components/test-only/test-only.component.js +14 -11
  53. package/esm2015/lib/components/tooltip/tooltip.js +24 -19
  54. package/esm2015/lib/components/tooltip/tooltip.module.js +38 -20
  55. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +22 -16
  56. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.js +71 -31
  57. package/esm2015/lib/directives/chip-input/chip-input-chip-list.directive.js +13 -13
  58. package/esm2015/lib/directives/chip-input/chip-input-field.directive.js +11 -10
  59. package/esm2015/lib/directives/chip-input/chip-input-select-dropdown.directive.js +11 -10
  60. package/esm2015/lib/directives/chip-input/chip-input-select-field.directive.js +17 -14
  61. package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +14 -13
  62. package/esm2015/lib/directives/chips/chip-body.directive.js +11 -10
  63. package/esm2015/lib/directives/chips/chip.directive.js +13 -13
  64. package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +16 -14
  65. package/esm2015/lib/directives/file-upload/file-upload-attachment-list.directive.js +11 -10
  66. package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +19 -16
  67. package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +16 -14
  68. package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +26 -20
  69. package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +19 -15
  70. package/esm2015/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.js +11 -10
  71. package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +25 -18
  72. package/esm2015/lib/directives/file-upload/file-upload.directive.js +24 -20
  73. package/esm2015/lib/directives/form.directive.js +48 -51
  74. package/esm2015/lib/directives/margin.directive.js +15 -14
  75. package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +11 -10
  76. package/esm2015/lib/directives/range-slider/range-slider.directive.js +17 -14
  77. package/esm2015/lib/directives/scroll-selected/scroll-to-selected.directive.js +16 -15
  78. package/esm2015/lib/directives/scrollbar/scrollbar.directive.js +13 -13
  79. package/esm2015/lib/directives/search-field.directive.js +21 -22
  80. package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +11 -10
  81. package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +11 -10
  82. package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +11 -10
  83. package/esm2015/lib/directives/side-sheet/drawer.directive.js +11 -10
  84. package/esm2015/lib/directives/tab/tab-group-advanced.directive.js +15 -14
  85. package/esm2015/lib/directives/tab/tab-group.directive.js +11 -10
  86. package/esm2015/lib/directives/tab/tab-label.directive.js +11 -10
  87. package/esm2015/lib/directives/text-block/text-block-line.directive.js +20 -16
  88. package/esm2015/lib/directives/text-block/text-block.directive.js +17 -14
  89. package/esm2015/lib/directives/tooltip/tooltip-image.directive.js +14 -13
  90. package/esm2015/lib/directives/tooltip/tooltip-renderer.directive.js +35 -22
  91. package/esm2015/lib/material-module.js +35 -16
  92. package/esm2015/lib/model/en.js +35 -4
  93. package/esm2015/lib/model/no.js +34 -3
  94. package/esm2015/lib/pipe/dateFormat.pipe.js +11 -10
  95. package/esm2015/lib/qms-angular.component.js +13 -11
  96. package/esm2015/lib/qms-angular.module.js +232 -121
  97. package/esm2015/lib/qms-angular.service.js +9 -8
  98. package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +32 -12
  99. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +5 -1
  100. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +10 -1
  101. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +7 -0
  102. package/esm2015/lib/qms-ckeditor-components/common/enums/document-type.enum.js +2 -1
  103. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +8 -0
  104. package/esm2015/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.js +16 -0
  105. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/halo-service.js +105 -0
  106. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.js +3762 -0
  107. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +68 -0
  108. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +372 -0
  109. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.js +1041 -0
  110. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.js +326 -0
  111. package/esm2015/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.js +318 -0
  112. package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +80 -0
  113. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +2 -2
  114. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.js +9 -0
  115. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +9 -0
  116. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +3 -0
  117. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +23 -16
  118. package/esm2015/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.js +34 -19
  119. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +43 -0
  120. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +577 -53
  121. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +69 -35
  122. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +322 -0
  123. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +12 -8
  124. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +39 -30
  125. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +22 -18
  126. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +29 -20
  127. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +22 -18
  128. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +35 -23
  129. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +30 -20
  130. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +27 -18
  131. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +8 -0
  132. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor-base.component.js +7 -4
  133. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +118 -44
  134. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +131 -55
  135. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.js +10 -10
  136. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +9 -9
  137. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +66 -26
  138. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.js +26 -0
  139. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.js +9 -8
  140. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.js +9 -9
  141. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +9 -9
  142. package/esm2015/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.js +9 -9
  143. package/esm2015/lib/services/translation-registry.service.js +9 -8
  144. package/esm2015/lib/shared.module.js +9 -4
  145. package/esm2015/public-api.js +17 -1
  146. package/esm2015/qms-angular.js +1 -9
  147. package/fesm2015/qms-angular.js +10820 -2740
  148. package/fesm2015/qms-angular.js.map +1 -1
  149. package/lib/components/app-icon/app-icon.module.d.ts +7 -0
  150. package/lib/components/app-icon/icon-registry.service.d.ts +3 -0
  151. package/lib/components/badges/index.d.ts +1 -0
  152. package/lib/components/badges/models/qms-badges.model.d.ts +10 -0
  153. package/lib/components/badges/public_api.d.ts +2 -0
  154. package/lib/components/badges/qms-badges.component.d.ts +15 -0
  155. package/lib/components/badges/qms-badges.module.d.ts +11 -0
  156. package/lib/components/banner/qms-banner/qms-banner.component.d.ts +3 -0
  157. package/lib/components/banner/qms-banner/qms-banner.module.d.ts +10 -0
  158. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.d.ts +3 -0
  159. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.d.ts +10 -0
  160. package/lib/components/banner/qms-banner-loading/qms-banner-loading.component.d.ts +3 -0
  161. package/lib/components/banner/qms-banner-loading/qms-banner-loading.module.d.ts +8 -0
  162. package/lib/components/breadcrumb/breadcrumb-direction-icon.directive.d.ts +3 -0
  163. package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +3 -0
  164. package/lib/components/breadcrumb/breadcrumb.d.ts +3 -0
  165. package/lib/components/breadcrumb/breadcrumb.module.d.ts +13 -0
  166. package/lib/components/button/button-toggle.d.ts +5 -0
  167. package/lib/components/button/button.d.ts +7 -0
  168. package/lib/components/button/button.module.d.ts +9 -0
  169. package/lib/components/comment/comment.d.ts +3 -0
  170. package/lib/components/dialog/dialog.d.ts +5 -0
  171. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +3 -0
  172. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.d.ts +16 -0
  173. package/lib/components/list/list.d.ts +15 -0
  174. package/lib/components/list/list.module.d.ts +11 -0
  175. package/lib/components/qms-app-bar/qms-app-bar.component.d.ts +3 -0
  176. package/lib/components/qms-app-bar/qms-app-bar.module.d.ts +12 -0
  177. package/lib/components/qms-stepper/qms-stepper.component.d.ts +3 -0
  178. package/lib/components/qms-stepper/qms-stepper.module.d.ts +8 -0
  179. package/lib/components/related/content/related-content.component.d.ts +3 -0
  180. package/lib/components/related/list-other-related/list-related.component.d.ts +3 -0
  181. package/lib/components/related/popup/related-popup.component.d.ts +3 -0
  182. package/lib/components/related/related.module.d.ts +29 -0
  183. package/lib/components/related/risk/analysis/analysis.component.d.ts +3 -0
  184. package/lib/components/related/risk/list/list.component.d.ts +3 -0
  185. package/lib/components/related/risk/result/result.component.d.ts +3 -0
  186. package/lib/components/related/service/related-global.service.d.ts +3 -0
  187. package/lib/components/related/sidenav/sidenav.component.d.ts +3 -0
  188. package/lib/components/related/tree/tree.component.d.ts +3 -0
  189. package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +3 -0
  190. package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +3 -0
  191. package/lib/components/reports/qms-reports.module.d.ts +7 -0
  192. package/lib/components/rich-text/rich-text.d.ts +3 -0
  193. package/lib/components/rich-text/rich-text.module.d.ts +8 -0
  194. package/lib/components/select-dialog/select-dialog.d.ts +3 -0
  195. package/lib/components/suffix-field/suffix-field.directive.d.ts +5 -0
  196. package/lib/components/table/table-action.d.ts +5 -0
  197. package/lib/components/table/table.module.d.ts +8 -0
  198. package/lib/components/test-only/test-only.component.d.ts +3 -0
  199. package/lib/components/tooltip/tooltip.d.ts +3 -0
  200. package/lib/components/tooltip/tooltip.module.d.ts +9 -0
  201. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +3 -0
  202. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.d.ts +16 -0
  203. package/lib/directives/chip-input/chip-input-chip-list.directive.d.ts +3 -0
  204. package/lib/directives/chip-input/chip-input-field.directive.d.ts +3 -0
  205. package/lib/directives/chip-input/chip-input-select-dropdown.directive.d.ts +3 -0
  206. package/lib/directives/chip-input/chip-input-select-field.directive.d.ts +3 -0
  207. package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +3 -0
  208. package/lib/directives/chips/chip-body.directive.d.ts +3 -0
  209. package/lib/directives/chips/chip.directive.d.ts +3 -0
  210. package/lib/directives/dropdown-menu/dropdown-item.directive.d.ts +3 -0
  211. package/lib/directives/file-upload/file-upload-attachment-list.directive.d.ts +3 -0
  212. package/lib/directives/file-upload/file-upload-display.directive.d.ts +3 -0
  213. package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +3 -0
  214. package/lib/directives/file-upload/file-upload-multiple-selector.directive.d.ts +3 -0
  215. package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +3 -0
  216. package/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.d.ts +3 -0
  217. package/lib/directives/file-upload/file-upload-selector.directive.d.ts +3 -0
  218. package/lib/directives/file-upload/file-upload.directive.d.ts +5 -0
  219. package/lib/directives/form.directive.d.ts +11 -0
  220. package/lib/directives/margin.directive.d.ts +3 -0
  221. package/lib/directives/range-slider/range-slider-lockup.directive.d.ts +3 -0
  222. package/lib/directives/range-slider/range-slider.directive.d.ts +3 -0
  223. package/lib/directives/scroll-selected/scroll-to-selected.directive.d.ts +3 -0
  224. package/lib/directives/scrollbar/scrollbar.directive.d.ts +3 -0
  225. package/lib/directives/search-field.directive.d.ts +5 -0
  226. package/lib/directives/side-sheet/drawer-content.directive.d.ts +3 -0
  227. package/lib/directives/side-sheet/drawer-header-action.directive.d.ts +3 -0
  228. package/lib/directives/side-sheet/drawer-header.directive.d.ts +3 -0
  229. package/lib/directives/side-sheet/drawer.directive.d.ts +3 -0
  230. package/lib/directives/tab/tab-group-advanced.directive.d.ts +3 -0
  231. package/lib/directives/tab/tab-group.directive.d.ts +3 -0
  232. package/lib/directives/tab/tab-label.directive.d.ts +3 -0
  233. package/lib/directives/text-block/text-block-line.directive.d.ts +3 -0
  234. package/lib/directives/text-block/text-block.directive.d.ts +3 -0
  235. package/lib/directives/tooltip/tooltip-image.directive.d.ts +3 -0
  236. package/lib/directives/tooltip/tooltip-renderer.directive.d.ts +3 -0
  237. package/lib/material-module.d.ts +12 -0
  238. package/lib/model/en.d.ts +31 -0
  239. package/lib/model/no.d.ts +31 -0
  240. package/lib/pipe/dateFormat.pipe.d.ts +3 -0
  241. package/lib/qms-angular.component.d.ts +3 -0
  242. package/lib/qms-angular.module.d.ts +49 -0
  243. package/lib/qms-angular.service.d.ts +3 -0
  244. package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +2 -2
  245. package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +4 -0
  246. package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +9 -0
  247. package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +6 -0
  248. package/lib/qms-ckeditor-components/common/enums/document-type.enum.d.ts +1 -0
  249. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +6 -0
  250. package/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.d.ts +14 -0
  251. package/lib/qms-ckeditor-components/common/flowchart/service/halo-service.d.ts +48 -0
  252. package/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.d.ts +18 -0
  253. package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +17 -0
  254. package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +62 -0
  255. package/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.d.ts +1183 -0
  256. package/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.d.ts +216 -0
  257. package/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.d.ts +61 -0
  258. package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +36 -0
  259. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.d.ts +7 -0
  260. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +7 -0
  261. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +7 -0
  262. package/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.d.ts +3 -0
  263. package/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.d.ts +3 -0
  264. package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +18 -0
  265. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +88 -4
  266. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +11 -2
  267. package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +44 -0
  268. package/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.d.ts +3 -0
  269. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +3 -0
  270. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.d.ts +3 -0
  271. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +3 -0
  272. package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +3 -0
  273. package/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.d.ts +4 -0
  274. package/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.d.ts +3 -0
  275. package/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.d.ts +3 -0
  276. package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +7 -0
  277. package/lib/qms-ckeditor-components/qms-ckeditor-base.component.d.ts +3 -0
  278. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +8 -0
  279. package/lib/qms-ckeditor-components/qms-ckeditor.module.d.ts +44 -0
  280. package/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.d.ts +3 -0
  281. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +3 -0
  282. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +4 -0
  283. package/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.d.ts +13 -0
  284. package/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.d.ts +3 -0
  285. package/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.d.ts +3 -0
  286. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +3 -0
  287. package/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.d.ts +3 -0
  288. package/lib/services/translation-registry.service.d.ts +3 -0
  289. package/lib/shared.module.d.ts +4 -0
  290. package/lib.theme.scss +8 -0
  291. package/package.json +1 -2
  292. package/public-api.d.ts +15 -0
  293. package/qms-angular.d.ts +1 -8
  294. package/src/assets/images/ckeditor5.svg +1 -0
  295. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf +0 -0
  296. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Light.ttf +0 -0
  297. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf +0 -0
  298. package/src/assets/jointjs/fonts/Alegreya_Sans/OFL.txt +92 -0
  299. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Bold.ttf +0 -0
  300. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Light.ttf +0 -0
  301. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Regular.ttf +0 -0
  302. package/src/assets/jointjs/fonts/Averia_Libre/OFL.txt +93 -0
  303. package/src/assets/jointjs/fonts/Roboto_Condensed/LICENSE.txt +202 -0
  304. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Bold.ttf +0 -0
  305. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf +0 -0
  306. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf +0 -0
  307. package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
  308. package/src/assets/jointjs/images/image-icon1.svg +1 -0
  309. package/src/assets/jointjs/images/image-icon2.svg +6 -0
  310. package/src/assets/jointjs/images/image-icon3.svg +11 -0
  311. package/src/assets/jointjs/images/image-icon4.svg +8 -0
  312. package/src/assets/jointjs/images/member-female.png +0 -0
  313. package/src/assets/jointjs/images/member-male.png +0 -0
  314. package/src/assets/jointjs/images/no-color-icon.svg +72 -0
  315. package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
  316. package/src/assets/jointjs/images/save-icon-modern.png +0 -0
  317. package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
  318. package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
  319. package/src/assets/jointjs/images/toolbar-icons-dark.woff +0 -0
  320. package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
  321. package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
  322. package/src/assets/jointjs/images/transparent-icon.svg +50 -0
  323. package/src/assets/jointjs/scss/bpmn.scss +36 -35
  324. package/src/assets/jointjs/scss/style.dark.scss +233 -0
  325. package/src/assets/jointjs/scss/style.material.scss +234 -0
  326. package/src/assets/jointjs/scss/style.modern.scss +225 -0
  327. package/src/assets/jointjs/scss/style.scss +216 -0
  328. package/src/assets/jointjs/scss/theme-picker.scss +21 -0
  329. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -2
  330. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  331. package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -1
  332. package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
  333. package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -1
  334. package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
  335. package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
  336. package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
  337. package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
  338. package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
  339. package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -1
  340. package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
  341. package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
  342. package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
  343. package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -1
  344. package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
  345. package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
  346. package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
  347. package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
  348. package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
  349. package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
  350. package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
  351. package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
  352. package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
  353. package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
  354. package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
  355. package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -1
  356. package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
  357. package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -1
  358. package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -1
  359. package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
  360. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  361. package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
  362. package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
  363. package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -1
  364. package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
  365. package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
  366. package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
  367. package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -1
  368. package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
  369. package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
  370. package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -1
  371. package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
  372. package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
  373. package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
  374. package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -1
  375. package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
  376. package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
  377. package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
  378. package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
  379. package/src/assets/qms-ckeditor-plugin/package-lock.json +12198 -9
  380. package/src/assets/qms-ckeditor-plugin/package.json +1 -0
  381. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +22 -5
  382. package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +173 -0
  383. package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +28 -0
  384. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +24 -5
  385. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +7 -1
  386. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +20 -0
  387. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +63 -0
  388. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +87 -0
  389. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +47 -43
  390. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +1 -1
  391. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +72 -108
  392. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/openimagemapcommand.js +58 -0
  393. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +4 -3
  394. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +13 -0
  395. package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +8 -8
  396. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +23 -24
  397. package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +507 -0
  398. package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +1 -50
  399. package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
  400. package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +1 -0
  401. package/src/lib/components/badges/_qms-badges-base.scss +122 -0
  402. package/src/lib/components/badges/qms-badges.component.scss +89 -0
  403. package/src/lib/components/list/_list-base.scss +1 -0
  404. package/src/lib/components/list/list.scss +2 -2
  405. package/src/lib/components/related/popup/related-popup.component.scss +1 -1
  406. package/src/lib/components/related/tree/tree.component.scss +1 -1
  407. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +16 -0
  408. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +15 -1
  409. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +5 -0
  410. package/src/lib/qms-ckeditor-components/styles/_layout.scss +24 -0
  411. package/src/lib/qms-ckeditor-components/styles/_modules.scss +8 -0
  412. package/src/themes/_color.scss +1 -1
  413. package/src/themes/_scrollbar.scss +5 -5
  414. package/qms-angular.metadata.json +0 -1
@@ -0,0 +1,68 @@
1
+ /*! Rappid v3.2.0 - HTML5 Diagramming Framework
2
+
3
+ Copyright (c) 2015 client IO
4
+
5
+ 2020-06-12
6
+
7
+
8
+ This Source Code Form is subject to the terms of the Rappid License
9
+ , v. 2.0. If a copy of the Rappid License was not distributed with this
10
+ file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
11
+ or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
12
+ import * as _ from 'lodash';
13
+ export class KeyboardService {
14
+ constructor() {
15
+ this.keyboard = new window["joint"].ui.Keyboard();
16
+ }
17
+ create(graph, clipboard, selection, paperScroller, commandManager) {
18
+ this.keyboard.on({
19
+ 'ctrl+c': () => {
20
+ // Copy all selected elements and their associated links.
21
+ clipboard.copyElements(selection.collection, graph);
22
+ },
23
+ 'ctrl+v': () => {
24
+ const pastedCells = clipboard.pasteCells(graph, {
25
+ translate: { dx: 20, dy: 20 },
26
+ useLocalStorage: true
27
+ });
28
+ const elements = _.filter(pastedCells, cell => cell.isElement());
29
+ // Make sure pasted elements get selected immediately. This makes the UX better as
30
+ // the user can immediately manipulate the pasted elements.
31
+ selection.collection.reset(elements);
32
+ },
33
+ 'ctrl+x shift+delete': () => {
34
+ clipboard.cutElements(selection.collection, graph);
35
+ },
36
+ 'delete backspace': (evt) => {
37
+ evt.preventDefault();
38
+ graph.removeCells(selection.collection.toArray());
39
+ },
40
+ 'ctrl+z': () => {
41
+ commandManager.undo();
42
+ selection.cancelSelection();
43
+ },
44
+ 'ctrl+y': () => {
45
+ commandManager.redo();
46
+ selection.cancelSelection();
47
+ },
48
+ 'ctrl+a': () => {
49
+ selection.collection.reset(graph.getElements());
50
+ },
51
+ 'ctrl+plus': (evt) => {
52
+ evt.preventDefault();
53
+ paperScroller.zoom(0.2, { max: 5, grid: 0.2 });
54
+ },
55
+ 'ctrl+minus': (evt) => {
56
+ evt.preventDefault();
57
+ paperScroller.zoom(-0.2, { min: 0.2, grid: 0.2 });
58
+ },
59
+ 'keydown:shift': (evt) => {
60
+ paperScroller.setCursor('crosshair');
61
+ },
62
+ 'keyup:shift': () => {
63
+ paperScroller.setCursor('grab');
64
+ }
65
+ });
66
+ }
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9zZXJ2aWNlL2tleWJvYXJkLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7b0ZBVW9GO0FBSXBGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE1BQU0sT0FBTyxlQUFlO0lBSTFCO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FDSixLQUFzQixFQUN0QixTQUE2QixFQUM3QixTQUE2QixFQUM3QixhQUFxQyxFQUNyQyxjQUF3QztRQUd4QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUVmLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBRWIseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBRWIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7b0JBQzlDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDN0IsZUFBZSxFQUFFLElBQUk7aUJBQ3RCLENBQUMsQ0FBQztnQkFFSCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUVqRSxrRkFBa0Y7Z0JBQ2xGLDJEQUEyRDtnQkFDM0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELHFCQUFxQixFQUFFLEdBQUcsRUFBRTtnQkFDMUIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFFRCxrQkFBa0IsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDeEMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsV0FBVyxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFO2dCQUNqQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBRUQsWUFBWSxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFO2dCQUNsQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxlQUFlLEVBQUUsQ0FBQyxHQUFpQixFQUFFLEVBQUU7Z0JBQ3JDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qISBSYXBwaWQgdjMuMi4wIC0gSFRNTDUgRGlhZ3JhbW1pbmcgRnJhbWV3b3JrXHJcblxyXG5Db3B5cmlnaHQgKGMpIDIwMTUgY2xpZW50IElPXHJcblxyXG4gMjAyMC0wNi0xMlxyXG5cclxuXHJcblRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgUmFwcGlkIExpY2Vuc2VcclxuLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgUmFwcGlkIExpY2Vuc2Ugd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcclxuZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9qb2ludGpzLmNvbS9saWNlbnNlL3JhcHBpZF92Mi50eHRcclxuIG9yIGZyb20gdGhlIFJhcHBpZCBhcmNoaXZlIGFzIHdhcyBkaXN0cmlidXRlZCBieSBjbGllbnQgSU8uIFNlZSB0aGUgTElDRU5TRSBmaWxlLiovXHJcblxyXG5cclxuaW1wb3J0ICogYXMgam9pbnQgZnJvbSAnQGNsaWVudGlvL3JhcHBpZCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLZXlib2FyZFNlcnZpY2Uge1xyXG5cclxuICBrZXlib2FyZDogam9pbnQudWkuS2V5Ym9hcmQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5rZXlib2FyZCA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS51aS5LZXlib2FyZCgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlKFxyXG4gICAgZ3JhcGg6IGpvaW50LmRpYS5HcmFwaCxcclxuICAgIGNsaXBib2FyZDogam9pbnQudWkuQ2xpcGJvYXJkLFxyXG4gICAgc2VsZWN0aW9uOiBqb2ludC51aS5TZWxlY3Rpb24sXHJcbiAgICBwYXBlclNjcm9sbGVyOiBqb2ludC51aS5QYXBlclNjcm9sbGVyLFxyXG4gICAgY29tbWFuZE1hbmFnZXI6IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlclxyXG4gICkge1xyXG5cclxuICAgIHRoaXMua2V5Ym9hcmQub24oe1xyXG5cclxuICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuXHJcbiAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgY2xpcGJvYXJkLmNvcHlFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgdHJhbnNsYXRlOiB7IGR4OiAyMCwgZHk6IDIwIH0sXHJcbiAgICAgICAgICB1c2VMb2NhbFN0b3JhZ2U6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgY2VsbCA9PiBjZWxsLmlzRWxlbWVudCgpKTtcclxuXHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgIC8vIHRoZSB1c2VyIGNhbiBpbW1lZGlhdGVseSBtYW5pcHVsYXRlIHRoZSBwYXN0ZWQgZWxlbWVudHMuXHJcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZWxlbWVudHMpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XHJcbiAgICAgICAgY2xpcGJvYXJkLmN1dEVsZW1lbnRzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLCBncmFwaCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnZGVsZXRlIGJhY2tzcGFjZSc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcclxuICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCt5JzogKCkgPT4ge1xyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcclxuICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCthJzogKCkgPT4ge1xyXG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGdyYXBoLmdldEVsZW1lbnRzKCkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2N0cmwrcGx1cyc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgwLjIsIHsgbWF4OiA1LCBncmlkOiAwLjIgfSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCttaW51cyc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdjcm9zc2hhaXInKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgICdrZXl1cDpzaGlmdCc6ICgpID0+IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignZ3JhYicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,372 @@
1
+ /*! Rappid v3.2.0 - HTML5 Diagramming Framework
2
+
3
+ Copyright (c) 2015 client IO
4
+
5
+ 2020-06-12
6
+
7
+
8
+ This Source Code Form is subject to the terms of the Rappid License
9
+ , v. 2.0. If a copy of the Rappid License was not distributed with this
10
+ file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
11
+ or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
12
+ import { __awaiter } from "tslib";
13
+ import * as dagre from 'dagre';
14
+ import * as _ from 'lodash';
15
+ import { FlowChartConst } from '../../constants/ckeditorFlowchart.const';
16
+ import * as appShapes from '../shapes/app-shapes';
17
+ var joint = window['joint'];
18
+ class KitchenSinkService {
19
+ constructor(el, stencilService, toolbarService, inspectorService, haloService, keyboardService) {
20
+ // backwards compatibility for older shapes
21
+ this.exportStylesheet = '.scalable * { vector-effect: non-scaling-stroke }';
22
+ this.el = el;
23
+ // apply current joint js theme
24
+ const view = new window["joint"].mvc.View({ el });
25
+ view.delegateEvents({
26
+ 'mouseup input[type="range"]': (evt) => evt.target.blur()
27
+ });
28
+ this.stencilService = stencilService;
29
+ this.toolbarService = toolbarService;
30
+ this.inspectorService = inspectorService;
31
+ this.haloService = haloService;
32
+ this.keyboardService = keyboardService;
33
+ }
34
+ startRappid() {
35
+ window["joint"].setTheme('modern');
36
+ this.initializePaper();
37
+ this.initializeStencil();
38
+ this.initializeSelection();
39
+ this.initializeToolsAndInspector();
40
+ this.initializeNavigator();
41
+ this.initializeToolbar();
42
+ this.initializeKeyboardShortcuts();
43
+ this.initializeTooltips();
44
+ this.initializeStencilTooltips();
45
+ }
46
+ initializePaper() {
47
+ const graph = this.graph = new window["joint"].dia.Graph({}, {
48
+ cellNamespace: appShapes
49
+ });
50
+ graph.on('add', (cell, collection, opt) => {
51
+ if (opt.stencil) {
52
+ this.inspectorService.create(cell);
53
+ }
54
+ });
55
+ this.commandManager = new window["joint"].dia.CommandManager({ graph: graph });
56
+ const paper = this.paper = new window["joint"].dia.Paper({
57
+ width: 1000,
58
+ height: 1000,
59
+ gridSize: 10,
60
+ drawGrid: true,
61
+ model: graph,
62
+ cellViewNamespace: appShapes,
63
+ defaultLink: new appShapes.app.Link(),
64
+ defaultConnectionPoint: appShapes.app.Link.connectionPoint,
65
+ interactive: { linkMove: false },
66
+ async: true,
67
+ sorting: joint.dia.Paper.sorting.APPROX
68
+ });
69
+ paper.on('blank:mousewheel', _.partial(this.onMousewheel, null), this);
70
+ paper.on('cell:mousewheel', this.onMousewheel.bind(this));
71
+ this.snaplines = new window["joint"].ui.Snaplines({ paper: paper });
72
+ const paperScroller = this.paperScroller = new window["joint"].ui.PaperScroller({
73
+ paper,
74
+ autoResizePaper: true,
75
+ scrollWhileDragging: true,
76
+ cursor: 'grab'
77
+ });
78
+ this.renderPlugin('.paper-container', paperScroller);
79
+ paperScroller.render().center();
80
+ }
81
+ initializeStencil() {
82
+ this.stencilService.create(this.paperScroller, this.snaplines);
83
+ this.renderPlugin('.stencil-container', this.stencilService.stencil);
84
+ this.stencilService.setShapes();
85
+ }
86
+ initializeSelection() {
87
+ this.clipboard = new window["joint"].ui.Clipboard();
88
+ this.selection = new window["joint"].ui.Selection({ paper: this.paper, useModelGeometry: true });
89
+ this.selection.collection.on('reset add remove', this.onSelectionChange.bind(this));
90
+ const keyboard = this.keyboardService.keyboard;
91
+ // Initiate selecting when the user grabs the blank area of the paper while the Shift key is pressed.
92
+ // Otherwise, initiate paper pan.
93
+ this.paper.on('blank:pointerdown', (evt, x, y) => {
94
+ if (keyboard.isActive('shift', evt)) {
95
+ this.selection.startSelecting(evt);
96
+ }
97
+ else {
98
+ this.selection.collection.reset([]);
99
+ this.paperScroller.startPanning(evt);
100
+ this.paper.removeTools();
101
+ }
102
+ });
103
+ this.paper.on('element:pointerdown', (elementView, evt) => {
104
+ // Select an element if CTRL/Meta key is pressed while the element is clicked.
105
+ if (keyboard.isActive('ctrl meta', evt)) {
106
+ this.selection.collection.add(elementView.model);
107
+ }
108
+ });
109
+ this.selection.on('selection-box:pointerdown', (elementView, evt) => {
110
+ // Unselect an element if the CTRL/Meta key is pressed while a selected element is clicked.
111
+ if (keyboard.isActive('ctrl meta', evt)) {
112
+ this.selection.collection.remove(elementView.model);
113
+ }
114
+ }, this);
115
+ }
116
+ onSelectionChange() {
117
+ const { paper, selection } = this;
118
+ const { collection } = selection;
119
+ paper.removeTools();
120
+ joint.ui.Halo.clear(paper);
121
+ joint.ui.FreeTransform.clear(paper);
122
+ joint.ui.Inspector.close();
123
+ if (collection.length === 1) {
124
+ const primaryCell = collection.first();
125
+ const primaryCellView = paper.requireView(primaryCell);
126
+ selection.destroySelectionBox(primaryCell);
127
+ this.selectPrimaryCell(primaryCellView);
128
+ }
129
+ else if (collection.length === 2) {
130
+ collection.each(function (cell) {
131
+ selection.createSelectionBox(cell);
132
+ });
133
+ }
134
+ }
135
+ selectPrimaryCell(cellView) {
136
+ const cell = cellView.model;
137
+ if (cell.isElement()) {
138
+ this.selectPrimaryElement(cellView);
139
+ }
140
+ else {
141
+ this.selectPrimaryLink(cellView);
142
+ }
143
+ this.inspectorService.create(cell);
144
+ }
145
+ selectPrimaryElement(elementView) {
146
+ const element = elementView.model;
147
+ new window["joint"].ui.FreeTransform({
148
+ cellView: elementView,
149
+ allowRotation: false,
150
+ preserveAspectRatio: !!element.get('preserveAspectRatio'),
151
+ allowOrthogonalResize: element.get('allowOrthogonalResize') !== false
152
+ }).render();
153
+ this.haloService.create(elementView);
154
+ }
155
+ selectPrimaryLink(linkView) {
156
+ const ns = joint.linkTools;
157
+ const toolsView = new joint.dia.ToolsView({
158
+ name: 'link-pointerdown',
159
+ tools: [
160
+ new ns.Vertices(),
161
+ new ns.SourceAnchor(),
162
+ new ns.TargetAnchor(),
163
+ new ns.SourceArrowhead(),
164
+ new ns.TargetArrowhead(),
165
+ new ns.Segments,
166
+ new ns.Boundary({ padding: 15 }),
167
+ new ns.Remove({ offset: -20, distance: 40 })
168
+ ]
169
+ });
170
+ linkView.addTools(toolsView);
171
+ }
172
+ initializeToolsAndInspector() {
173
+ this.paper.on('cell:pointerup', (cellView) => {
174
+ const cell = cellView.model;
175
+ const { collection } = this.selection;
176
+ if (collection.includes(cell)) {
177
+ return;
178
+ }
179
+ collection.reset([cell]);
180
+ });
181
+ this.paper.on('link:mouseenter', (linkView) => {
182
+ // Open tool only if there is none yet
183
+ if (linkView.hasTools()) {
184
+ return;
185
+ }
186
+ const ns = joint.linkTools;
187
+ const toolsView = new joint.dia.ToolsView({
188
+ name: 'link-hover',
189
+ tools: [
190
+ new ns.Vertices({ vertexAdding: false }),
191
+ new ns.SourceArrowhead(),
192
+ new ns.TargetArrowhead()
193
+ ]
194
+ });
195
+ linkView.addTools(toolsView);
196
+ });
197
+ this.paper.on('link:mouseleave', (linkView) => {
198
+ // Remove only the hover tool, not the pointerdown tool
199
+ if (linkView.hasTools('link-hover')) {
200
+ linkView.removeTools();
201
+ }
202
+ });
203
+ this.graph.on('change', (cell, opt) => {
204
+ if (!cell.isLink() || !opt.inspector) {
205
+ return;
206
+ }
207
+ const ns = joint.linkTools;
208
+ const toolsView = new joint.dia.ToolsView({
209
+ name: 'link-inspected',
210
+ tools: [
211
+ new ns.Boundary({ padding: 15 }),
212
+ ]
213
+ });
214
+ cell.findView(this.paper).addTools(toolsView);
215
+ });
216
+ }
217
+ initializeNavigator() {
218
+ const navigator = this.navigator = new joint.ui.Navigator({
219
+ width: 240,
220
+ height: 115,
221
+ paperScroller: this.paperScroller,
222
+ zoom: false,
223
+ paperOptions: {
224
+ async: true,
225
+ elementView: appShapes.NavigatorElementView,
226
+ linkView: appShapes.NavigatorLinkView,
227
+ cellViewNamespace: { /* no other views are accessible in the navigator */}
228
+ }
229
+ });
230
+ this.renderPlugin('.joint-navigator-container', navigator);
231
+ }
232
+ initializeToolbar() {
233
+ this.toolbarService.create(this.commandManager, this.paperScroller);
234
+ this.toolbarService.toolbar.on({
235
+ // 'svg:pointerclick': this.openAsSVG.bind(this),
236
+ // 'png:pointerclick': this.openAsPNG.bind(this),
237
+ 'to-front:pointerclick': this.applyOnSelection.bind(this, 'toFront'),
238
+ 'to-back:pointerclick': this.applyOnSelection.bind(this, 'toBack'),
239
+ 'layout:pointerclick': this.layoutDirectedGraph.bind(this),
240
+ 'snapline:change': this.changeSnapLines.bind(this),
241
+ 'clear:pointerclick': this.graph.clear.bind(this.graph),
242
+ 'print:pointerclick': this.paper.print.bind(this.paper),
243
+ 'grid-size:change': this.paper.setGridSize.bind(this.paper),
244
+ 'selectTemplate:option:select': this.onChangeTemplate,
245
+ 'deleteTemplate:pointerclick': this.onDeleteTemplate,
246
+ 'saveAsTemplate:pointerclick': this.onSaveAsTemplate,
247
+ 'resetTemplate:pointerclick': this.onResetTemplate
248
+ });
249
+ this.renderPlugin('.toolbar-container', this.toolbarService.toolbar);
250
+ }
251
+ applyOnSelection(method) {
252
+ this.graph.startBatch('selection');
253
+ this.selection.collection.models.forEach(function (model) { model[method](); });
254
+ this.graph.stopBatch('selection');
255
+ }
256
+ changeSnapLines(checked) {
257
+ if (checked) {
258
+ this.snaplines.startListening();
259
+ this.stencilService.stencil.options.snaplines = this.snaplines;
260
+ }
261
+ else {
262
+ this.snaplines.stopListening();
263
+ this.stencilService.stencil.options.snaplines = null;
264
+ }
265
+ }
266
+ initializeKeyboardShortcuts() {
267
+ this.keyboardService.create(this.graph, this.clipboard, this.selection, this.paperScroller, this.commandManager);
268
+ }
269
+ initializeTooltips() {
270
+ return new joint.ui.Tooltip({
271
+ rootTarget: document.getElementById('tooltipcontainer'),
272
+ target: '[data-tooltip]',
273
+ direction: joint.ui.Tooltip.TooltipArrowPosition.Auto,
274
+ padding: 10
275
+ });
276
+ }
277
+ initializeStencilTooltips() {
278
+ return new joint.ui.Tooltip({
279
+ rootTarget: document.getElementById('flowchartstencil'),
280
+ target: '[data-tooltip]',
281
+ direction: joint.ui.Tooltip.TooltipArrowPosition.Auto,
282
+ padding: 10
283
+ });
284
+ }
285
+ openAsSVG() {
286
+ this.paper.hideTools().toSVG((svg) => {
287
+ new joint.ui.Lightbox({
288
+ image: 'data:image/svg+xml,' + encodeURIComponent(svg),
289
+ downloadable: true,
290
+ fileName: 'Rappid'
291
+ }).open();
292
+ this.paper.showTools();
293
+ }, {
294
+ preserveDimensions: true,
295
+ convertImagesToDataUris: true,
296
+ useComputedStyles: false,
297
+ stylesheet: this.exportStylesheet
298
+ });
299
+ }
300
+ openAsPNG() {
301
+ this.paper.hideTools().toPNG((dataURL) => {
302
+ new joint.ui.Lightbox({
303
+ image: dataURL,
304
+ downloadable: true,
305
+ fileName: 'Rappid'
306
+ }).open();
307
+ this.paper.showTools();
308
+ }, {
309
+ padding: 10,
310
+ useComputedStyles: false,
311
+ stylesheet: this.exportStylesheet
312
+ });
313
+ }
314
+ onMousewheel(cellView, evt, ox, oy, delta) {
315
+ if (this.keyboardService.keyboard.isActive('alt', evt)) {
316
+ evt.preventDefault();
317
+ this.paperScroller.zoom(delta * 0.2, { min: 0.2, max: 5, grid: 0.2, ox, oy });
318
+ }
319
+ }
320
+ layoutDirectedGraph() {
321
+ joint.layout.DirectedGraph.layout(this.graph, {
322
+ graphlib: dagre.graphlib,
323
+ dagre: dagre,
324
+ setVertices: true,
325
+ rankDir: 'TB',
326
+ marginX: 100,
327
+ marginY: 100
328
+ });
329
+ this.paperScroller.centerContent();
330
+ }
331
+ renderPlugin(selector, plugin) {
332
+ this.el.querySelector(selector).appendChild(plugin.el);
333
+ plugin.render();
334
+ }
335
+ getImageContent() {
336
+ return __awaiter(this, void 0, void 0, function* () {
337
+ return new Promise((resolve) => {
338
+ this.paper.toPNG((imageData) => {
339
+ resolve(imageData);
340
+ });
341
+ });
342
+ });
343
+ }
344
+ getJsonContent() {
345
+ return JSON.stringify(this.graph.toJSON());
346
+ }
347
+ onChangeTemplate(event) {
348
+ if (event.jsonContent) {
349
+ window[FlowChartConst.KS_SELECTED_FLOWCHART_ID] = event.flowChartId;
350
+ window[FlowChartConst.KS_SELECTED_JSONCONTENT] = event.jsonContent;
351
+ window.postMessage(FlowChartConst.KS_CHANGE_TEMPLATE, '*');
352
+ }
353
+ }
354
+ onDeleteTemplate(event) {
355
+ if (window[FlowChartConst.KS_IS_SELECTED_TEMPLATE]) {
356
+ window.postMessage(FlowChartConst.KS_DELETE_TEMPLATE, '*');
357
+ }
358
+ else {
359
+ window.postMessage(FlowChartConst.MUST_SELECT_TEMPLATE, '*');
360
+ }
361
+ }
362
+ onSaveAsTemplate() {
363
+ window.postMessage(FlowChartConst.KS_SAVE_AS_TEMPLATE, '*');
364
+ }
365
+ onResetTemplate() {
366
+ if (window[FlowChartConst.KS_IS_SELECTED_TEMPLATE]) {
367
+ window.postMessage(FlowChartConst.KS_RESET_TEMPLATE, '*');
368
+ }
369
+ }
370
+ }
371
+ export default KitchenSinkService;
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0Y2hlbnNpbmstc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9zZXJ2aWNlL2tpdGNoZW5zaW5rLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7b0ZBVW9GOztBQUdwRixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQU1sRCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFNUIsTUFBTSxrQkFBa0I7SUFvQnRCLFlBQ0UsRUFBVyxFQUNYLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxXQUF3QixFQUN4QixlQUFnQztRQThUbEMsMkNBQTJDO1FBQzNDLHFCQUFnQixHQUFHLG1EQUFtRCxDQUFDO1FBN1RyRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLCtCQUErQjtRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2xCLDZCQUE2QixFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtTQUMxRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFFVCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsZUFBZTtRQUViLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDM0QsYUFBYSxFQUFFLFNBQVM7U0FDekIsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFvQixFQUFFLFVBQWUsRUFBRSxHQUFRLEVBQUUsRUFBRTtZQUNsRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUFFO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFL0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3ZELEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLElBQUk7WUFDWixRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLEtBQUs7WUFDWixpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLFdBQVcsRUFBa0IsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtZQUNyRCxzQkFBc0IsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQzFELFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDaEMsS0FBSyxFQUFFLElBQUk7WUFDWCxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07U0FDeEMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUM5RSxLQUFLO1lBQ0wsZUFBZSxFQUFFLElBQUk7WUFDckIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDckQsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQkFBaUI7UUFFZixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CO1FBRWpCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUUvQyxxR0FBcUc7UUFDckcsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBb0IsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUU7WUFFaEYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxXQUFrQyxFQUFFLEdBQW9CLEVBQUUsRUFBRTtZQUVoRyw4RUFBOEU7WUFDOUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRDtRQUVILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxXQUFrQyxFQUFFLEdBQW9CLEVBQUUsRUFBRTtZQUUxRywyRkFBMkY7WUFDM0YsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyRDtRQUVILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNsQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQW1CLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2RCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFvQjtnQkFDNUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBNEI7UUFDNUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQXdCLFFBQVEsQ0FBQyxDQUFDO1NBQzVEO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLENBQXFCLFFBQVEsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsV0FBa0M7UUFFckQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUVsQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ25DLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1lBQ3pELHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsS0FBSyxLQUFLO1NBQ3RFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVaLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUE0QjtRQUU1QyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRTtnQkFDckIsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFO2dCQUN4QixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxDQUFDLFFBQVE7Z0JBQ2YsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQzdDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsMkJBQTJCO1FBRXpCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBNEIsRUFBRSxFQUFFO1lBQy9ELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDNUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDdEMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUFFLE9BQU87YUFBRTtZQUMxQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBNEIsRUFBRSxFQUFFO1lBRWhFLHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFBRSxPQUFPO2FBQUU7WUFFcEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUN4QyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7aUJBQ3pCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBNEIsRUFBRSxFQUFFO1lBRWhFLHVEQUF1RDtZQUN2RCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ25DLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBb0IsRUFBRSxHQUFRLEVBQUUsRUFBRTtZQUV6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtnQkFBRSxPQUFPO2FBQUU7WUFFakQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUN4QyxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUNqQzthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFFakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3hELEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7WUFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsSUFBSSxFQUFFLEtBQUs7WUFDWCxZQUFZLEVBQUU7Z0JBQ1osS0FBSyxFQUFFLElBQUk7Z0JBQ1gsV0FBVyxFQUFFLFNBQVMsQ0FBQyxvQkFBb0I7Z0JBQzNDLFFBQVEsRUFBRSxTQUFTLENBQUMsaUJBQWlCO2dCQUNyQyxpQkFBaUIsRUFBRSxFQUFFLG9EQUFvRCxDQUFFO2FBQzVFO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsaUJBQWlCO1FBRWYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLGlEQUFpRDtZQUNqRCxpREFBaUQ7WUFDakQsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1lBQ3BFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUNsRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDM0QsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNyRCw2QkFBNkIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3BELDZCQUE2QixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDcEQsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDbkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFjO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFxQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUU5QixJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ2hFO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3REO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUV6QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDekIsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGtCQUFrQjtRQUVoQixPQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDMUIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUM7WUFDdkQsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSTtZQUNyRCxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUI7UUFFdkIsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQzFCLFVBQVUsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZELE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUk7WUFDckQsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBS0QsU0FBUztRQUVQLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDcEIsS0FBSyxFQUFFLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDdEQsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFO1lBQ0Qsa0JBQWtCLEVBQUUsSUFBSTtZQUN4Qix1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFFUCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQy9DLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxPQUFPO2dCQUNkLFlBQVksRUFBRSxJQUFJO2dCQUNsQixRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLENBQUMsRUFBRTtZQUNELE9BQU8sRUFBRSxFQUFFO1lBQ1gsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQTRCLEVBQUUsR0FBb0IsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEtBQWE7UUFFcEcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDL0U7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBRWpCLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzVDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEdBQUc7WUFDWixPQUFPLEVBQUUsR0FBRztTQUNiLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFnQixFQUFFLE1BQVc7UUFFeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVLLGVBQWU7O1lBQ25CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDcEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDcEIsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDNUQ7YUFDSTtZQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlEO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohIFJhcHBpZCB2My4yLjAgLSBIVE1MNSBEaWFncmFtbWluZyBGcmFtZXdvcmtcclxuXHJcbkNvcHlyaWdodCAoYykgMjAxNSBjbGllbnQgSU9cclxuXHJcbiAyMDIwLTA2LTEyXHJcblxyXG5cclxuVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBSYXBwaWQgTGljZW5zZVxyXG4sIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBSYXBwaWQgTGljZW5zZSB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xyXG5maWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL2pvaW50anMuY29tL2xpY2Vuc2UvcmFwcGlkX3YyLnR4dFxyXG4gb3IgZnJvbSB0aGUgUmFwcGlkIGFyY2hpdmUgYXMgd2FzIGRpc3RyaWJ1dGVkIGJ5IGNsaWVudCBJTy4gU2VlIHRoZSBMSUNFTlNFIGZpbGUuKi9cclxuXHJcblxyXG5pbXBvcnQgKiBhcyBkYWdyZSBmcm9tICdkYWdyZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3QnO1xyXG5pbXBvcnQgKiBhcyBhcHBTaGFwZXMgZnJvbSAnLi4vc2hhcGVzL2FwcC1zaGFwZXMnO1xyXG5pbXBvcnQgeyBIYWxvU2VydmljZSB9IGZyb20gJy4vaGFsby1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW5zcGVjdG9yU2VydmljZSB9IGZyb20gJy4vaW5zcGVjdG9yLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlib2FyZFNlcnZpY2UgfSBmcm9tICcuL2tleWJvYXJkLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGVuY2lsU2VydmljZSB9IGZyb20gJy4vc3RlbmNpbC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9vbGJhclNlcnZpY2UgfSBmcm9tICcuL3Rvb2xiYXItc2VydmljZSc7XHJcbnZhciBqb2ludCA9IHdpbmRvd1snam9pbnQnXTtcclxuXHJcbmNsYXNzIEtpdGNoZW5TaW5rU2VydmljZSB7XHJcblxyXG4gIGVsOiBFbGVtZW50O1xyXG5cclxuICBncmFwaDogam9pbnQuZGlhLkdyYXBoO1xyXG4gIHBhcGVyOiBqb2ludC5kaWEuUGFwZXI7XHJcbiAgcGFwZXJTY3JvbGxlcjogam9pbnQudWkuUGFwZXJTY3JvbGxlcjtcclxuXHJcbiAgY29tbWFuZE1hbmFnZXI6IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlcjtcclxuICBzbmFwbGluZXM6IGpvaW50LnVpLlNuYXBsaW5lcztcclxuICBjbGlwYm9hcmQ6IGpvaW50LnVpLkNsaXBib2FyZDtcclxuICBzZWxlY3Rpb246IGpvaW50LnVpLlNlbGVjdGlvbjtcclxuICBuYXZpZ2F0b3I6IGpvaW50LnVpLk5hdmlnYXRvcjtcclxuXHJcbiAgc3RlbmNpbFNlcnZpY2U6IFN0ZW5jaWxTZXJ2aWNlO1xyXG4gIHRvb2xiYXJTZXJ2aWNlOiBUb29sYmFyU2VydmljZTtcclxuICBpbnNwZWN0b3JTZXJ2aWNlOiBJbnNwZWN0b3JTZXJ2aWNlO1xyXG4gIGhhbG9TZXJ2aWNlOiBIYWxvU2VydmljZTtcclxuICBrZXlib2FyZFNlcnZpY2U6IEtleWJvYXJkU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbDogRWxlbWVudCxcclxuICAgIHN0ZW5jaWxTZXJ2aWNlOiBTdGVuY2lsU2VydmljZSxcclxuICAgIHRvb2xiYXJTZXJ2aWNlOiBUb29sYmFyU2VydmljZSxcclxuICAgIGluc3BlY3RvclNlcnZpY2U6IEluc3BlY3RvclNlcnZpY2UsXHJcbiAgICBoYWxvU2VydmljZTogSGFsb1NlcnZpY2UsXHJcbiAgICBrZXlib2FyZFNlcnZpY2U6IEtleWJvYXJkU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5lbCA9IGVsO1xyXG4gICAgLy8gYXBwbHkgY3VycmVudCBqb2ludCBqcyB0aGVtZVxyXG4gICAgY29uc3QgdmlldyA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS5tdmMuVmlldyh7IGVsIH0pO1xyXG4gICAgdmlldy5kZWxlZ2F0ZUV2ZW50cyh7XHJcbiAgICAgICdtb3VzZXVwIGlucHV0W3R5cGU9XCJyYW5nZVwiXSc6IChldnQpID0+IGV2dC50YXJnZXQuYmx1cigpXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0ZW5jaWxTZXJ2aWNlID0gc3RlbmNpbFNlcnZpY2U7XHJcbiAgICB0aGlzLnRvb2xiYXJTZXJ2aWNlID0gdG9vbGJhclNlcnZpY2U7XHJcbiAgICB0aGlzLmluc3BlY3RvclNlcnZpY2UgPSBpbnNwZWN0b3JTZXJ2aWNlO1xyXG4gICAgdGhpcy5oYWxvU2VydmljZSA9IGhhbG9TZXJ2aWNlO1xyXG4gICAgdGhpcy5rZXlib2FyZFNlcnZpY2UgPSBrZXlib2FyZFNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBzdGFydFJhcHBpZCgpIHtcclxuXHJcbiAgICB3aW5kb3dbXCJqb2ludFwiXS5zZXRUaGVtZSgnbW9kZXJuJyk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplUGFwZXIoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZW5jaWwoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGlvbigpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplVG9vbHNBbmRJbnNwZWN0b3IoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZU5hdmlnYXRvcigpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplVG9vbGJhcigpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplS2V5Ym9hcmRTaG9ydGN1dHMoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRvb2x0aXBzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGVuY2lsVG9vbHRpcHMoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVQYXBlcigpIHtcclxuXHJcbiAgICBjb25zdCBncmFwaCA9IHRoaXMuZ3JhcGggPSBuZXcgd2luZG93W1wiam9pbnRcIl0uZGlhLkdyYXBoKHt9LCB7XHJcbiAgICAgIGNlbGxOYW1lc3BhY2U6IGFwcFNoYXBlc1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ3JhcGgub24oJ2FkZCcsIChjZWxsOiBqb2ludC5kaWEuQ2VsbCwgY29sbGVjdGlvbjogYW55LCBvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAob3B0LnN0ZW5jaWwpIHsgdGhpcy5pbnNwZWN0b3JTZXJ2aWNlLmNyZWF0ZShjZWxsKTsgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb21tYW5kTWFuYWdlciA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS5kaWEuQ29tbWFuZE1hbmFnZXIoeyBncmFwaDogZ3JhcGggfSk7XHJcblxyXG4gICAgY29uc3QgcGFwZXIgPSB0aGlzLnBhcGVyID0gbmV3IHdpbmRvd1tcImpvaW50XCJdLmRpYS5QYXBlcih7XHJcbiAgICAgIHdpZHRoOiAxMDAwLFxyXG4gICAgICBoZWlnaHQ6IDEwMDAsXHJcbiAgICAgIGdyaWRTaXplOiAxMCxcclxuICAgICAgZHJhd0dyaWQ6IHRydWUsXHJcbiAgICAgIG1vZGVsOiBncmFwaCxcclxuICAgICAgY2VsbFZpZXdOYW1lc3BhY2U6IGFwcFNoYXBlcyxcclxuICAgICAgZGVmYXVsdExpbms6IDxqb2ludC5kaWEuTGluaz5uZXcgYXBwU2hhcGVzLmFwcC5MaW5rKCksXHJcbiAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IGFwcFNoYXBlcy5hcHAuTGluay5jb25uZWN0aW9uUG9pbnQsXHJcbiAgICAgIGludGVyYWN0aXZlOiB7IGxpbmtNb3ZlOiBmYWxzZSB9LFxyXG4gICAgICBhc3luYzogdHJ1ZSxcclxuICAgICAgc29ydGluZzogam9pbnQuZGlhLlBhcGVyLnNvcnRpbmcuQVBQUk9YXHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXBlci5vbignYmxhbms6bW91c2V3aGVlbCcsIF8ucGFydGlhbCh0aGlzLm9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xyXG4gICAgcGFwZXIub24oJ2NlbGw6bW91c2V3aGVlbCcsIHRoaXMub25Nb3VzZXdoZWVsLmJpbmQodGhpcykpO1xyXG5cclxuICAgIHRoaXMuc25hcGxpbmVzID0gbmV3IHdpbmRvd1tcImpvaW50XCJdLnVpLlNuYXBsaW5lcyh7IHBhcGVyOiBwYXBlciB9KTtcclxuXHJcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gdGhpcy5wYXBlclNjcm9sbGVyID0gbmV3IHdpbmRvd1tcImpvaW50XCJdLnVpLlBhcGVyU2Nyb2xsZXIoe1xyXG4gICAgICBwYXBlcixcclxuICAgICAgYXV0b1Jlc2l6ZVBhcGVyOiB0cnVlLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlLFxyXG4gICAgICBjdXJzb3I6ICdncmFiJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJQbHVnaW4oJy5wYXBlci1jb250YWluZXInLCBwYXBlclNjcm9sbGVyKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RlbmNpbCgpIHtcclxuXHJcbiAgICB0aGlzLnN0ZW5jaWxTZXJ2aWNlLmNyZWF0ZSh0aGlzLnBhcGVyU2Nyb2xsZXIsIHRoaXMuc25hcGxpbmVzKTtcclxuICAgIHRoaXMucmVuZGVyUGx1Z2luKCcuc3RlbmNpbC1jb250YWluZXInLCB0aGlzLnN0ZW5jaWxTZXJ2aWNlLnN0ZW5jaWwpO1xyXG4gICAgdGhpcy5zdGVuY2lsU2VydmljZS5zZXRTaGFwZXMoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVTZWxlY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5jbGlwYm9hcmQgPSBuZXcgd2luZG93W1wiam9pbnRcIl0udWkuQ2xpcGJvYXJkKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS51aS5TZWxlY3Rpb24oeyBwYXBlcjogdGhpcy5wYXBlciwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24ub24oJ3Jlc2V0IGFkZCByZW1vdmUnLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xyXG5cclxuICAgIGNvbnN0IGtleWJvYXJkID0gdGhpcy5rZXlib2FyZFNlcnZpY2Uua2V5Ym9hcmQ7XHJcblxyXG4gICAgLy8gSW5pdGlhdGUgc2VsZWN0aW5nIHdoZW4gdGhlIHVzZXIgZ3JhYnMgdGhlIGJsYW5rIGFyZWEgb2YgdGhlIHBhcGVyIHdoaWxlIHRoZSBTaGlmdCBrZXkgaXMgcHJlc3NlZC5cclxuICAgIC8vIE90aGVyd2lzZSwgaW5pdGlhdGUgcGFwZXIgcGFuLlxyXG4gICAgdGhpcy5wYXBlci5vbignYmxhbms6cG9pbnRlcmRvd24nLCAoZXZ0OiBqb2ludC5kaWEuRXZlbnQsIHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcblxyXG4gICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChbXSk7XHJcbiAgICAgICAgdGhpcy5wYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQpO1xyXG4gICAgICAgIHRoaXMucGFwZXIucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYXBlci5vbignZWxlbWVudDpwb2ludGVyZG93bicsIChlbGVtZW50Vmlldzogam9pbnQuZGlhLkVsZW1lbnRWaWV3LCBldnQ6IGpvaW50LmRpYS5FdmVudCkgPT4ge1xyXG5cclxuICAgICAgLy8gU2VsZWN0IGFuIGVsZW1lbnQgaWYgQ1RSTC9NZXRhIGtleSBpcyBwcmVzc2VkIHdoaWxlIHRoZSBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24uYWRkKGVsZW1lbnRWaWV3Lm1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uLm9uKCdzZWxlY3Rpb24tYm94OnBvaW50ZXJkb3duJywgKGVsZW1lbnRWaWV3OiBqb2ludC5kaWEuRWxlbWVudFZpZXcsIGV2dDogam9pbnQuZGlhLkV2ZW50KSA9PiB7XHJcblxyXG4gICAgICAvLyBVbnNlbGVjdCBhbiBlbGVtZW50IGlmIHRoZSBDVFJML01ldGEga2V5IGlzIHByZXNzZWQgd2hpbGUgYSBzZWxlY3RlZCBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVtb3ZlKGVsZW1lbnRWaWV3Lm1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoKSB7XHJcbiAgICBjb25zdCB7IHBhcGVyLCBzZWxlY3Rpb24gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IGNvbGxlY3Rpb24gfSA9IHNlbGVjdGlvbjtcclxuICAgIHBhcGVyLnJlbW92ZVRvb2xzKCk7XHJcbiAgICBqb2ludC51aS5IYWxvLmNsZWFyKHBhcGVyKTtcclxuICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xyXG4gICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgcHJpbWFyeUNlbGw6IGpvaW50LmRpYS5DZWxsID0gY29sbGVjdGlvbi5maXJzdCgpO1xyXG4gICAgICBjb25zdCBwcmltYXJ5Q2VsbFZpZXcgPSBwYXBlci5yZXF1aXJlVmlldyhwcmltYXJ5Q2VsbCk7XHJcbiAgICAgIHNlbGVjdGlvbi5kZXN0cm95U2VsZWN0aW9uQm94KHByaW1hcnlDZWxsKTtcclxuICAgICAgdGhpcy5zZWxlY3RQcmltYXJ5Q2VsbChwcmltYXJ5Q2VsbFZpZXcpO1xyXG4gICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICBjb2xsZWN0aW9uLmVhY2goZnVuY3Rpb24gKGNlbGw6IGpvaW50LmRpYS5DZWxsKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLmNyZWF0ZVNlbGVjdGlvbkJveChjZWxsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcmltYXJ5Q2VsbChjZWxsVmlldzogam9pbnQuZGlhLkNlbGxWaWV3KSB7XHJcbiAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XHJcbiAgICBpZiAoY2VsbC5pc0VsZW1lbnQoKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdFByaW1hcnlFbGVtZW50KDxqb2ludC5kaWEuRWxlbWVudFZpZXc+Y2VsbFZpZXcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RQcmltYXJ5TGluayg8am9pbnQuZGlhLkxpbmtWaWV3PmNlbGxWaWV3KTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5zcGVjdG9yU2VydmljZS5jcmVhdGUoY2VsbCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcmltYXJ5RWxlbWVudChlbGVtZW50Vmlldzogam9pbnQuZGlhLkVsZW1lbnRWaWV3KSB7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRWaWV3Lm1vZGVsO1xyXG5cclxuICAgIG5ldyB3aW5kb3dbXCJqb2ludFwiXS51aS5GcmVlVHJhbnNmb3JtKHtcclxuICAgICAgY2VsbFZpZXc6IGVsZW1lbnRWaWV3LFxyXG4gICAgICBhbGxvd1JvdGF0aW9uOiBmYWxzZSxcclxuICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogISFlbGVtZW50LmdldCgncHJlc2VydmVBc3BlY3RSYXRpbycpLFxyXG4gICAgICBhbGxvd09ydGhvZ29uYWxSZXNpemU6IGVsZW1lbnQuZ2V0KCdhbGxvd09ydGhvZ29uYWxSZXNpemUnKSAhPT0gZmFsc2VcclxuICAgIH0pLnJlbmRlcigpO1xyXG5cclxuICAgIHRoaXMuaGFsb1NlcnZpY2UuY3JlYXRlKGVsZW1lbnRWaWV3KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFByaW1hcnlMaW5rKGxpbmtWaWV3OiBqb2ludC5kaWEuTGlua1ZpZXcpIHtcclxuXHJcbiAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcclxuICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgbmFtZTogJ2xpbmstcG9pbnRlcmRvd24nLFxyXG4gICAgICB0b29sczogW1xyXG4gICAgICAgIG5ldyBucy5WZXJ0aWNlcygpLFxyXG4gICAgICAgIG5ldyBucy5Tb3VyY2VBbmNob3IoKSxcclxuICAgICAgICBuZXcgbnMuVGFyZ2V0QW5jaG9yKCksXHJcbiAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgIG5ldyBucy5UYXJnZXRBcnJvd2hlYWQoKSxcclxuICAgICAgICBuZXcgbnMuU2VnbWVudHMsXHJcbiAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgbmV3IG5zLlJlbW92ZSh7IG9mZnNldDogLTIwLCBkaXN0YW5jZTogNDAgfSlcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGlua1ZpZXcuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVUb29sc0FuZEluc3BlY3RvcigpIHtcclxuXHJcbiAgICB0aGlzLnBhcGVyLm9uKCdjZWxsOnBvaW50ZXJ1cCcsIChjZWxsVmlldzogam9pbnQuZGlhLkNlbGxWaWV3KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcclxuICAgICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSB0aGlzLnNlbGVjdGlvbjtcclxuICAgICAgaWYgKGNvbGxlY3Rpb24uaW5jbHVkZXMoY2VsbCkpIHsgcmV0dXJuOyB9XHJcbiAgICAgIGNvbGxlY3Rpb24ucmVzZXQoW2NlbGxdKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFwZXIub24oJ2xpbms6bW91c2VlbnRlcicsIChsaW5rVmlldzogam9pbnQuZGlhLkxpbmtWaWV3KSA9PiB7XHJcblxyXG4gICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxyXG4gICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoKSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxyXG4gICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICBuZXcgbnMuVmVydGljZXMoeyB2ZXJ0ZXhBZGRpbmc6IGZhbHNlIH0pLFxyXG4gICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhcGVyLm9uKCdsaW5rOm1vdXNlbGVhdmUnLCAobGlua1ZpZXc6IGpvaW50LmRpYS5MaW5rVmlldykgPT4ge1xyXG5cclxuICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xyXG4gICAgICAgIGxpbmtWaWV3LnJlbW92ZVRvb2xzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JhcGgub24oJ2NoYW5nZScsIChjZWxsOiBqb2ludC5kaWEuQ2VsbCwgb3B0OiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGlmICghY2VsbC5pc0xpbmsoKSB8fCAhb3B0Lmluc3BlY3RvcikgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgbmFtZTogJ2xpbmstaW5zcGVjdGVkJyxcclxuICAgICAgICB0b29sczogW1xyXG4gICAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNlbGwuZmluZFZpZXcodGhpcy5wYXBlcikuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZU5hdmlnYXRvcigpIHtcclxuXHJcbiAgICBjb25zdCBuYXZpZ2F0b3IgPSB0aGlzLm5hdmlnYXRvciA9IG5ldyBqb2ludC51aS5OYXZpZ2F0b3Ioe1xyXG4gICAgICB3aWR0aDogMjQwLFxyXG4gICAgICBoZWlnaHQ6IDExNSxcclxuICAgICAgcGFwZXJTY3JvbGxlcjogdGhpcy5wYXBlclNjcm9sbGVyLFxyXG4gICAgICB6b29tOiBmYWxzZSxcclxuICAgICAgcGFwZXJPcHRpb25zOiB7XHJcbiAgICAgICAgYXN5bmM6IHRydWUsXHJcbiAgICAgICAgZWxlbWVudFZpZXc6IGFwcFNoYXBlcy5OYXZpZ2F0b3JFbGVtZW50VmlldyxcclxuICAgICAgICBsaW5rVmlldzogYXBwU2hhcGVzLk5hdmlnYXRvckxpbmtWaWV3LFxyXG4gICAgICAgIGNlbGxWaWV3TmFtZXNwYWNlOiB7IC8qIG5vIG90aGVyIHZpZXdzIGFyZSBhY2Nlc3NpYmxlIGluIHRoZSBuYXZpZ2F0b3IgKi8gfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlbmRlclBsdWdpbignLmpvaW50LW5hdmlnYXRvci1jb250YWluZXInLCBuYXZpZ2F0b3IpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVRvb2xiYXIoKSB7XHJcblxyXG4gICAgdGhpcy50b29sYmFyU2VydmljZS5jcmVhdGUodGhpcy5jb21tYW5kTWFuYWdlciwgdGhpcy5wYXBlclNjcm9sbGVyKTtcclxuXHJcbiAgICB0aGlzLnRvb2xiYXJTZXJ2aWNlLnRvb2xiYXIub24oe1xyXG4gICAgICAvLyAnc3ZnOnBvaW50ZXJjbGljayc6IHRoaXMub3BlbkFzU1ZHLmJpbmQodGhpcyksXHJcbiAgICAgIC8vICdwbmc6cG9pbnRlcmNsaWNrJzogdGhpcy5vcGVuQXNQTkcuYmluZCh0aGlzKSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRoaXMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0Zyb250JyksXHJcbiAgICAgICd0by1iYWNrOnBvaW50ZXJjbGljayc6IHRoaXMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0JhY2snKSxcclxuICAgICAgJ2xheW91dDpwb2ludGVyY2xpY2snOiB0aGlzLmxheW91dERpcmVjdGVkR3JhcGguYmluZCh0aGlzKSxcclxuICAgICAgJ3NuYXBsaW5lOmNoYW5nZSc6IHRoaXMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0aGlzLmdyYXBoLmNsZWFyLmJpbmQodGhpcy5ncmFwaCksXHJcbiAgICAgICdwcmludDpwb2ludGVyY2xpY2snOiB0aGlzLnBhcGVyLnByaW50LmJpbmQodGhpcy5wYXBlciksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogdGhpcy5wYXBlci5zZXRHcmlkU2l6ZS5iaW5kKHRoaXMucGFwZXIpLFxyXG4gICAgICAnc2VsZWN0VGVtcGxhdGU6b3B0aW9uOnNlbGVjdCc6IHRoaXMub25DaGFuZ2VUZW1wbGF0ZSxcclxuICAgICAgJ2RlbGV0ZVRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRoaXMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3NhdmVBc1RlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRoaXMub25TYXZlQXNUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdGhpcy5vblJlc2V0VGVtcGxhdGVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyUGx1Z2luKCcudG9vbGJhci1jb250YWluZXInLCB0aGlzLnRvb2xiYXJTZXJ2aWNlLnRvb2xiYXIpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPblNlbGVjdGlvbihtZXRob2Q6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmFwaC5zdGFydEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsOiBqb2ludC5kaWEuQ2VsbCkgeyBtb2RlbFttZXRob2RdKCk7IH0pO1xyXG4gICAgdGhpcy5ncmFwaC5zdG9wQmF0Y2goJ3NlbGVjdGlvbicpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU25hcExpbmVzKGNoZWNrZWQ6IGJvb2xlYW4pIHtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNuYXBsaW5lcy5zdGFydExpc3RlbmluZygpO1xyXG4gICAgICB0aGlzLnN0ZW5jaWxTZXJ2aWNlLnN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgdGhpcy5zdGVuY2lsU2VydmljZS5zdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuXHJcbiAgICB0aGlzLmtleWJvYXJkU2VydmljZS5jcmVhdGUoXHJcbiAgICAgIHRoaXMuZ3JhcGgsIHRoaXMuY2xpcGJvYXJkLCB0aGlzLnNlbGVjdGlvbiwgdGhpcy5wYXBlclNjcm9sbGVyLCB0aGlzLmNvbW1hbmRNYW5hZ2VyKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVUb29sdGlwcygpOiBqb2ludC51aS5Ub29sdGlwIHtcclxuXHJcbiAgICByZXR1cm4gbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICByb290VGFyZ2V0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbHRpcGNvbnRhaW5lcicpLFxyXG4gICAgICB0YXJnZXQ6ICdbZGF0YS10b29sdGlwXScsXHJcbiAgICAgIGRpcmVjdGlvbjogam9pbnQudWkuVG9vbHRpcC5Ub29sdGlwQXJyb3dQb3NpdGlvbi5BdXRvLFxyXG4gICAgICBwYWRkaW5nOiAxMFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RlbmNpbFRvb2x0aXBzKCk6IGpvaW50LnVpLlRvb2x0aXAge1xyXG5cclxuICAgIHJldHVybiBuZXcgam9pbnQudWkuVG9vbHRpcCh7XHJcbiAgICAgIHJvb3RUYXJnZXQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbG93Y2hhcnRzdGVuY2lsJyksXHJcbiAgICAgIHRhcmdldDogJ1tkYXRhLXRvb2x0aXBdJyxcclxuICAgICAgZGlyZWN0aW9uOiBqb2ludC51aS5Ub29sdGlwLlRvb2x0aXBBcnJvd1Bvc2l0aW9uLkF1dG8sXHJcbiAgICAgIHBhZGRpbmc6IDEwXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGRlciBzaGFwZXNcclxuICBleHBvcnRTdHlsZXNoZWV0ID0gJy5zY2FsYWJsZSAqIHsgdmVjdG9yLWVmZmVjdDogbm9uLXNjYWxpbmctc3Ryb2tlIH0nO1xyXG5cclxuICBvcGVuQXNTVkcoKSB7XHJcblxyXG4gICAgdGhpcy5wYXBlci5oaWRlVG9vbHMoKS50b1NWRygoc3ZnOiBzdHJpbmcpID0+IHtcclxuICAgICAgbmV3IGpvaW50LnVpLkxpZ2h0Ym94KHtcclxuICAgICAgICBpbWFnZTogJ2RhdGE6aW1hZ2Uvc3ZnK3htbCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHN2ZyksXHJcbiAgICAgICAgZG93bmxvYWRhYmxlOiB0cnVlLFxyXG4gICAgICAgIGZpbGVOYW1lOiAnUmFwcGlkJ1xyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIHRoaXMucGFwZXIuc2hvd1Rvb2xzKCk7XHJcbiAgICB9LCB7XHJcbiAgICAgIHByZXNlcnZlRGltZW5zaW9uczogdHJ1ZSxcclxuICAgICAgY29udmVydEltYWdlc1RvRGF0YVVyaXM6IHRydWUsXHJcbiAgICAgIHVzZUNvbXB1dGVkU3R5bGVzOiBmYWxzZSxcclxuICAgICAgc3R5bGVzaGVldDogdGhpcy5leHBvcnRTdHlsZXNoZWV0XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Bc1BORygpIHtcclxuXHJcbiAgICB0aGlzLnBhcGVyLmhpZGVUb29scygpLnRvUE5HKChkYXRhVVJMOiBzdHJpbmcpID0+IHtcclxuICAgICAgbmV3IGpvaW50LnVpLkxpZ2h0Ym94KHtcclxuICAgICAgICBpbWFnZTogZGF0YVVSTCxcclxuICAgICAgICBkb3dubG9hZGFibGU6IHRydWUsXHJcbiAgICAgICAgZmlsZU5hbWU6ICdSYXBwaWQnXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgICAgdGhpcy5wYXBlci5zaG93VG9vbHMoKTtcclxuICAgIH0sIHtcclxuICAgICAgcGFkZGluZzogMTAsXHJcbiAgICAgIHVzZUNvbXB1dGVkU3R5bGVzOiBmYWxzZSxcclxuICAgICAgc3R5bGVzaGVldDogdGhpcy5leHBvcnRTdHlsZXNoZWV0XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2V3aGVlbChjZWxsVmlldzogam9pbnQuZGlhLkNlbGxWaWV3LCBldnQ6IGpvaW50LmRpYS5FdmVudCwgb3g6IG51bWJlciwgb3k6IG51bWJlciwgZGVsdGE6IG51bWJlcikge1xyXG5cclxuICAgIGlmICh0aGlzLmtleWJvYXJkU2VydmljZS5rZXlib2FyZC5pc0FjdGl2ZSgnYWx0JywgZXZ0KSkge1xyXG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5wYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjIsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4yLCBveCwgb3kgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsYXlvdXREaXJlY3RlZEdyYXBoKCkge1xyXG5cclxuICAgIGpvaW50LmxheW91dC5EaXJlY3RlZEdyYXBoLmxheW91dCh0aGlzLmdyYXBoLCB7XHJcbiAgICAgIGdyYXBobGliOiBkYWdyZS5ncmFwaGxpYixcclxuICAgICAgZGFncmU6IGRhZ3JlLFxyXG4gICAgICBzZXRWZXJ0aWNlczogdHJ1ZSxcclxuICAgICAgcmFua0RpcjogJ1RCJyxcclxuICAgICAgbWFyZ2luWDogMTAwLFxyXG4gICAgICBtYXJnaW5ZOiAxMDBcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFwZXJTY3JvbGxlci5jZW50ZXJDb250ZW50KCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbHVnaW4oc2VsZWN0b3I6IHN0cmluZywgcGx1Z2luOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpLmFwcGVuZENoaWxkKHBsdWdpbi5lbCk7XHJcbiAgICBwbHVnaW4ucmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRJbWFnZUNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5wYXBlci50b1BORygoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShpbWFnZURhdGEpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SnNvbkNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5ncmFwaC50b0pTT04oKSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVRlbXBsYXRlKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuanNvbkNvbnRlbnQpIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0ZMT1dDSEFSVF9JRF0gPSBldmVudC5mbG93Q2hhcnRJZDtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0pTT05DT05URU5UXSA9IGV2ZW50Lmpzb25Db250ZW50O1xyXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuS1NfQ0hBTkdFX1RFTVBMQVRFLCAnKicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EZWxldGVUZW1wbGF0ZShldmVudCkge1xyXG4gICAgaWYgKHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19JU19TRUxFQ1RFRF9URU1QTEFURV0pIHtcclxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LktTX0RFTEVURV9URU1QTEFURSwgJyonKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsICcqJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNhdmVBc1RlbXBsYXRlKCkge1xyXG4gICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LktTX1NBVkVfQVNfVEVNUExBVEUsICcqJyk7XHJcbiAgfVxyXG5cclxuICBvblJlc2V0VGVtcGxhdGUoKSB7XHJcbiAgICBpZiAod2luZG93W0Zsb3dDaGFydENvbnN0LktTX0lTX1NFTEVDVEVEX1RFTVBMQVRFXSkge1xyXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuS1NfUkVTRVRfVEVNUExBVEUsICcqJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBLaXRjaGVuU2lua1NlcnZpY2U7XHJcbiJdfQ==