@talrace/ngx-noder 0.0.17 → 0.0.19

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 (305) hide show
  1. package/README.md +72 -9
  2. package/assets/i18n/noder.en.json +93 -0
  3. package/assets/i18n/noder.es.json +93 -0
  4. package/assets/i18n/noder.ru.json +93 -0
  5. package/fesm2022/talrace-ngx-noder.mjs +371 -298
  6. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  7. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +1 -10
  8. package/lib/apart-components/editor-title/editor-title.component.d.ts +5 -3
  9. package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +1 -1
  10. package/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.d.ts +3 -1
  11. package/lib/apart-components/editor-toolbar/editor-toolbar.module.d.ts +23 -23
  12. package/lib/editor/components/edges/edge.component.d.ts +10 -3
  13. package/lib/editor/components/edges/edges.d.ts +0 -2
  14. package/lib/editor/components/external-element/external.component.d.ts +1 -1
  15. package/lib/editor/components/external-element/models/external-element.model.d.ts +3 -3
  16. package/lib/editor/components/shared/abstract/base.component.d.ts +1 -1
  17. package/lib/editor/components/shared/abstract/destroy.component.d.ts +1 -1
  18. package/lib/editor/components/table/overlay-menu/overlay-menu.component.d.ts +3 -1
  19. package/lib/editor/editor.module.d.ts +2 -1
  20. package/lib/editor/gadgets/scrollbar.d.ts +1 -0
  21. package/lib/translate/noder-translate.loader.d.ts +11 -0
  22. package/package.json +3 -3
  23. package/public-api.d.ts +1 -0
  24. package/src/lib/apart-components/add-link-dialog/_add-link-dialog.theme.scss +3 -6
  25. package/src/lib/apart-components/add-link-mobile/_add-link-mobile.theme.scss +4 -7
  26. package/src/lib/apart-components/confirm-dialog/_theme.scss +6 -9
  27. package/src/lib/apart-components/editor-title/_editor-title.theme.scss +6 -9
  28. package/src/lib/apart-components/editor-title-mobile/_editor-title-mobile.theme.scss +9 -12
  29. package/src/lib/apart-components/editor-toolbar/_editor-toolbar.theme.scss +5 -8
  30. package/src/lib/apart-components/editor-toolbar/components/buttons/color-picker/_color-picker.theme.scss +1 -3
  31. package/src/lib/apart-components/editor-toolbar/components/buttons/font/_font.theme.scss +1 -3
  32. package/src/lib/apart-components/editor-toolbar/components/buttons/font-size/_font-size.theme.scss +2 -5
  33. package/src/lib/apart-components/editor-toolbar/components/buttons/font-style/_font-style.theme.scss +3 -6
  34. package/src/lib/apart-components/editor-toolbar/components/buttons/format/_format.theme.scss +3 -6
  35. package/src/lib/apart-components/editor-toolbar/components/buttons/numbering/_numbering.theme.scss +15 -18
  36. package/src/lib/apart-components/editor-toolbar/components/buttons/undo-redo/_undo-redo.theme.scss +2 -4
  37. package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +5 -8
  38. package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/_menu-dropdowns-mobile.theme.scss +6 -9
  39. package/src/lib/apart-components/editor-toolbar/components/toolbar-actions/_toolbar-actions.theme.scss +3 -6
  40. package/src/lib/apart-components/insert-table/_insert-table.theme.scss +6 -9
  41. package/src/lib/apart-components/insert-table-mobile/_insert-table-mobile.theme.scss +12 -15
  42. package/src/lib/apart-components/text-format-mobile/_text-format-mobile.theme.scss +22 -25
  43. package/src/lib/editor/components/_editor.theme.scss +25 -28
  44. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +0 -73
  45. package/esm2022/lib/apart-components/add-link-dialog/validation.helper.mjs +0 -7
  46. package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +0 -47
  47. package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +0 -32
  48. package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +0 -64
  49. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +0 -92
  50. package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +0 -22
  51. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +0 -117
  52. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +0 -37
  53. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +0 -49
  54. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +0 -90
  55. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-style/font-style.component.mjs +0 -81
  56. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +0 -28
  57. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/heading/heading.component.mjs +0 -22
  58. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +0 -53
  59. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/print/print.component.mjs +0 -18
  60. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/undo-redo/undo-redo.component.mjs +0 -27
  61. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/zoom/zoom.component.mjs +0 -71
  62. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +0 -106
  63. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +0 -24
  64. package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +0 -65
  65. package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +0 -84
  66. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +0 -90
  67. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +0 -127
  68. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.mjs +0 -8
  69. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/numbering-templates.const.mjs +0 -1148
  70. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/svg-icons.const.mjs +0 -157
  71. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/alignment.enum.mjs +0 -8
  72. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.mjs +0 -11
  73. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-template-type.enum.mjs +0 -16
  74. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-type.enum.mjs +0 -6
  75. package/esm2022/lib/apart-components/editor-toolbar/shared/services/custom-icon.service.mjs +0 -34
  76. package/esm2022/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.mjs +0 -26
  77. package/esm2022/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.mjs +0 -60
  78. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +0 -48
  79. package/esm2022/lib/apart-components/insert-table/insert-table.component.mjs +0 -54
  80. package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +0 -84
  81. package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +0 -123
  82. package/esm2022/lib/editor/components/edges/edge-element.model.mjs +0 -38
  83. package/esm2022/lib/editor/components/edges/edge-type.enum.mjs +0 -6
  84. package/esm2022/lib/editor/components/edges/edge.component.mjs +0 -99
  85. package/esm2022/lib/editor/components/edges/edges.mjs +0 -142
  86. package/esm2022/lib/editor/components/edges/page-type.enum.mjs +0 -7
  87. package/esm2022/lib/editor/components/editor.component.mjs +0 -112
  88. package/esm2022/lib/editor/components/external-element/external-element.service.mjs +0 -6
  89. package/esm2022/lib/editor/components/external-element/external-elements.const.mjs +0 -4
  90. package/esm2022/lib/editor/components/external-element/external-sidenav.interface.mjs +0 -2
  91. package/esm2022/lib/editor/components/external-element/external.component.mjs +0 -41
  92. package/esm2022/lib/editor/components/external-element/models/element-data.model.mjs +0 -9
  93. package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +0 -11
  94. package/esm2022/lib/editor/components/external-element/models/external-sidenav.model.mjs +0 -15
  95. package/esm2022/lib/editor/components/image/components/image.component.mjs +0 -88
  96. package/esm2022/lib/editor/components/image/image-api.service.mjs +0 -36
  97. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +0 -46
  98. package/esm2022/lib/editor/components/image/resizer/coordinate.mjs +0 -2
  99. package/esm2022/lib/editor/components/image/resizer/direction-wrapper.mjs +0 -19
  100. package/esm2022/lib/editor/components/image/resizer/direction.enum.mjs +0 -12
  101. package/esm2022/lib/editor/components/image/resizer/resizer.component.mjs +0 -106
  102. package/esm2022/lib/editor/components/image/resizer/size-delta.mjs +0 -2
  103. package/esm2022/lib/editor/components/image/resizer/size-wrapper.mjs +0 -52
  104. package/esm2022/lib/editor/components/image/size.mjs +0 -2
  105. package/esm2022/lib/editor/components/shared/abstract/base.component.mjs +0 -60
  106. package/esm2022/lib/editor/components/shared/abstract/destroy.component.mjs +0 -18
  107. package/esm2022/lib/editor/components/shared/custom-component.hepler.mjs +0 -43
  108. package/esm2022/lib/editor/components/shared/custom-components.interface.mjs +0 -2
  109. package/esm2022/lib/editor/components/shared/custom-content-markers.const.mjs +0 -3
  110. package/esm2022/lib/editor/components/shared/custom-content.mjs +0 -2
  111. package/esm2022/lib/editor/components/shared/services/component.service.mjs +0 -52
  112. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +0 -123
  113. package/esm2022/lib/editor/components/shared/services/overlay.service.mjs +0 -55
  114. package/esm2022/lib/editor/components/tab/tab.component.mjs +0 -44
  115. package/esm2022/lib/editor/components/tab/tab.helper.mjs +0 -6
  116. package/esm2022/lib/editor/components/table/cell-resizer/cell-resizer.mjs +0 -118
  117. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +0 -99
  118. package/esm2022/lib/editor/components/table/components/table.component.mjs +0 -412
  119. package/esm2022/lib/editor/components/table/enums/hrule.enum.mjs +0 -7
  120. package/esm2022/lib/editor/components/table/enums/reisizer-side.enum.mjs +0 -8
  121. package/esm2022/lib/editor/components/table/enums/vertical-merge.enum.mjs +0 -6
  122. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +0 -17
  123. package/esm2022/lib/editor/components/table/models/cell-resizer-parameters.model.mjs +0 -9
  124. package/esm2022/lib/editor/components/table/models/row-data.model.mjs +0 -8
  125. package/esm2022/lib/editor/components/table/models/selection-range.model.mjs +0 -7
  126. package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +0 -74
  127. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +0 -383
  128. package/esm2022/lib/editor/content/constants/display-values.const.mjs +0 -8
  129. package/esm2022/lib/editor/content/constants/document-info.const.mjs +0 -13
  130. package/esm2022/lib/editor/content/constants/editor.const.mjs +0 -70
  131. package/esm2022/lib/editor/content/contents.interface.mjs +0 -2
  132. package/esm2022/lib/editor/content/display-data/display-data.mjs +0 -839
  133. package/esm2022/lib/editor/content/display-data/display-token.model.mjs +0 -12
  134. package/esm2022/lib/editor/content/display-data/format-ext.model.mjs +0 -10
  135. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +0 -11
  136. package/esm2022/lib/editor/content/display-data/indent.model.mjs +0 -9
  137. package/esm2022/lib/editor/content/display-data/line-info.model.mjs +0 -9
  138. package/esm2022/lib/editor/content/display-data/lines.mjs +0 -96
  139. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +0 -8
  140. package/esm2022/lib/editor/content/display-data/paragraph-info.interface.mjs +0 -2
  141. package/esm2022/lib/editor/content/display-data/paragraph.mjs +0 -56
  142. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +0 -35
  143. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +0 -2
  144. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +0 -78
  145. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +0 -62
  146. package/esm2022/lib/editor/content/helpers/format.helper.mjs +0 -23
  147. package/esm2022/lib/editor/content/helpers/indexed-element.helper.mjs +0 -6
  148. package/esm2022/lib/editor/content/helpers/link.helper.mjs +0 -42
  149. package/esm2022/lib/editor/content/helpers/scaling.helper.mjs +0 -9
  150. package/esm2022/lib/editor/content/margin.model.mjs +0 -16
  151. package/esm2022/lib/editor/content/page-vertical-data.model.mjs +0 -9
  152. package/esm2022/lib/editor/content/vertical-alignment.enum.mjs +0 -11
  153. package/esm2022/lib/editor/core/event-emitting.mjs +0 -56
  154. package/esm2022/lib/editor/display/cell.interface.mjs +0 -2
  155. package/esm2022/lib/editor/display/event.helper.mjs +0 -18
  156. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +0 -102
  157. package/esm2022/lib/editor/display/layers/layer.config.mjs +0 -2
  158. package/esm2022/lib/editor/display/layers/pages.layer.mjs +0 -109
  159. package/esm2022/lib/editor/display/layers/print.pages.layer.mjs +0 -7
  160. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +0 -7
  161. package/esm2022/lib/editor/display/layers/selection.layer.mjs +0 -119
  162. package/esm2022/lib/editor/display/layers/text.layer.mjs +0 -226
  163. package/esm2022/lib/editor/display/print/print.helper.mjs +0 -40
  164. package/esm2022/lib/editor/display/print/print.renderer.mjs +0 -67
  165. package/esm2022/lib/editor/display/print/print.rendering.helper.mjs +0 -7
  166. package/esm2022/lib/editor/display/render-changes.interface.mjs +0 -2
  167. package/esm2022/lib/editor/display/render-changes.model.mjs +0 -25
  168. package/esm2022/lib/editor/display/renderer.mjs +0 -204
  169. package/esm2022/lib/editor/display/rendering.helper.mjs +0 -185
  170. package/esm2022/lib/editor/display/renderloop.mjs +0 -26
  171. package/esm2022/lib/editor/display/virtual.renderer.mjs +0 -284
  172. package/esm2022/lib/editor/display/visible-range.interface.mjs +0 -2
  173. package/esm2022/lib/editor/editor.module.mjs +0 -67
  174. package/esm2022/lib/editor/execution/distance.model.mjs +0 -10
  175. package/esm2022/lib/editor/execution/edit.session.mjs +0 -602
  176. package/esm2022/lib/editor/execution/editor.mjs +0 -1367
  177. package/esm2022/lib/editor/execution/helpers/dom.helper.mjs +0 -42
  178. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +0 -73
  179. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +0 -12
  180. package/esm2022/lib/editor/execution/helpers/page.helper.mjs +0 -12
  181. package/esm2022/lib/editor/execution/helpers/paragraph-style.helper.mjs +0 -41
  182. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +0 -177
  183. package/esm2022/lib/editor/execution/regulator.service.mjs +0 -212
  184. package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +0 -18
  185. package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +0 -14
  186. package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +0 -8
  187. package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +0 -3
  188. package/esm2022/lib/editor/execution/targeting/session.model.mjs +0 -10
  189. package/esm2022/lib/editor/gadgets/font-metrics/editor-version.const.mjs +0 -2
  190. package/esm2022/lib/editor/gadgets/font-metrics/font-metric-size.interface.mjs +0 -2
  191. package/esm2022/lib/editor/gadgets/font-metrics/font-metrics.helper.mjs +0 -88
  192. package/esm2022/lib/editor/gadgets/history/operation-history.mjs +0 -208
  193. package/esm2022/lib/editor/gadgets/history/operation.type.mjs +0 -2
  194. package/esm2022/lib/editor/gadgets/history/operations-history-info.model.mjs +0 -7
  195. package/esm2022/lib/editor/gadgets/numbering/numbering-data.model.mjs +0 -9
  196. package/esm2022/lib/editor/gadgets/numbering/numbering-marker-type.enum.mjs +0 -12
  197. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +0 -13
  198. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +0 -149
  199. package/esm2022/lib/editor/gadgets/page-break/break-types.enum.mjs +0 -7
  200. package/esm2022/lib/editor/gadgets/page-break/break.helper.mjs +0 -18
  201. package/esm2022/lib/editor/gadgets/scrollbar.mjs +0 -81
  202. package/esm2022/lib/editor/gadgets/search/replace.interface.mjs +0 -2
  203. package/esm2022/lib/editor/gadgets/search/search-iteration.interface.mjs +0 -2
  204. package/esm2022/lib/editor/gadgets/search/search.mjs +0 -231
  205. package/esm2022/lib/editor/gadgets/unicode/unicode-chars.const.mjs +0 -5
  206. package/esm2022/lib/editor/gadgets/unicode/unicode.helper.mjs +0 -20
  207. package/esm2022/lib/editor/interaction/base.handler.mjs +0 -19
  208. package/esm2022/lib/editor/interaction/document.handler.mjs +0 -27
  209. package/esm2022/lib/editor/interaction/editor.service.mjs +0 -386
  210. package/esm2022/lib/editor/interaction/input.handler.mjs +0 -152
  211. package/esm2022/lib/editor/interaction/mode.enum.mjs +0 -7
  212. package/esm2022/lib/editor/interaction/mouse-button.enum.mjs +0 -7
  213. package/esm2022/lib/editor/interaction/mouse.handler.mjs +0 -50
  214. package/esm2022/lib/editor/interaction/text-input.mjs +0 -53
  215. package/esm2022/lib/editor/operations/commands.service.mjs +0 -20
  216. package/esm2022/lib/editor/operations/enums/command-type.enum.mjs +0 -32
  217. package/esm2022/lib/editor/operations/enums/target-type.enum.mjs +0 -7
  218. package/esm2022/lib/editor/operations/helpers/break-operations.helper.mjs +0 -9
  219. package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +0 -15
  220. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +0 -85
  221. package/esm2022/lib/editor/operations/helpers/image-operations.helper.mjs +0 -19
  222. package/esm2022/lib/editor/operations/helpers/indexed-element-operations.helper.mjs +0 -43
  223. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +0 -136
  224. package/esm2022/lib/editor/operations/helpers/numbering-operations.helper.mjs +0 -55
  225. package/esm2022/lib/editor/operations/helpers/paragraph-operations.helper.mjs +0 -114
  226. package/esm2022/lib/editor/operations/helpers/tab-operations.helper.mjs +0 -16
  227. package/esm2022/lib/editor/operations/helpers/table-operations.helper.mjs +0 -374
  228. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +0 -438
  229. package/esm2022/lib/editor/operations/save-commands.helper.mjs +0 -128
  230. package/esm2022/lib/editor/operations/target-operations.helper.mjs +0 -23
  231. package/esm2022/lib/editor/positioning/alignments.const.mjs +0 -8
  232. package/esm2022/lib/editor/positioning/content.helper.mjs +0 -45
  233. package/esm2022/lib/editor/positioning/cursor-paragraph.mjs +0 -13
  234. package/esm2022/lib/editor/positioning/cursor-position.interface.mjs +0 -2
  235. package/esm2022/lib/editor/positioning/insert-index.interface.mjs +0 -2
  236. package/esm2022/lib/editor/positioning/line-width.helper.mjs +0 -13
  237. package/esm2022/lib/editor/positioning/position.helper.mjs +0 -210
  238. package/esm2022/lib/editor/positioning/range.mjs +0 -94
  239. package/esm2022/lib/editor/positioning/selection.mjs +0 -351
  240. package/esm2022/lib/editor/revision.helper.mjs +0 -94
  241. package/esm2022/lib/models/generated/add-numbering.model.mjs +0 -8
  242. package/esm2022/lib/models/generated/apply-element-style.model.mjs +0 -8
  243. package/esm2022/lib/models/generated/apply-image-style.model.mjs +0 -8
  244. package/esm2022/lib/models/generated/apply-paragraph-style.model.mjs +0 -12
  245. package/esm2022/lib/models/generated/apply-text-style.model.mjs +0 -12
  246. package/esm2022/lib/models/generated/borders-style.model.mjs +0 -8
  247. package/esm2022/lib/models/generated/break.model.mjs +0 -8
  248. package/esm2022/lib/models/generated/cell.model.mjs +0 -12
  249. package/esm2022/lib/models/generated/column-section.model.mjs +0 -8
  250. package/esm2022/lib/models/generated/column.model.mjs +0 -8
  251. package/esm2022/lib/models/generated/command.model.mjs +0 -120
  252. package/esm2022/lib/models/generated/delete.model.mjs +0 -8
  253. package/esm2022/lib/models/generated/document-name.model.mjs +0 -8
  254. package/esm2022/lib/models/generated/document.model.mjs +0 -8
  255. package/esm2022/lib/models/generated/docx.model.mjs +0 -12
  256. package/esm2022/lib/models/generated/edge-target.model.mjs +0 -8
  257. package/esm2022/lib/models/generated/edge.model.mjs +0 -8
  258. package/esm2022/lib/models/generated/element.model.mjs +0 -8
  259. package/esm2022/lib/models/generated/file-source.model.mjs +0 -8
  260. package/esm2022/lib/models/generated/format.model.mjs +0 -12
  261. package/esm2022/lib/models/generated/heading.model.mjs +0 -16
  262. package/esm2022/lib/models/generated/image-data.model.mjs +0 -8
  263. package/esm2022/lib/models/generated/image.model.mjs +0 -12
  264. package/esm2022/lib/models/generated/insert-break.model.mjs +0 -8
  265. package/esm2022/lib/models/generated/insert-element.model.mjs +0 -12
  266. package/esm2022/lib/models/generated/insert-image.model.mjs +0 -12
  267. package/esm2022/lib/models/generated/insert-link.model.mjs +0 -12
  268. package/esm2022/lib/models/generated/insert-paragraph.model.mjs +0 -20
  269. package/esm2022/lib/models/generated/insert-styled-text.model.mjs +0 -12
  270. package/esm2022/lib/models/generated/insert-tab.model.mjs +0 -8
  271. package/esm2022/lib/models/generated/insert-table-columns.model.mjs +0 -8
  272. package/esm2022/lib/models/generated/insert-table-rows.model.mjs +0 -8
  273. package/esm2022/lib/models/generated/insert-table.model.mjs +0 -8
  274. package/esm2022/lib/models/generated/insert-text.model.mjs +0 -8
  275. package/esm2022/lib/models/generated/last-document-revision.model.mjs +0 -12
  276. package/esm2022/lib/models/generated/link-data.model.mjs +0 -8
  277. package/esm2022/lib/models/generated/link.model.mjs +0 -8
  278. package/esm2022/lib/models/generated/margins.model.mjs +0 -8
  279. package/esm2022/lib/models/generated/numbering-level.model.mjs +0 -12
  280. package/esm2022/lib/models/generated/numbering.model.mjs +0 -8
  281. package/esm2022/lib/models/generated/operation.model.mjs +0 -12
  282. package/esm2022/lib/models/generated/page-numbers.model.mjs +0 -8
  283. package/esm2022/lib/models/generated/paragraph-style.model.mjs +0 -8
  284. package/esm2022/lib/models/generated/paragraph.model.mjs +0 -12
  285. package/esm2022/lib/models/generated/remove-numberings.model.mjs +0 -8
  286. package/esm2022/lib/models/generated/remove-table-columns.model.mjs +0 -8
  287. package/esm2022/lib/models/generated/remove-table-rows.model.mjs +0 -8
  288. package/esm2022/lib/models/generated/replace-by-text.model.mjs +0 -8
  289. package/esm2022/lib/models/generated/replace.model.mjs +0 -44
  290. package/esm2022/lib/models/generated/resize-table-columns.model.mjs +0 -8
  291. package/esm2022/lib/models/generated/restore-numberings.model.mjs +0 -8
  292. package/esm2022/lib/models/generated/restore-paragraph-styles.model.mjs +0 -8
  293. package/esm2022/lib/models/generated/restore-table.model.mjs +0 -12
  294. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +0 -8
  295. package/esm2022/lib/models/generated/restore.model.mjs +0 -8
  296. package/esm2022/lib/models/generated/revision.model.mjs +0 -12
  297. package/esm2022/lib/models/generated/row.model.mjs +0 -8
  298. package/esm2022/lib/models/generated/tab.model.mjs +0 -8
  299. package/esm2022/lib/models/generated/table-cell.model.mjs +0 -8
  300. package/esm2022/lib/models/generated/table.model.mjs +0 -12
  301. package/esm2022/lib/models/generated/target.model.mjs +0 -16
  302. package/esm2022/lib/models/generated/text-style.model.mjs +0 -8
  303. package/esm2022/public-api.mjs +0 -53
  304. package/esm2022/talrace-ngx-noder.mjs +0 -5
  305. package/lib/apart-components/editor-toolbar/components/buttons/heading/heading.component.d.ts +0 -8
@@ -1,386 +0,0 @@
1
- import { BehaviorSubject, Subject } from 'rxjs';
2
- import { Injectable } from '@angular/core';
3
- import { OperationsHistoryInfoModel } from '../../editor/gadgets/history/operations-history-info.model';
4
- import * as i0 from "@angular/core";
5
- export class EditorService {
6
- constructor() {
7
- this._styles$ = new BehaviorSubject({});
8
- this._receiveTextStyle$ = new Subject();
9
- this._isViewOnly$ = new BehaviorSubject(false);
10
- this._isViewOnly = false;
11
- this._clipboardData$ = new BehaviorSubject('');
12
- this._hasSelection$ = new BehaviorSubject(false);
13
- this._historyInfo$ = new BehaviorSubject(new OperationsHistoryInfoModel(-1, -1));
14
- this._toggleSidenav$ = new Subject();
15
- this._openSearchDialog$ = new Subject();
16
- this._searchOptions$ = new Subject();
17
- this._searchIteration$ = new Subject();
18
- this._replace$ = new Subject();
19
- this._setTextStyles$ = new Subject();
20
- this._setParagraphStyles$ = new Subject();
21
- this._setNumberingTemplateType$ = new Subject();
22
- this._removeNumberings$ = new Subject();
23
- this._changeImageStyle$ = new Subject();
24
- this._changeElementStyle$ = new Subject();
25
- this._createCustomComponent$ = new Subject();
26
- this._insertBreak$ = new Subject();
27
- this._insertImage$ = new Subject();
28
- this._insertLink$ = new Subject();
29
- this._endMousePress$ = new Subject();
30
- this._disableSelection$ = new Subject();
31
- this._changedTableSize$ = new Subject();
32
- this._changedEdgeSize$ = new Subject();
33
- this._imageLoaded$ = new Subject();
34
- this._changedEdge$ = new Subject();
35
- this._insertTableRows$ = new Subject();
36
- this._insertTableColumns$ = new Subject();
37
- this._removeTableRows$ = new Subject();
38
- this._removeTableColumns$ = new Subject();
39
- this._removeRight$ = new Subject();
40
- this._resizeTableColumns$ = new Subject();
41
- this._insertTable$ = new Subject();
42
- this._redo$ = new Subject();
43
- this._undo$ = new Subject();
44
- this._print$ = new Subject();
45
- this._cutSelected$ = new Subject();
46
- this._copySelected$ = new Subject();
47
- this._pasteFromClipboard$ = new Subject();
48
- this._selectAll$ = new Subject();
49
- this._removeSelected$ = new Subject();
50
- this._keyDown$ = new Subject();
51
- this._updateEdges$ = new Subject();
52
- this._insertText$ = new Subject();
53
- this._removeLeft$ = new Subject();
54
- this._removeCustomElementsData$ = new Subject();
55
- this._currentPage$ = new BehaviorSubject(1);
56
- this._lastPageNumber$ = new BehaviorSubject(1);
57
- }
58
- set styles(value) {
59
- this._styles$.next({ ...value });
60
- }
61
- get styles() {
62
- return this._styles$.value;
63
- }
64
- get styles$() {
65
- return this._styles$.asObservable();
66
- }
67
- get receiveTextStyle$() {
68
- return this._receiveTextStyle$.asObservable();
69
- }
70
- get isViewOnly$() {
71
- return this._isViewOnly$.asObservable();
72
- }
73
- get isViewOnly() {
74
- return this._isViewOnly;
75
- }
76
- get clipboardData$() {
77
- return this._clipboardData$.asObservable();
78
- }
79
- get hasSelection$() {
80
- return this._hasSelection$.asObservable();
81
- }
82
- set historyInfo(value) {
83
- this._historyInfo$.next(value);
84
- }
85
- get historyInfo$() {
86
- return this._historyInfo$.asObservable();
87
- }
88
- get toggleSidenav$() {
89
- return this._toggleSidenav$.asObservable();
90
- }
91
- set openSearchDialog(value) {
92
- this._openSearchDialog$.next(value);
93
- }
94
- get openSearchDialog$() {
95
- return this._openSearchDialog$.asObservable();
96
- }
97
- set searchOptions(value) {
98
- this._searchOptions$.next(value);
99
- }
100
- get searchOptions$() {
101
- return this._searchOptions$.asObservable();
102
- }
103
- set searchIteration(value) {
104
- this._searchIteration$.next(value);
105
- }
106
- get searchIteration$() {
107
- return this._searchIteration$.asObservable();
108
- }
109
- set replace(value) {
110
- this._replace$.next(value);
111
- }
112
- get replace$() {
113
- return this._replace$.asObservable();
114
- }
115
- get setTextStyles$() {
116
- return this._setTextStyles$.asObservable();
117
- }
118
- get setParagraphStyles$() {
119
- return this._setParagraphStyles$.asObservable();
120
- }
121
- get setNumberingTemplateType$() {
122
- return this._setNumberingTemplateType$.asObservable();
123
- }
124
- get removeNumberings$() {
125
- return this._removeNumberings$.asObservable();
126
- }
127
- get setImageStyle$() {
128
- return this._changeImageStyle$.asObservable();
129
- }
130
- get changeElementStyle$() {
131
- return this._changeElementStyle$.asObservable();
132
- }
133
- get createCustomComponent$() {
134
- return this._createCustomComponent$.asObservable();
135
- }
136
- get insertBreak$() {
137
- return this._insertBreak$.asObservable();
138
- }
139
- get insertImage$() {
140
- return this._insertImage$.asObservable();
141
- }
142
- get insertLink$() {
143
- return this._insertLink$.asObservable();
144
- }
145
- get endMousePress$() {
146
- return this._endMousePress$.asObservable();
147
- }
148
- get disableSelection$() {
149
- return this._disableSelection$.asObservable();
150
- }
151
- get changedTableSize$() {
152
- return this._changedTableSize$.asObservable();
153
- }
154
- get changedEdgeSize$() {
155
- return this._changedEdgeSize$.asObservable();
156
- }
157
- get imageLoaded$() {
158
- return this._imageLoaded$.asObservable();
159
- }
160
- get changedEdge$() {
161
- return this._changedEdge$.asObservable();
162
- }
163
- get insertTableRows$() {
164
- return this._insertTableRows$.asObservable();
165
- }
166
- get insertTableColumns$() {
167
- return this._insertTableColumns$.asObservable();
168
- }
169
- get removeTableRows$() {
170
- return this._removeTableRows$.asObservable();
171
- }
172
- get removeTableColumns$() {
173
- return this._removeTableColumns$.asObservable();
174
- }
175
- get removeRight$() {
176
- return this._removeRight$.asObservable();
177
- }
178
- get resizeTableColumns$() {
179
- return this._resizeTableColumns$.asObservable();
180
- }
181
- get insertTable$() {
182
- return this._insertTable$.asObservable();
183
- }
184
- get redo$() {
185
- return this._redo$.asObservable();
186
- }
187
- get undo$() {
188
- return this._undo$.asObservable();
189
- }
190
- get print$() {
191
- return this._print$.asObservable();
192
- }
193
- get cutSelected$() {
194
- return this._cutSelected$.asObservable();
195
- }
196
- get copySelected$() {
197
- return this._copySelected$.asObservable();
198
- }
199
- get pasteFromClipboard$() {
200
- return this._pasteFromClipboard$.asObservable();
201
- }
202
- get selectAll$() {
203
- return this._selectAll$.asObservable();
204
- }
205
- get removeSelected$() {
206
- return this._removeSelected$.asObservable();
207
- }
208
- get keyDown$() {
209
- return this._keyDown$.asObservable();
210
- }
211
- get updateEdges$() {
212
- return this._updateEdges$.asObservable();
213
- }
214
- get insertText$() {
215
- return this._insertText$.asObservable();
216
- }
217
- get removeLeft$() {
218
- return this._removeLeft$.asObservable();
219
- }
220
- get removeCustomElementsData$() {
221
- return this._removeCustomElementsData$.asObservable();
222
- }
223
- get currentPage() {
224
- return this._currentPage$.value;
225
- }
226
- get currentPage$() {
227
- return this._currentPage$.asObservable();
228
- }
229
- get lastPageNumber() {
230
- return this._lastPageNumber$.value;
231
- }
232
- get lastPageNumber$() {
233
- return this._lastPageNumber$.asObservable();
234
- }
235
- setLastPageNumber(value) {
236
- if (this.lastPageNumber === value) {
237
- return;
238
- }
239
- this._lastPageNumber$.next(value);
240
- }
241
- setCurrentPage(value) {
242
- if (this.currentPage === value) {
243
- return;
244
- }
245
- this._currentPage$.next(value);
246
- }
247
- receiveTextStyle(component) {
248
- this._receiveTextStyle$.next(component);
249
- }
250
- setIsViewOnly(value) {
251
- this._isViewOnly = value;
252
- this._isViewOnly$.next(value);
253
- }
254
- setHasSelection(value) {
255
- this._hasSelection$.next(value);
256
- }
257
- setClipboardData(value) {
258
- this._clipboardData$.next(value);
259
- }
260
- setTextStyles(value) {
261
- this._setTextStyles$.next(value);
262
- }
263
- setParagraphStyles(value) {
264
- this._setParagraphStyles$.next(value);
265
- }
266
- setNumberingTemplateType(value) {
267
- this._setNumberingTemplateType$.next(value);
268
- }
269
- removeNumberings() {
270
- this._removeNumberings$.next();
271
- }
272
- changeImageStyle(value) {
273
- this._changeImageStyle$.next(value);
274
- }
275
- changeElementStyle(value) {
276
- this._changeElementStyle$.next(value);
277
- }
278
- createCustomComponent(model) {
279
- this._createCustomComponent$.next(model);
280
- }
281
- insertBreak(value) {
282
- this._insertBreak$.next(value);
283
- }
284
- insertImage(imageData) {
285
- this._insertImage$.next(imageData);
286
- }
287
- insertLink(text, link) {
288
- this._insertLink$.next({ text, link });
289
- }
290
- endMousePress() {
291
- this._endMousePress$.next();
292
- }
293
- disableSelection() {
294
- this._disableSelection$.next();
295
- }
296
- openElementSidenav(component, model, contentWidth) {
297
- this._toggleSidenav$.next({ open: true, component, data: { model, contentWidth } });
298
- }
299
- openSidenav(component) {
300
- this._toggleSidenav$.next({ open: true, component });
301
- }
302
- closeSidenav() {
303
- this._toggleSidenav$.next({ open: false, component: null });
304
- }
305
- changedTableSize(insertIndex, sessionId) {
306
- this._changedTableSize$.next({ insertIndex, sessionId });
307
- }
308
- changedEdgeSize(edgeType, pageType) {
309
- this._changedEdgeSize$.next({ edgeType, pageType });
310
- }
311
- imageLoaded(sessionId) {
312
- this._imageLoaded$.next(sessionId);
313
- }
314
- changedEdge(sessionId) {
315
- this._changedEdge$.next(sessionId);
316
- }
317
- insertTableRows(insertIndex, rowsCount, targetIndex, inheritIndex, sessionId) {
318
- this._insertTableRows$.next({ insertIndex, rowsCount, targetIndex, inheritIndex, sessionId });
319
- }
320
- insertTableColumns(insertIndex, columnsCount, targetIndex, inheritIndex, sessionId) {
321
- this._insertTableColumns$.next({ insertIndex, columnsCount, targetIndex, inheritIndex, sessionId });
322
- }
323
- removeTableRows(insertIndex, startIndex, endIndex, sessionId) {
324
- this._removeTableRows$.next({ insertIndex, startIndex, endIndex, sessionId });
325
- }
326
- removeTableColumns(insertIndex, startIndex, endIndex, sessionId) {
327
- this._removeTableColumns$.next({ insertIndex, startIndex, endIndex, sessionId });
328
- }
329
- removeRight() {
330
- this._removeRight$.next();
331
- }
332
- resizeTableColumns(resizeTableColumns, sessionId) {
333
- this._resizeTableColumns$.next({
334
- resizeTableColumns,
335
- sessionId
336
- });
337
- }
338
- insertTable(tableData) {
339
- this._insertTable$.next(tableData);
340
- }
341
- undo() {
342
- this._undo$.next();
343
- }
344
- redo() {
345
- this._redo$.next();
346
- }
347
- print() {
348
- this._print$.next();
349
- }
350
- cutSelected() {
351
- this._cutSelected$.next();
352
- }
353
- copySelected() {
354
- this._copySelected$.next();
355
- }
356
- pasteFromClipboard() {
357
- this._pasteFromClipboard$.next();
358
- }
359
- selectAll() {
360
- this._selectAll$.next();
361
- }
362
- removeSelected() {
363
- this._removeSelected$.next();
364
- }
365
- keyDown(event) {
366
- this._keyDown$.next(event);
367
- }
368
- updateEdges(sessionId) {
369
- this._updateEdges$.next(sessionId);
370
- }
371
- insertText(text) {
372
- this._insertText$.next(text);
373
- }
374
- removeLeft() {
375
- this._removeLeft$.next();
376
- }
377
- removeCustomElementsData(elements) {
378
- this._removeCustomElementsData$.next(elements);
379
- }
380
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
381
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorService }); }
382
- }
383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorService, decorators: [{
384
- type: Injectable
385
- }] });
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQVlqRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7QUFVeEcsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFXWSxhQUFRLEdBQW9DLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUtwRix1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQVF2RCxpQkFBWSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUtwQixvQkFBZSxHQUE0QixJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUszRSxtQkFBYyxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQVEvRSxrQkFBYSxHQUFnRCxJQUFJLGVBQWUsQ0FDcEYsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBS00sb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBMEQsQ0FBQztRQVF4Rix1QkFBa0IsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVE5RCxvQkFBZSxHQUEyQixJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQVF2RSxzQkFBaUIsR0FBNkIsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFRN0UsY0FBUyxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBS3JELG9CQUFlLEdBQTRCLElB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QUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHdCQUF3QixDQUFDLFFBQXdCO1FBQzdDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0FuZlEsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJhc2VOb2RlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2Fic3RyYWN0L2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWxlbWVudERhdGFNb2RlbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZXh0ZXJuYWwtZWxlbWVudC9tb2RlbHMvZWxlbWVudC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZWxlbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBFeHRlcm5hbFNpZGVuYXZJbnRlcmZhY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2V4dGVybmFsLWVsZW1lbnQvZXh0ZXJuYWwtc2lkZW5hdi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW1hZ2VEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2ltYWdlLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgSW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW1hZ2UubW9kZWwnO1xuaW1wb3J0IHsgSVRvb2xiYXJTdHlsZXMgfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90b29sYmFyLXN0eWxlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTGV2ZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLWxldmVsLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vZWRpdG9yL2dhZGdldHMvaGlzdG9yeS9vcGVyYXRpb25zLWhpc3RvcnktaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlVHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvcGFnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFJlcGxhY2UgfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9yZXBsYWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgU2VhcmNoSXRlcmF0aW9uIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvc2VhcmNoLWl0ZXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VhcmNoT3B0aW9ucyB9IGZyb20gJy4uL2dhZGdldHMvc2VhcmNoL3NlYXJjaCc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFZGl0b3JTZXJ2aWNlIHtcbiAgICBzZXQgc3R5bGVzKHZhbHVlOiBJVG9vbGJhclN0eWxlcykge1xuICAgICAgICB0aGlzLl9zdHlsZXMkLm5leHQoeyAuLi52YWx1ZSB9KTtcbiAgICB9XG4gICAgZ2V0IHN0eWxlcygpOiBJVG9vbGJhclN0eWxlcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZXMkLnZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3R5bGVzJCgpOiBPYnNlcnZhYmxlPElUb29sYmFyU3R5bGVzPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zdHlsZXMkOiBCZWhhdmlvclN1YmplY3Q8SVRvb2xiYXJTdHlsZXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVG9vbGJhclN0eWxlcz4oe30pO1xuXG4gICAgZ2V0IHJlY2VpdmVUZXh0U3R5bGUkKCk6IE9ic2VydmFibGU8QmFzZU5vZGVyQ29tcG9uZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlVGV4dFN0eWxlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVjZWl2ZVRleHRTdHlsZSQgPSBuZXcgU3ViamVjdDxCYXNlTm9kZXJDb21wb25lbnQ+KCk7XG5cbiAgICBnZXQgaXNWaWV3T25seSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZpZXdPbmx5JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGlzVmlld09ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZpZXdPbmx5O1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1ZpZXdPbmx5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfaXNWaWV3T25seSA9IGZhbHNlO1xuXG4gICAgZ2V0IGNsaXBib2FyZERhdGEkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwYm9hcmREYXRhJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2xpcGJvYXJkRGF0YSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICAgIGdldCBoYXNTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzU2VsZWN0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzU2VsZWN0aW9uJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBzZXQgaGlzdG9yeUluZm8odmFsdWU6IE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsKSB7XG4gICAgICAgIHRoaXMuX2hpc3RvcnlJbmZvJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IGhpc3RvcnlJbmZvJCgpOiBPYnNlcnZhYmxlPE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaXN0b3J5SW5mbyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hpc3RvcnlJbmZvJDogQmVoYXZpb3JTdWJqZWN0PE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWw+KFxuICAgICAgICBuZXcgT3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWwoLTEsIC0xKVxuICAgICk7XG5cbiAgICBnZXQgdG9nZ2xlU2lkZW5hdiQoKTogT2JzZXJ2YWJsZTx7IG9wZW46IGJvb2xlYW47IGNvbXBvbmVudDogVHlwZTxhbnk+OyBkYXRhPzogb2JqZWN0IH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvZ2dsZVNpZGVuYXYkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF90b2dnbGVTaWRlbmF2JCA9IG5ldyBTdWJqZWN0PHsgb3BlbjogYm9vbGVhbjsgY29tcG9uZW50OiBUeXBlPGFueT47IGRhdGE/OiBvYmplY3QgfT4oKTtcblxuICAgIHNldCBvcGVuU2VhcmNoRGlhbG9nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX29wZW5TZWFyY2hEaWFsb2ckLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgb3BlblNlYXJjaERpYWxvZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuU2VhcmNoRGlhbG9nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb3BlblNlYXJjaERpYWxvZyQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgc2V0IHNlYXJjaE9wdGlvbnModmFsdWU6IFNlYXJjaE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoT3B0aW9ucyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBzZWFyY2hPcHRpb25zJCgpOiBPYnNlcnZhYmxlPFNlYXJjaE9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaE9wdGlvbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZWFyY2hPcHRpb25zJDogU3ViamVjdDxTZWFyY2hPcHRpb25zPiA9IG5ldyBTdWJqZWN0PFNlYXJjaE9wdGlvbnM+KCk7XG5cbiAgICBzZXQgc2VhcmNoSXRlcmF0aW9uKHZhbHVlOiBTZWFyY2hJdGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoSXRlcmF0aW9uJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHNlYXJjaEl0ZXJhdGlvbiQoKTogT2JzZXJ2YWJsZTxTZWFyY2hJdGVyYXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEl0ZXJhdGlvbiQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NlYXJjaEl0ZXJhdGlvbiQ6IFN1YmplY3Q8U2VhcmNoSXRlcmF0aW9uPiA9IG5ldyBTdWJqZWN0PFNlYXJjaEl0ZXJhdGlvbj4oKTtcblxuICAgIHNldCByZXBsYWNlKHZhbHVlOiBSZXBsYWNlKSB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2UkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcmVwbGFjZSQoKTogT2JzZXJ2YWJsZTxSZXBsYWNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBsYWNlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVwbGFjZSQ6IFN1YmplY3Q8UmVwbGFjZT4gPSBuZXcgU3ViamVjdDxSZXBsYWNlPigpO1xuXG4gICAgZ2V0IHNldFRleHRTdHlsZXMkKCk6IE9ic2VydmFibGU8VGV4dFN0eWxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldFRleHRTdHlsZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZXRUZXh0U3R5bGVzJDogU3ViamVjdDxUZXh0U3R5bGVNb2RlbD4gPSBuZXcgU3ViamVjdDxUZXh0U3R5bGVNb2RlbD4oKTtcblxuICAgIGdldCBzZXRQYXJhZ3JhcGhTdHlsZXMkKCk6IE9ic2VydmFibGU8UGFyYWdyYXBoU3R5bGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0UGFyYWdyYXBoU3R5bGVzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0UGFyYWdyYXBoU3R5bGVzJDogU3ViamVjdDxQYXJhZ3JhcGhTdHlsZU1vZGVsPiA9IG5ldyBTdWJqZWN0PFBhcmFncmFwaFN0eWxlTW9kZWw+KCk7XG5cbiAgICBnZXQgc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJCgpOiBPYnNlcnZhYmxlPE51bWJlcmluZ0xldmVsTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJDogU3ViamVjdDxOdW1iZXJpbmdMZXZlbE1vZGVsW10+ID0gbmV3IFN1YmplY3Q8TnVtYmVyaW5nTGV2ZWxNb2RlbFtdPigpO1xuXG4gICAgZ2V0IHJlbW92ZU51bWJlcmluZ3MkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlTnVtYmVyaW5ncyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZU51bWJlcmluZ3MkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBzZXRJbWFnZVN0eWxlJCgpOiBPYnNlcnZhYmxlPEltYWdlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZUltYWdlU3R5bGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGFuZ2VJbWFnZVN0eWxlJCA9IG5ldyBTdWJqZWN0PEltYWdlTW9kZWw+KCk7XG5cbiAgICBnZXQgY2hhbmdlRWxlbWVudFN0eWxlJCgpOiBPYnNlcnZhYmxlPEVsZW1lbnRNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlRWxlbWVudFN0eWxlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hhbmdlRWxlbWVudFN0eWxlJCA9IG5ldyBTdWJqZWN0PEVsZW1lbnRNb2RlbD4oKTtcblxuICAgIGdldCBjcmVhdGVDdXN0b21Db21wb25lbnQkKCk6IE9ic2VydmFibGU8RWxlbWVudERhdGFNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY3JlYXRlQ3VzdG9tQ29tcG9uZW50JDogU3ViamVjdDxFbGVtZW50RGF0YU1vZGVsPiA9IG5ldyBTdWJqZWN0PEVsZW1lbnREYXRhTW9kZWw+KCk7XG5cbiAgICBnZXQgaW5zZXJ0QnJlYWskKCk6IE9ic2VydmFibGU8QnJlYWtUeXBlcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0QnJlYWskLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRCcmVhayQ6IFN1YmplY3Q8QnJlYWtUeXBlcz4gPSBuZXcgU3ViamVjdDxCcmVha1R5cGVzPigpO1xuXG4gICAgZ2V0IGluc2VydEltYWdlJCgpOiBPYnNlcnZhYmxlPEltYWdlRGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRJbWFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luc2VydEltYWdlJCA9IG5ldyBTdWJqZWN0PEltYWdlRGF0YU1vZGVsPigpO1xuXG4gICAgZ2V0IGluc2VydExpbmskKCk6IE9ic2VydmFibGU8eyB0ZXh0OiBzdHJpbmc7IGxpbms6IHN0cmluZyB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRMaW5rJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0TGluayQgPSBuZXcgU3ViamVjdDx7IHRleHQ6IHN0cmluZzsgbGluazogc3RyaW5nIH0+KCk7XG5cbiAgICBnZXQgZW5kTW91c2VQcmVzcyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRNb3VzZVByZXNzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZW5kTW91c2VQcmVzcyQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IGRpc2FibGVTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZVNlbGVjdGlvbiQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc2FibGVTZWxlY3Rpb24kOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBjaGFuZ2VkVGFibGVTaXplJCgpOiBPYnNlcnZhYmxlPHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc2Vzc2lvbklkOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlZFRhYmxlU2l6ZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoYW5nZWRUYWJsZVNpemUkID0gbmV3IFN1YmplY3Q8eyBpbnNlcnRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IGNoYW5nZWRFZGdlU2l6ZSQoKTogT2JzZXJ2YWJsZTx7IGVkZ2VUeXBlOiBFZGdlVHlwZTsgcGFnZVR5cGU6IFBhZ2VUeXBlIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZWRFZGdlU2l6ZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoYW5nZWRFZGdlU2l6ZSQgPSBuZXcgU3ViamVjdDx7IGVkZ2VUeXBlOiBFZGdlVHlwZTsgcGFnZVR5cGU6IFBhZ2VUeXBlIH0+KCk7XG5cbiAgICBnZXQgaW1hZ2VMb2FkZWQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbWFnZUxvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2ltYWdlTG9hZGVkJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIGdldCBjaGFuZ2VkRWRnZSQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZWRFZGdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hhbmdlZEVkZ2UkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgZ2V0IGluc2VydFRhYmxlUm93cyQoKTogT2JzZXJ2YWJsZTx7XG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXI7XG4gICAgICAgIHJvd3NDb3VudDogbnVtYmVyO1xuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBpbmhlcml0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc2Vzc2lvbklkOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0VGFibGVSb3dzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGFibGVSb3dzJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgcm93c0NvdW50OiBudW1iZXI7XG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgZ2V0IGluc2VydFRhYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTx7XG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXI7XG4gICAgICAgIGNvbHVtbnNDb3VudDogbnVtYmVyO1xuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBpbmhlcml0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc2Vzc2lvbklkOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0VGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGFibGVDb2x1bW5zJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29sdW1uc0NvdW50OiBudW1iZXI7XG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgZ2V0IHJlbW92ZVRhYmxlUm93cyQoKTogT2JzZXJ2YWJsZTx7IGluc2VydEluZGV4OiBudW1iZXI7IHN0YXJ0SW5kZXg6IG51bWJlcjsgZW5kSW5kZXg6IG51bWJlcjsgc2Vzc2lvbklkOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlVGFibGVSb3dzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlVGFibGVSb3dzJCA9IG5ldyBTdWJqZWN0PHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IHJlbW92ZVRhYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTx7IGluc2VydEluZGV4OiBudW1iZXI7IHN0YXJ0SW5kZXg6IG51bWJlcjsgZW5kSW5kZXg6IG51bWJlcjsgc2Vzc2lvbklkOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlVGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlVGFibGVDb2x1bW5zJCA9IG5ldyBTdWJqZWN0PHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IHJlbW92ZVJpZ2h0JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZVJpZ2h0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlUmlnaHQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCByZXNpemVUYWJsZUNvbHVtbnMkKCk6IE9ic2VydmFibGU8e1xuICAgICAgICByZXNpemVUYWJsZUNvbHVtbnM6IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNpemVUYWJsZUNvbHVtbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZXNpemVUYWJsZUNvbHVtbnMkID0gbmV3IFN1YmplY3Q8e1xuICAgICAgICByZXNpemVUYWJsZUNvbHVtbnM6IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgZ2V0IGluc2VydFRhYmxlJCgpOiBPYnNlcnZhYmxlPHsgcm93czogbnVtYmVyOyBjb2x1bW5zOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0VGFibGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRUYWJsZSQgPSBuZXcgU3ViamVjdDx7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0+KCk7XG5cbiAgICBnZXQgcmVkbyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRvJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVkbyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IHVuZG8kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5kbyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3VuZG8kID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBwcmludCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3ByaW50JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgY3V0U2VsZWN0ZWQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3V0U2VsZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jdXRTZWxlY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IGNvcHlTZWxlY3RlZCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3B5U2VsZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jb3B5U2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBwYXN0ZUZyb21DbGlwYm9hcmQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFzdGVGcm9tQ2xpcGJvYXJkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcGFzdGVGcm9tQ2xpcGJvYXJkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgc2VsZWN0QWxsJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NlbGVjdEFsbCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IHJlbW92ZVNlbGVjdGVkJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZVNlbGVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBrZXlEb3duJCgpOiBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleURvd24kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9rZXlEb3duJCA9IG5ldyBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgICBnZXQgdXBkYXRlRWRnZXMkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVFZGdlcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3VwZGF0ZUVkZ2VzJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIGdldCBpbnNlcnRUZXh0JCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0VGV4dCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luc2VydFRleHQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgZ2V0IHJlbW92ZUxlZnQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlTGVmdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZUxlZnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCByZW1vdmVDdXN0b21FbGVtZW50c0RhdGEkKCk6IE9ic2VydmFibGU8RWxlbWVudE1vZGVsW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YSQgPSBuZXcgU3ViamVjdDxFbGVtZW50TW9kZWxbXT4oKTtcblxuICAgIGdldCBjdXJyZW50UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2UkLnZhbHVlO1xuICAgIH1cbiAgICBnZXQgY3VycmVudFBhZ2UkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2N1cnJlbnRQYWdlJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XG5cbiAgICBnZXQgbGFzdFBhZ2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RQYWdlTnVtYmVyJC52YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGxhc3RQYWdlTnVtYmVyJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFBhZ2VOdW1iZXIkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9sYXN0UGFnZU51bWJlciQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xuXG4gICAgc2V0TGFzdFBhZ2VOdW1iZXIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sYXN0UGFnZU51bWJlciA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RQYWdlTnVtYmVyJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50UGFnZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHJlY2VpdmVUZXh0U3R5bGUoY29tcG9uZW50OiBCYXNlTm9kZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVjZWl2ZVRleHRTdHlsZSQubmV4dChjb21wb25lbnQpO1xuICAgIH1cblxuICAgIHNldElzVmlld09ubHkodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNWaWV3T25seSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9pc1ZpZXdPbmx5JC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRIYXNTZWxlY3Rpb24odmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFzU2VsZWN0aW9uJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRDbGlwYm9hcmREYXRhKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2xpcGJvYXJkRGF0YSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VGV4dFN0eWxlcyh2YWx1ZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0VGV4dFN0eWxlcyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0UGFyYWdyYXBoU3R5bGVzKHZhbHVlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFBhcmFncmFwaFN0eWxlcyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlKHZhbHVlOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZW1vdmVOdW1iZXJpbmdzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVOdW1iZXJpbmdzJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgY2hhbmdlSW1hZ2VTdHlsZSh2YWx1ZTogSW1hZ2VNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VJbWFnZVN0eWxlJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VFbGVtZW50U3R5bGUodmFsdWU6IEVsZW1lbnRNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VFbGVtZW50U3R5bGUkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZUN1c3RvbUNvbXBvbmVudChtb2RlbDogRWxlbWVudERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jcmVhdGVDdXN0b21Db21wb25lbnQkLm5leHQobW9kZWwpO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrKHZhbHVlOiBCcmVha1R5cGVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydEJyZWFrJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZShpbWFnZURhdGE6IEltYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydEltYWdlJC5uZXh0KGltYWdlRGF0YSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0TGluayh0ZXh0OiBzdHJpbmcsIGxpbms6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRMaW5rJC5uZXh0KHsgdGV4dCwgbGluayB9KTtcbiAgICB9XG5cbiAgICBlbmRNb3VzZVByZXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbmRNb3VzZVByZXNzJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgZGlzYWJsZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZVNlbGVjdGlvbiQubmV4dCgpO1xuICAgIH1cblxuICAgIG9wZW5FbGVtZW50U2lkZW5hdihjb21wb25lbnQ6IFR5cGU8RXh0ZXJuYWxTaWRlbmF2SW50ZXJmYWNlPiwgbW9kZWw6IEVsZW1lbnRNb2RlbCwgY29udGVudFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlU2lkZW5hdiQubmV4dCh7IG9wZW46IHRydWUsIGNvbXBvbmVudCwgZGF0YTogeyBtb2RlbCwgY29udGVudFdpZHRoIH0gfSk7XG4gICAgfVxuXG4gICAgb3BlblNpZGVuYXYoY29tcG9uZW50OiBUeXBlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlU2lkZW5hdiQubmV4dCh7IG9wZW46IHRydWUsIGNvbXBvbmVudCB9KTtcbiAgICB9XG5cbiAgICBjbG9zZVNpZGVuYXYoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZVNpZGVuYXYkLm5leHQoeyBvcGVuOiBmYWxzZSwgY29tcG9uZW50OiBudWxsIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlZFRhYmxlU2l6ZSQubmV4dCh7IGluc2VydEluZGV4LCBzZXNzaW9uSWQgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZEVkZ2VTaXplKGVkZ2VUeXBlOiBFZGdlVHlwZSwgcGFnZVR5cGU6IFBhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRFZGdlU2l6ZSQubmV4dCh7IGVkZ2VUeXBlLCBwYWdlVHlwZSB9KTtcbiAgICB9XG5cbiAgICBpbWFnZUxvYWRlZChzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbWFnZUxvYWRlZCQubmV4dChzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIGNoYW5nZWRFZGdlKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRFZGdlJC5uZXh0KHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHJvd3NDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5zZXJ0VGFibGVSb3dzJC5uZXh0KHsgaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgc2Vzc2lvbklkIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBjb2x1bW5zQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydFRhYmxlQ29sdW1ucyQubmV4dCh7IGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZVJvd3MkLm5leHQoeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZUNvbHVtbnMkLm5leHQoeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlUmlnaHQkLm5leHQoKTtcbiAgICB9XG5cbiAgICByZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zOiBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzaXplVGFibGVDb2x1bW5zJC5uZXh0KHtcbiAgICAgICAgICAgIHJlc2l6ZVRhYmxlQ29sdW1ucyxcbiAgICAgICAgICAgIHNlc3Npb25JZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZSh0YWJsZURhdGE6IHsgcm93czogbnVtYmVyOyBjb2x1bW5zOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRUYWJsZSQubmV4dCh0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VuZG8kLm5leHQoKTtcbiAgICB9XG5cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZWRvJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByaW50JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgY3V0U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1dFNlbGVjdGVkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgY29weVNlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb3B5U2VsZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwYXN0ZUZyb21DbGlwYm9hcmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bhc3RlRnJvbUNsaXBib2FyZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0QWxsJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVNlbGVjdGVkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAga2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlEb3duJC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlcyhzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVFZGdlcyQubmV4dChzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIGluc2VydFRleHQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHQkLm5leHQodGV4dCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlTGVmdCQubmV4dCgpO1xuICAgIH1cblxuICAgIHJlbW92ZUN1c3RvbUVsZW1lbnRzRGF0YShlbGVtZW50czogRWxlbWVudE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQ3VzdG9tRWxlbWVudHNEYXRhJC5uZXh0KGVsZW1lbnRzKTtcbiAgICB9XG59XG4iXX0=