@loxia/mst-viewer 8.1.3-202512221019 → 8.1.3-202512230534

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 (261) hide show
  1. package/esm2022/generated/openapi/api/api.mjs +23 -0
  2. package/esm2022/generated/openapi/api/appConfigController.service.mjs +140 -0
  3. package/esm2022/generated/openapi/api/appConfigController.serviceInterface.mjs +2 -0
  4. package/esm2022/generated/openapi/api/bewegingController.service.mjs +155 -0
  5. package/esm2022/generated/openapi/api/bewegingController.serviceInterface.mjs +2 -0
  6. package/esm2022/generated/openapi/api/class0BuildProperties.service.mjs +140 -0
  7. package/esm2022/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +2 -0
  8. package/esm2022/generated/openapi/api/connectorController.service.mjs +146 -0
  9. package/esm2022/generated/openapi/api/connectorController.serviceInterface.mjs +2 -0
  10. package/esm2022/generated/openapi/api/logController.service.mjs +150 -0
  11. package/esm2022/generated/openapi/api/logController.serviceInterface.mjs +2 -0
  12. package/esm2022/generated/openapi/api/p21Controller.service.mjs +236 -0
  13. package/esm2022/generated/openapi/api/p21Controller.serviceInterface.mjs +2 -0
  14. package/esm2022/generated/openapi/api/sbController.service.mjs +202 -0
  15. package/esm2022/generated/openapi/api/sbController.serviceInterface.mjs +2 -0
  16. package/esm2022/generated/openapi/api.module.mjs +40 -0
  17. package/esm2022/generated/openapi/configuration.mjs +99 -0
  18. package/esm2022/generated/openapi/encoder.mjs +19 -0
  19. package/esm2022/generated/openapi/index.mjs +7 -0
  20. package/esm2022/generated/openapi/model/actieDto.mjs +13 -0
  21. package/esm2022/generated/openapi/model/algemeneRitDto.mjs +13 -0
  22. package/esm2022/generated/openapi/model/bewegingDto.mjs +2 -0
  23. package/esm2022/generated/openapi/model/frontendKeycloakConfig.mjs +13 -0
  24. package/esm2022/generated/openapi/model/frontendProperties.mjs +2 -0
  25. package/esm2022/generated/openapi/model/logDto.mjs +2 -0
  26. package/esm2022/generated/openapi/model/models.mjs +10 -0
  27. package/esm2022/generated/openapi/model/ritRequestDto.mjs +2 -0
  28. package/esm2022/generated/openapi/model/signaleringsbeeldDto.mjs +13 -0
  29. package/esm2022/generated/openapi/model/signaleringsbeeldRequestDto.mjs +13 -0
  30. package/esm2022/generated/openapi/param.mjs +2 -0
  31. package/esm2022/generated/openapi/variables.mjs +9 -0
  32. package/esm2022/generated.version.mjs +2 -0
  33. package/esm2022/lib/atomic-components/message/index.mjs +4 -0
  34. package/esm2022/lib/atomic-components/message/message.component.mjs +34 -0
  35. package/esm2022/lib/atomic-components/message/message.mjs +8 -0
  36. package/esm2022/lib/atomic-components/message/severity.enum.mjs +9 -0
  37. package/esm2022/lib/atomic-components/messages/messages.component.mjs +20 -0
  38. package/esm2022/lib/atomic-components/overlay/overlay.component.mjs +11 -0
  39. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.component.mjs +11 -0
  40. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +8 -0
  41. package/esm2022/lib/atomic-components/services/messages.service.mjs +27 -0
  42. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +40 -0
  43. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +110 -0
  44. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +267 -0
  45. package/esm2022/lib/components/ritdelen-view/ritdelen-view.component.mjs +103 -0
  46. package/esm2022/lib/components/rpe/rpe.component.mjs +33 -0
  47. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +273 -0
  48. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +52 -0
  49. package/esm2022/lib/model/alternatief-rit-deel.mjs +7 -0
  50. package/esm2022/lib/model/km-range.mjs +39 -0
  51. package/esm2022/lib/model/melding-event.mjs +7 -0
  52. package/esm2022/lib/model/nieuwe-route.mjs +10 -0
  53. package/esm2022/lib/model/ongeplande-actie.mjs +7 -0
  54. package/esm2022/lib/model/rijwegplan-rijweg-dwang-combinatie.mjs +24 -0
  55. package/esm2022/lib/model/ritdeel.mjs +205 -0
  56. package/esm2022/lib/model/sein-op-ritdeel.mjs +7 -0
  57. package/esm2022/lib/model/wissel-kant-code.mjs +7 -0
  58. package/esm2022/lib/mst-viewer.module.mjs +143 -0
  59. package/esm2022/lib/optimo.mjs +9 -0
  60. package/esm2022/lib/resources/mstlogging.resource.mjs +25 -0
  61. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +62 -0
  62. package/esm2022/lib/services/base-rest.service.mjs +26 -0
  63. package/esm2022/lib/services/beweging-utils.service.mjs +139 -0
  64. package/esm2022/lib/services/beweging-verrijker.service.mjs +30 -0
  65. package/esm2022/lib/services/connector.service.mjs +30 -0
  66. package/esm2022/lib/services/debug.service.mjs +59 -0
  67. package/esm2022/lib/services/editor.service.mjs +48 -0
  68. package/esm2022/lib/services/print-beweging.service.mjs +66 -0
  69. package/esm2022/lib/services/rit-lezer.service.mjs +104 -0
  70. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +92 -0
  71. package/esm2022/lib/services/viewer-control.service.mjs +104 -0
  72. package/esm2022/lib/state/actions/actions.mjs +130 -0
  73. package/esm2022/lib/state/actions/ritdelen.actions.mjs +45 -0
  74. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +78 -0
  75. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +67 -0
  76. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +73 -0
  77. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +39 -0
  78. package/esm2022/lib/state/effect/focus-effect.mjs +36 -0
  79. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +64 -0
  80. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +363 -0
  81. package/esm2022/lib/state/effect/rit-goedkeuren.effect.mjs +23 -0
  82. package/esm2022/lib/state/effect/ritdelen.effect.mjs +112 -0
  83. package/esm2022/lib/state/effect/svg-view.effect.mjs +48 -0
  84. package/esm2022/lib/state/mst-editor-state.mjs +89 -0
  85. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +62 -0
  86. package/esm2022/lib/util/actie-helper.mjs +437 -0
  87. package/esm2022/lib/util/actie-popover-bepaler.mjs +90 -0
  88. package/esm2022/lib/util/date.service.mjs +17 -0
  89. package/esm2022/lib/util/logging-helper.mjs +58 -0
  90. package/esm2022/lib/util/melding-builder.mjs +13 -0
  91. package/esm2022/lib/util/message-builder.mjs +32 -0
  92. package/esm2022/lib/util/multi-map.mjs +76 -0
  93. package/esm2022/lib/util/utils.mjs +35 -0
  94. package/esm2022/lib/util/zone-util.mjs +32 -0
  95. package/esm2022/loxia-mst-viewer.mjs +5 -0
  96. package/esm2022/public-api.mjs +9 -0
  97. package/esm2022/src/generated/openapi/api/api.mjs +23 -0
  98. package/esm2022/src/generated/openapi/api/appConfigController.service.mjs +140 -0
  99. package/esm2022/src/generated/openapi/api/appConfigController.serviceInterface.mjs +2 -0
  100. package/esm2022/src/generated/openapi/api/bewegingController.service.mjs +155 -0
  101. package/esm2022/src/generated/openapi/api/bewegingController.serviceInterface.mjs +2 -0
  102. package/esm2022/src/generated/openapi/api/class0BuildProperties.service.mjs +140 -0
  103. package/esm2022/src/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +2 -0
  104. package/esm2022/src/generated/openapi/api/connectorController.service.mjs +146 -0
  105. package/esm2022/src/generated/openapi/api/connectorController.serviceInterface.mjs +2 -0
  106. package/esm2022/src/generated/openapi/api/logController.service.mjs +150 -0
  107. package/esm2022/src/generated/openapi/api/logController.serviceInterface.mjs +2 -0
  108. package/esm2022/src/generated/openapi/api/p21Controller.service.mjs +236 -0
  109. package/esm2022/src/generated/openapi/api/p21Controller.serviceInterface.mjs +2 -0
  110. package/esm2022/src/generated/openapi/api/sbController.service.mjs +202 -0
  111. package/esm2022/src/generated/openapi/api/sbController.serviceInterface.mjs +2 -0
  112. package/esm2022/src/generated/openapi/api.module.mjs +40 -0
  113. package/esm2022/src/generated/openapi/configuration.mjs +99 -0
  114. package/esm2022/src/generated/openapi/encoder.mjs +19 -0
  115. package/esm2022/src/generated/openapi/index.mjs +7 -0
  116. package/esm2022/src/generated/openapi/loxia-mst-viewer-src-generated-openapi.mjs +5 -0
  117. package/esm2022/src/generated/openapi/model/actieDto.mjs +13 -0
  118. package/esm2022/src/generated/openapi/model/algemeneRitDto.mjs +13 -0
  119. package/esm2022/src/generated/openapi/model/bewegingDto.mjs +2 -0
  120. package/esm2022/src/generated/openapi/model/frontendKeycloakConfig.mjs +13 -0
  121. package/esm2022/src/generated/openapi/model/frontendProperties.mjs +2 -0
  122. package/esm2022/src/generated/openapi/model/logDto.mjs +2 -0
  123. package/esm2022/src/generated/openapi/model/models.mjs +10 -0
  124. package/esm2022/src/generated/openapi/model/ritRequestDto.mjs +2 -0
  125. package/esm2022/src/generated/openapi/model/signaleringsbeeldDto.mjs +13 -0
  126. package/esm2022/src/generated/openapi/model/signaleringsbeeldRequestDto.mjs +13 -0
  127. package/esm2022/src/generated/openapi/param.mjs +2 -0
  128. package/esm2022/src/generated/openapi/variables.mjs +9 -0
  129. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +25 -25
  130. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -1
  131. package/fesm2022/loxia-mst-viewer.mjs +154 -154
  132. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  133. package/generated/openapi/api/api.d.ts +22 -0
  134. package/generated/openapi/api/appConfigController.service.d.ts +38 -0
  135. package/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
  136. package/generated/openapi/api/bewegingController.service.d.ts +40 -0
  137. package/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
  138. package/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
  139. package/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
  140. package/generated/openapi/api/connectorController.service.d.ts +38 -0
  141. package/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
  142. package/generated/openapi/api/logController.service.d.ts +38 -0
  143. package/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
  144. package/generated/openapi/api/p21Controller.service.d.ts +62 -0
  145. package/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
  146. package/generated/openapi/api/sbController.service.d.ts +60 -0
  147. package/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
  148. package/generated/openapi/api.module.d.ts +11 -0
  149. package/generated/openapi/configuration.d.ts +104 -0
  150. package/generated/openapi/encoder.d.ts +11 -0
  151. package/generated/openapi/index.d.ts +6 -0
  152. package/generated/openapi/model/actieDto.d.ts +35 -0
  153. package/generated/openapi/model/algemeneRitDto.d.ts +28 -0
  154. package/generated/openapi/model/bewegingDto.d.ts +37 -0
  155. package/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
  156. package/generated/openapi/model/frontendProperties.d.ts +15 -0
  157. package/generated/openapi/model/logDto.d.ts +22 -0
  158. package/generated/openapi/model/models.d.ts +9 -0
  159. package/generated/openapi/model/ritRequestDto.d.ts +17 -0
  160. package/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
  161. package/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +16 -0
  162. package/generated/openapi/param.d.ts +37 -0
  163. package/generated/openapi/variables.d.ts +8 -0
  164. package/generated.version.d.ts +1 -0
  165. package/index.d.ts +3 -1079
  166. package/lib/atomic-components/message/index.d.ts +3 -0
  167. package/lib/atomic-components/message/message.component.d.ts +12 -0
  168. package/lib/atomic-components/message/message.d.ts +7 -0
  169. package/lib/atomic-components/message/severity.enum.d.ts +7 -0
  170. package/lib/atomic-components/messages/messages.component.d.ts +9 -0
  171. package/lib/atomic-components/overlay/overlay.component.d.ts +5 -0
  172. package/lib/atomic-components/progress-indicator/progress-indicator.component.d.ts +5 -0
  173. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +6 -0
  174. package/lib/atomic-components/services/messages.service.d.ts +12 -0
  175. package/lib/components/carousel-controls/carousel-controls.component.d.ts +21 -0
  176. package/lib/components/mstviewer/mstviewer.component.d.ts +39 -0
  177. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +72 -0
  178. package/lib/components/ritdelen-view/ritdelen-view.component.d.ts +33 -0
  179. package/lib/components/rpe/rpe.component.d.ts +11 -0
  180. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +55 -0
  181. package/lib/components/viewer-controls/viewer-controls.component.d.ts +27 -0
  182. package/lib/model/alternatief-rit-deel.d.ts +7 -0
  183. package/lib/model/km-range.d.ts +13 -0
  184. package/lib/model/melding-event.d.ts +5 -0
  185. package/lib/model/nieuwe-route.d.ts +8 -0
  186. package/lib/model/ongeplande-actie.d.ts +6 -0
  187. package/lib/model/rijwegplan-rijweg-dwang-combinatie.d.ts +12 -0
  188. package/lib/model/ritdeel.d.ts +61 -0
  189. package/lib/model/sein-op-ritdeel.d.ts +7 -0
  190. package/lib/model/wissel-kant-code.d.ts +5 -0
  191. package/lib/mst-viewer.module.d.ts +34 -0
  192. package/lib/optimo.d.ts +69 -0
  193. package/lib/resources/mstlogging.resource.d.ts +15 -0
  194. package/lib/resources/signaleringsbeeldinfo.resource.d.ts +36 -0
  195. package/lib/services/base-rest.service.d.ts +16 -0
  196. package/lib/services/beweging-utils.service.d.ts +25 -0
  197. package/lib/services/beweging-verrijker.service.d.ts +11 -0
  198. package/lib/services/connector.service.d.ts +10 -0
  199. package/lib/services/debug.service.d.ts +15 -0
  200. package/lib/services/editor.service.d.ts +23 -0
  201. package/lib/services/print-beweging.service.d.ts +18 -0
  202. package/lib/services/rit-lezer.service.d.ts +22 -0
  203. package/lib/services/signalerings-beeld-manager.service.d.ts +29 -0
  204. package/lib/services/viewer-control.service.d.ts +32 -0
  205. package/lib/state/actions/actions.d.ts +275 -0
  206. package/lib/state/actions/ritdelen.actions.d.ts +101 -0
  207. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +23 -0
  208. package/lib/state/effect/bepaal-sb-infos.effect.d.ts +23 -0
  209. package/lib/state/effect/beweging-invoegen.effect.d.ts +17 -0
  210. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +15 -0
  211. package/lib/state/effect/focus-effect.d.ts +17 -0
  212. package/lib/state/effect/laad-route-files.effect.d.ts +28 -0
  213. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +58 -0
  214. package/lib/state/effect/rit-goedkeuren.effect.d.ts +17 -0
  215. package/lib/state/effect/ritdelen.effect.d.ts +32 -0
  216. package/lib/state/effect/svg-view.effect.d.ts +17 -0
  217. package/lib/state/mst-editor-state.d.ts +133 -0
  218. package/lib/state/reducer/rit-delen.reducer.d.ts +4 -0
  219. package/lib/util/actie-helper.d.ts +117 -0
  220. package/lib/util/actie-popover-bepaler.d.ts +14 -0
  221. package/lib/util/date.service.d.ts +6 -0
  222. package/lib/util/logging-helper.d.ts +15 -0
  223. package/lib/util/melding-builder.d.ts +8 -0
  224. package/lib/util/message-builder.d.ts +13 -0
  225. package/lib/util/multi-map.d.ts +39 -0
  226. package/lib/util/utils.d.ts +4 -0
  227. package/lib/util/zone-util.d.ts +11 -0
  228. package/package.json +10 -6
  229. package/public-api.d.ts +5 -0
  230. package/src/generated/openapi/api/api.d.ts +22 -0
  231. package/src/generated/openapi/api/appConfigController.service.d.ts +38 -0
  232. package/src/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
  233. package/src/generated/openapi/api/bewegingController.service.d.ts +40 -0
  234. package/src/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
  235. package/src/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
  236. package/src/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
  237. package/src/generated/openapi/api/connectorController.service.d.ts +38 -0
  238. package/src/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
  239. package/src/generated/openapi/api/logController.service.d.ts +38 -0
  240. package/src/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
  241. package/src/generated/openapi/api/p21Controller.service.d.ts +62 -0
  242. package/src/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
  243. package/src/generated/openapi/api/sbController.service.d.ts +60 -0
  244. package/src/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
  245. package/src/generated/openapi/api.module.d.ts +11 -0
  246. package/src/generated/openapi/configuration.d.ts +104 -0
  247. package/src/generated/openapi/encoder.d.ts +11 -0
  248. package/src/generated/openapi/index.d.ts +6 -825
  249. package/src/generated/openapi/model/actieDto.d.ts +35 -0
  250. package/src/generated/openapi/model/algemeneRitDto.d.ts +28 -0
  251. package/src/generated/openapi/model/bewegingDto.d.ts +37 -0
  252. package/src/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
  253. package/src/generated/openapi/model/frontendProperties.d.ts +15 -0
  254. package/src/generated/openapi/model/logDto.d.ts +22 -0
  255. package/src/generated/openapi/model/models.d.ts +9 -0
  256. package/src/generated/openapi/model/ritRequestDto.d.ts +17 -0
  257. package/src/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
  258. package/src/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +16 -0
  259. package/src/generated/openapi/param.d.ts +37 -0
  260. package/src/generated/openapi/variables.d.ts +8 -0
  261. package/tailwind.scss +5 -1
@@ -0,0 +1,363 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ImxViewerComponent, Point, SvgInfo } from '@loxia/imx-viewer';
3
+ import { createEffect, ofType } from '@ngrx/effects';
4
+ import { of, throwError } from 'rxjs';
5
+ import { catchError, map, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
6
+ import { RitdeelZichtbaarheid } from '../../model/ritdeel';
7
+ import { MessageBuilder } from '../../util/message-builder';
8
+ import Utils from '../../util/utils';
9
+ import * as MstActions from '../actions/actions';
10
+ import { SetSignaleringsbeeldInfoDtos, SetVisibleSignaleringsbeeldInfoDtos } from '../actions/actions';
11
+ import * as RitdelenActions from '../actions/ritdelen.actions';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@ngrx/effects";
14
+ import * as i2 from "@ngrx/store";
15
+ import * as i3 from "../../services/signalerings-beeld-manager.service";
16
+ import * as i4 from "../../services/editor.service";
17
+ import * as i5 from "../../resources/signaleringsbeeldinfo.resource";
18
+ import * as i6 from "../../services/connector.service";
19
+ import * as i7 from "../../atomic-components/services/messages.service";
20
+ export class LaadSignaleringsbeeldenEffect {
21
+ constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesSerivce) {
22
+ this.actions$ = actions$;
23
+ this.store = store;
24
+ this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
25
+ this.editorService = editorService;
26
+ this.sbiResource = sbiResource;
27
+ this.connectorService = connectorService;
28
+ this.messagesSerivce = messagesSerivce;
29
+ this.SVG_PIXEL_RUIMTE = 30;
30
+ this.verwerkRitdelen$ = createEffect(() => this.actions$.pipe(ofType(RitdelenActions.setRitDelen, RitdelenActions.navigeer, RitdelenActions.navigeerVanaf), withLatestFrom(this.store), map(([actie, storeState]) => {
31
+ this.store.dispatch(MstActions.SetOngeplandeActiesBepaald(false));
32
+ this.verwerkRitdelen(actie, storeState);
33
+ })), { dispatch: false });
34
+ this.laadEnVerwerkSignaleringsbeeldInfo$ = createEffect(() => this.actions$.pipe(ofType(MstActions.laadEnVerwerkSignaleringsbeeldInfo), withLatestFrom(this.store), switchMap(([actie, storeState]) => this.handleSignaleringsbeeldInfo({ actie, storeState }))), { dispatch: false });
35
+ this.navigeerBuitenRit$ = createEffect(() => this.actions$.pipe(ofType(MstActions.navigeerBuitenRit), withLatestFrom(this.store), switchMap(([actie, storeState]) => of({
36
+ rand: this.signaleringsBeeldManagerService.getTopologyElementByPuic(actie.randPuic),
37
+ randPuic: actie.randPuic,
38
+ storeState
39
+ }).pipe(switchMap(this.getOtherRand.bind(this)), switchMap(this.loadRouteFilesAndSignaleringsbeeldInfo.bind(this)), switchMap(this.loadSignaleringsbeelden.bind(this)), map(this.processSvgsAndUpdateRitdelen.bind(this))))), { dispatch: false });
40
+ }
41
+ handleSignaleringsbeeldInfo({ actie, storeState }) {
42
+ return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto(actie.pplgs, storeState.iaVersie)).pipe(take(1), tap((dtos) => this.processResponse({ dtos, storeState, actie })), catchError((err) => {
43
+ this.messagesSerivce.showMessage(MessageBuilder.nietGevondenSBI(err));
44
+ return throwError(() => err);
45
+ }));
46
+ }
47
+ processResponse({ dtos, storeState, actie }) {
48
+ if (dtos && dtos.filter(dto => dto.metVisualisatie).length > 12) {
49
+ this.messagesSerivce.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
50
+ }
51
+ this.store.dispatch(SetSignaleringsbeeldInfoDtos(dtos, storeState.iaVersie, actie.rit, actie.paginationSize, actie.ritGewijzigdToegestaan));
52
+ this.store.dispatch(SetVisibleSignaleringsbeeldInfoDtos(dtos));
53
+ }
54
+ getOtherRand({ rand, randPuic, storeState }) {
55
+ return this.connectorService.getOtherRand(randPuic).pipe(map(otherPplg => ({ otherPplg, rand, storeState })));
56
+ }
57
+ loadRouteFilesAndSignaleringsbeeldInfo({ otherPplg, rand, storeState }) {
58
+ this.editorService.laadRouteFiles(storeState.iaVersie.versie, [rand.getPPLG(), otherPplg]);
59
+ return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto([rand.getPPLG(), otherPplg], storeState.iaVersie)).pipe(map(dtos => ({ dtos, storeState })));
60
+ }
61
+ loadSignaleringsbeelden({ dtos, storeState }) {
62
+ return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, storeState, dtos })));
63
+ }
64
+ processSvgsAndUpdateRitdelen({ svgDataUrls, storeState, dtos }) {
65
+ this.verwerkSvgs(svgDataUrls);
66
+ const nieuweRitdelen = this.updateRitdelen(storeState.ritDelen, dtos);
67
+ this.store.dispatch(MstActions.UpdateVisibleSignaleringsbeeldInfoDtos(dtos));
68
+ this.store.dispatch(RitdelenActions.updateRitDelen(nieuweRitdelen));
69
+ }
70
+ verwerkRitdelen(actie, storeState) {
71
+ const isInit = actie.type === RitdelenActions.SET_RIT_DELEN;
72
+ const ritDelen = isInit ? actie.ritDelen : storeState.ritDelen;
73
+ const storeDtos = storeState.signaleringsbeeldInfoDtos;
74
+ this.navigeer(ritDelen, actie, storeDtos);
75
+ const visibleRitDelen = ritDelen.filter(n => n.isZichtbaarBinnenWindow());
76
+ const visibleRitPplgs = visibleRitDelen.map(r => r.getPplg()).filter(this.distinct);
77
+ const visibleDtos = this.bepaalZichtbareDtos(visibleRitPplgs, storeDtos);
78
+ const loadingDtos = this.bepaalToLoadDtos(visibleDtos, ritDelen, visibleRitDelen, visibleRitPplgs, storeState);
79
+ this.editorService.laadSignaleringsbeelden(actie.iaversieinfo.versie, loadingDtos).pipe(tap(svgDataUrls => {
80
+ this.verwerkSvgs(svgDataUrls);
81
+ this.updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos);
82
+ }), catchError(err => {
83
+ this.messagesSerivce.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
84
+ throw err;
85
+ })).subscribe();
86
+ }
87
+ updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos) {
88
+ setTimeout(() => {
89
+ const nieuweRitdelen = this.updateRitdelen(ritDelen, visibleDtos);
90
+ this.debugLog(storeState.debug, visibleRitPplgs, loadingDtos);
91
+ if (!isInit) {
92
+ this.store.dispatch(MstActions.UpdateSignaleringsbeeldInfoDtos(storeDtos));
93
+ this.store.dispatch(MstActions.UpdateVisibleSignaleringsbeeldInfoDtos(loadingDtos));
94
+ }
95
+ this.store.dispatch(RitdelenActions.updateRitDelen(nieuweRitdelen));
96
+ }, 0);
97
+ }
98
+ createSignaleringsbeeldInfoQueryDto(pplgs, iainfo) {
99
+ const datum = iainfo.ingangsDatum && !isNaN(iainfo.ingangsDatum.getTime()) ? iainfo.ingangsDatum.toISOString() : undefined;
100
+ return { pplgs, versie: iainfo.versie, ingangsDatum: datum };
101
+ }
102
+ verwerkSvgs(svgDataUrls) {
103
+ this.store.dispatch(MstActions.SetSvgInfos(this.bepaalSvgInfos(svgDataUrls)));
104
+ }
105
+ bepaalSvgInfos(svgDataUrls) {
106
+ let nextCoords = new Point(0, 0);
107
+ const infos = [];
108
+ svgDataUrls.forEach(svgDataUrl => {
109
+ if (svgDataUrl) {
110
+ const decoded = atob(svgDataUrl.substring('data:image/svg+xml;base64,'.length));
111
+ infos.push(new SvgInfo('data:image/svg+xml,' + decoded, nextCoords));
112
+ nextCoords = new Point(nextCoords.x + ImxViewerComponent.getXCoordinate(decoded) + this.SVG_PIXEL_RUIMTE, 0);
113
+ }
114
+ });
115
+ return infos;
116
+ }
117
+ bepaalToLoadDtos(visibleDtos, ritDelen, visibleRitDelen, visibleRitPplgs, storeState) {
118
+ const loadingDtos = [...visibleDtos];
119
+ const firstIdx = ritDelen.indexOf(visibleRitDelen[0]) - 1;
120
+ this.addPrevNonVisibleDto(firstIdx, ritDelen, loadingDtos, visibleRitPplgs, storeState.signaleringsbeeldInfoDtos);
121
+ const lastIdx = ritDelen.indexOf(visibleRitDelen[visibleRitDelen.length - 1]) + 1;
122
+ this.addNextNonVisibleDto(lastIdx, ritDelen, loadingDtos, visibleRitPplgs, storeState.signaleringsbeeldInfoDtos);
123
+ return loadingDtos;
124
+ }
125
+ bepaalZichtbareDtos(visibleRitPplgs, dtos) {
126
+ const visibleDtos = [];
127
+ visibleRitPplgs.forEach(pplg => {
128
+ dtos.filter(dto => dto.pplgs.includes(pplg)).forEach(dto => {
129
+ if (!visibleDtos.includes(dto)) {
130
+ visibleDtos.push(dto);
131
+ }
132
+ });
133
+ });
134
+ visibleDtos.forEach(dto => dto.metVisualisatie = true);
135
+ dtos.filter(d => !visibleDtos.includes(d)).forEach(d => d.metVisualisatie = false);
136
+ return visibleDtos;
137
+ }
138
+ distinct(value, index, self) {
139
+ return self.indexOf(value) === index;
140
+ }
141
+ addPrevNonVisibleDto(firstIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
142
+ if (firstIdx >= 0) {
143
+ const pplg = ritdelen[firstIdx].getPplg();
144
+ const ritdeelDtos = allDtos.filter(dto => dto.pplgs.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
145
+ if (!visibleRitPplgs.includes(pplg) && ritdeelDtos.length > 0) {
146
+ ritdeelDtos.filter(d => !loadingDtos.includes(d)).forEach(d => {
147
+ d.metVisualisatie = false;
148
+ loadingDtos.push(d);
149
+ });
150
+ }
151
+ else {
152
+ this.addPrevNonVisibleDto(firstIdx - 1, ritdelen, loadingDtos, visibleRitPplgs, allDtos);
153
+ }
154
+ }
155
+ }
156
+ addNextNonVisibleDto(lastIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
157
+ if (lastIdx <= ritdelen.length - 1) {
158
+ const pplg = ritdelen[lastIdx].getPplg();
159
+ const ritdeelDtos = allDtos.filter(dto => dto.pplgs.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
160
+ if (!visibleRitPplgs.includes(pplg) && ritdeelDtos.length > 0) {
161
+ ritdeelDtos.filter(d => !loadingDtos.includes(d)).forEach(d => {
162
+ d.metVisualisatie = false;
163
+ loadingDtos.push(d);
164
+ });
165
+ }
166
+ else {
167
+ this.addNextNonVisibleDto(lastIdx + 1, ritdelen, loadingDtos, visibleRitPplgs, allDtos);
168
+ }
169
+ }
170
+ }
171
+ debugLog(debug, visibleRitPplgs, loadingDtos) {
172
+ if (debug) {
173
+ console.log('RIT PPLGs: ' + visibleRitPplgs);
174
+ loadingDtos.forEach(dto => {
175
+ let str = '\nDTO-bladNaam: ' + dto.bladNaam;
176
+ str += '\nDTO-PPLGs : ' + dto.pplgs;
177
+ str += '\nVisible : ' + dto.metVisualisatie;
178
+ console.log(str);
179
+ });
180
+ }
181
+ }
182
+ // acties: Navigeer|NavigeerVanaf|SetRitDelen
183
+ navigeer(ritDelen, actie, storeDtos) {
184
+ // alle ritdelen krijgen zichtbaarheidBuitenPaginatie => false
185
+ if (actie.type === RitdelenActions.SET_RIT_DELEN) {
186
+ this.bepaalZichtbaarheidRechts(0, ritDelen, actie.paginationSize, storeDtos);
187
+ }
188
+ else if (actie.type === RitdelenActions.NAVIGEER) {
189
+ const isLinks = actie.stapSize < 0;
190
+ const startIndex = this.bepaalStartIndex(ritDelen);
191
+ const endIndex = this.bepaalEndIndex(ritDelen);
192
+ const navigerenMogelijk = !(startIndex === 0 && isLinks || endIndex === ritDelen.length - 1 && !isLinks);
193
+ if (navigerenMogelijk) {
194
+ if (isLinks) {
195
+ this.bepaalZichtbaarheidLinks(startIndex, ritDelen, actie.paginationSize, storeDtos);
196
+ }
197
+ else {
198
+ this.bepaalZichtbaarheidRechts(endIndex, ritDelen, actie.paginationSize, storeDtos);
199
+ }
200
+ }
201
+ }
202
+ else if (actie.type === RitdelenActions.NAVIGEER_VANAF) {
203
+ const idx = ritDelen.indexOf(actie.ritdeel);
204
+ this.bepaalZichtbaarheidRechts(idx, ritDelen, actie.paginationSize, storeDtos);
205
+ }
206
+ }
207
+ updateRitdelen(ritdelen, visibleDtos) {
208
+ const visibleIndices = [];
209
+ for (let i = 0; i < ritdelen.length; i++) {
210
+ if (ritdelen[i].isZichtbaarBinnenWindow()) {
211
+ visibleIndices.push(i);
212
+ }
213
+ }
214
+ const min = Math.min(...visibleIndices);
215
+ const max = Math.max(...visibleIndices);
216
+ for (let i = 0; i < ritdelen.length; i++) {
217
+ const rd = ritdelen[i];
218
+ if (rd.isZichtbaarBinnenWindow()) {
219
+ rd.bepaalTopologieElementen(this.signaleringsBeeldManagerService);
220
+ if (rd.getTopologieElementen().length > 0) {
221
+ ritdelen[i] = rd.isNietBeschikbaar() ? rd.copyMetZichtbaarheid(RitdeelZichtbaarheid.ZICHTBAAR) : rd;
222
+ }
223
+ else {
224
+ ritdelen[i] = this.maakOnzichtbaar(rd);
225
+ }
226
+ }
227
+ }
228
+ this.updateZichtbaarheidAangrezendeRitdelen(min, max, ritdelen, visibleDtos);
229
+ return this.updateZichtbaarheidBuitenWindow(ritdelen, visibleDtos);
230
+ }
231
+ updateZichtbaarheidBuitenWindow(nieuweRitdelen, visibleDtos) {
232
+ for (let i = 0; i < nieuweRitdelen.length; i++) {
233
+ const rd = nieuweRitdelen[i];
234
+ if (!rd.isZichtbaar() && this.bevatGevisualiseerdePplg(visibleDtos, rd.getPplg())) {
235
+ rd.bepaalTopologieElementen(this.signaleringsBeeldManagerService);
236
+ if (rd.getTopologieElementen().length > 0 && this.isEersteLaatstePuicZichtbaar(rd.getTopologieElementen())) {
237
+ nieuweRitdelen[i] = rd.isNietBeschikbaar() ? rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ZICHTBAAR, true) :
238
+ rd.copyMetZichtbaarheidBuitenPaginatie(true);
239
+ }
240
+ }
241
+ }
242
+ return nieuweRitdelen;
243
+ }
244
+ updateZichtbaarheidAangrezendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
245
+ let i = min - 1;
246
+ while (i >= 0) {
247
+ i = this.updateZichtbaarHeid(i, 0, visibleDtos, nieuweRitdelen) - 1;
248
+ }
249
+ i = max + 1;
250
+ while (i < nieuweRitdelen.length) {
251
+ i = this.updateZichtbaarHeid(i, nieuweRitdelen.length, visibleDtos, nieuweRitdelen) + 1;
252
+ }
253
+ }
254
+ updateZichtbaarHeid(i, end, visibleDtos, nieuweRitdelen) {
255
+ const rd = nieuweRitdelen[i];
256
+ if (this.bevatGevisualiseerdePplg(visibleDtos, rd.getPplg())) {
257
+ i = this.updateZichtbaarheidAangrenzendeRitdeel(rd, nieuweRitdelen, i, end);
258
+ }
259
+ else {
260
+ i = end;
261
+ }
262
+ return i;
263
+ }
264
+ isEersteLaatstePuicZichtbaar(topoElementen) {
265
+ return !!document.getElementById('p' + topoElementen[0].getPuic()) ||
266
+ !!document.getElementById('p' + topoElementen[topoElementen.length - 1].getPuic());
267
+ }
268
+ updateZichtbaarheidAangrenzendeRitdeel(rd, nieuweRitdelen, i, end) {
269
+ rd.bepaalTopologieElementen(this.signaleringsBeeldManagerService);
270
+ if (rd.getTopologieElementen().length > 0 && this.isEersteLaatstePuicZichtbaar(rd.getTopologieElementen())) {
271
+ nieuweRitdelen[i] = rd.isNietBeschikbaar() ? rd.copyMetZichtbaarheid(RitdeelZichtbaarheid.ZICHTBAAR) : rd;
272
+ }
273
+ else {
274
+ return end;
275
+ }
276
+ return i;
277
+ }
278
+ bevatGevisualiseerdePplg(visibleDtos, pplg) {
279
+ for (const dto of visibleDtos) {
280
+ for (const dtopplg of dto.pplgs) {
281
+ if (dtopplg === pplg) {
282
+ return true;
283
+ }
284
+ }
285
+ }
286
+ return false;
287
+ }
288
+ maakOnzichtbaar(rd) {
289
+ return rd.isZichtbaar() || rd.isOnzichtbaarDoorGebruiker() ?
290
+ rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM, false) :
291
+ rd.copyMetZichtbaarheidBuitenPaginatie(false);
292
+ }
293
+ bepaalZichtbaarheidRechts(idx, items, paginationSize, dtos) {
294
+ const pplgsWindow = [];
295
+ const dtosWindow = [];
296
+ for (let i = 0; i < items.length; i++) {
297
+ const rd = items[i];
298
+ if (i >= idx && this.valtBinnenPaginatieWindow(pplgsWindow, paginationSize, dtosWindow)) {
299
+ this.setZichtbaar(rd, pplgsWindow, dtos, dtosWindow, items, i);
300
+ }
301
+ else {
302
+ items[i] = rd.isZichtbaar() || rd.isOnzichtbaarDoorGebruiker() ?
303
+ rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM, false) :
304
+ rd.copyMetZichtbaarheidBuitenPaginatie(false);
305
+ }
306
+ }
307
+ }
308
+ bepaalZichtbaarheidLinks(idx, items, paginationSize, dtos) {
309
+ const pplgsWindow = [];
310
+ const dtosWindow = [];
311
+ for (let i = items.length - 1; i >= 0; i--) {
312
+ const rd = items[i];
313
+ if (i <= idx && this.valtBinnenPaginatieWindow(pplgsWindow, paginationSize, dtosWindow)) {
314
+ this.setZichtbaar(rd, pplgsWindow, dtos, dtosWindow, items, i);
315
+ }
316
+ else {
317
+ items[i] = rd.isZichtbaar() || rd.isOnzichtbaarDoorGebruiker() ?
318
+ rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM, false) :
319
+ rd.copyMetZichtbaarheidBuitenPaginatie(false);
320
+ }
321
+ }
322
+ }
323
+ valtBinnenPaginatieWindow(pplgsWindow, paginationSize, dtosWindow) {
324
+ return pplgsWindow.length < paginationSize || dtosWindow.length < paginationSize;
325
+ }
326
+ setZichtbaar(rd, pplgsWindow, dtos, dtosWindow, items, i) {
327
+ const itemPplg = rd.getPplg();
328
+ if (!pplgsWindow.includes(itemPplg)) {
329
+ pplgsWindow.push(itemPplg);
330
+ }
331
+ const pplgDtos = [];
332
+ dtos.filter(dto => dto.pplgs.includes(itemPplg)).forEach(dto => {
333
+ if (!pplgDtos.includes(dto)) {
334
+ pplgDtos.push(dto);
335
+ }
336
+ });
337
+ pplgDtos.filter(d => !dtosWindow.includes(d)).forEach(d => dtosWindow.push(d));
338
+ items[i] = !rd.isZichtbaar() ? rd.copyMetZichtbaarheidEnPaginatie(RitdeelZichtbaarheid.ZICHTBAAR, false) :
339
+ rd.copyMetZichtbaarheidBuitenPaginatie(false);
340
+ }
341
+ bepaalStartIndex(ritDelen) {
342
+ for (let i = 0; i < ritDelen.length; i++) {
343
+ if (ritDelen[i].isBinnenWindow()) {
344
+ return i;
345
+ }
346
+ }
347
+ return -1;
348
+ }
349
+ bepaalEndIndex(ritDelen) {
350
+ for (let i = ritDelen.length - 1; i >= 0; i--) {
351
+ if (ritDelen[i].isBinnenWindow()) {
352
+ return i;
353
+ }
354
+ }
355
+ return -1;
356
+ }
357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LaadSignaleringsbeeldenEffect, deps: [{ token: i1.Actions }, { token: i2.Store }, { token: i3.SignaleringsBeeldManagerService }, { token: i4.EditorService }, { token: i5.SignaleringsbeeldInfoResource }, { token: i6.ConnectorService }, { token: i7.MessagesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
358
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LaadSignaleringsbeeldenEffect }); }
359
+ }
360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: LaadSignaleringsbeeldenEffect, decorators: [{
361
+ type: Injectable
362
+ }], ctorParameters: () => [{ type: i1.Actions }, { type: i2.Store }, { type: i3.SignaleringsBeeldManagerService }, { type: i4.EditorService }, { type: i5.SignaleringsbeeldInfoResource }, { type: i6.ConnectorService }, { type: i7.MessagesService }] });
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFhZC1zaWduYWxlcmluZ3NiZWVsZGVuLmVmZmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21zdC12aWV3ZXIvc3JjL2xpYi9zdGF0ZS9lZmZlY3QvbGFhZC1zaWduYWxlcmluZ3NiZWVsZGVuLmVmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkUsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkYsT0FBTyxFQUFXLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxVQUFVLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkcsT0FBTyxLQUFLLGVBQWUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7O0FBb0IvRCxNQUFNLE9BQU8sNkJBQTZCO0lBSXRDLFlBQW9CLFFBQWlCLEVBQ2pCLEtBQTRCLEVBQzVCLCtCQUFnRSxFQUNoRSxhQUE0QixFQUM1QixXQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsZUFBZ0M7UUFOaEMsYUFBUSxHQUFSLFFB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QUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBbUI7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLENBQUM7WUFDYixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDOzhHQW5hUSw2QkFBNkI7a0hBQTdCLDZCQUE2Qjs7MkZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElteFZpZXdlckNvbXBvbmVudCwgUG9pbnQsIFN2Z0luZm8gfSBmcm9tICdAbG94aWEvaW14LXZpZXdlcic7XG5pbXBvcnQgeyBzYmJsYWQgfSBmcm9tICdAbG94aWEvcmlqd2VnZW4nO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXRvbWljLWNvbXBvbmVudHMvc2VydmljZXMvbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBSaXRkZWVsLCBSaXRkZWVsWmljaHRiYWFyaGVpZCB9IGZyb20gJy4uLy4uL21vZGVsL3JpdGRlZWwnO1xuaW1wb3J0IHsgSW5mcmFNb2RlbCB9IGZyb20gJy4uLy4uL29wdGltbyc7XG5pbXBvcnQgeyBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvLCBTaWduYWxlcmluZ3NiZWVsZEluZm9SZXNvdXJjZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9zaWduYWxlcmluZ3NiZWVsZGluZm8ucmVzb3VyY2UnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsZXJpbmdzLWJlZWxkLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlciB9IGZyb20gJy4uLy4uL3V0aWwvbWVzc2FnZS1idWlsZGVyJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi91dGlsL3V0aWxzJztcbmltcG9ydCAqIGFzIE1zdEFjdGlvbnMgZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcbmltcG9ydCB7IFNldFNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MsIFNldFZpc2libGVTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcbmltcG9ydCAqIGFzIFJpdGRlbGVuQWN0aW9ucyBmcm9tICcuLi9hY3Rpb25zL3JpdGRlbGVuLmFjdGlvbnMnO1xuaW1wb3J0IHsgTXN0RWRpdG9yU3RhdGUgfSBmcm9tICcuLi9tc3QtZWRpdG9yLXN0YXRlJztcbmltcG9ydCBUb3BvbG9neUVsZW1lbnQgPSBzYmJsYWQuVG9wb2xvZ3lFbGVtZW50O1xuXG5pbnRlcmZhY2UgTmF2aWdlZXJCdWl0ZW5SaXRJbnB1dCB7XG4gICAgcmFuZDogVG9wb2xvZ3lFbGVtZW50O1xuICAgIHJhbmRQdWljOiBzdHJpbmc7XG4gICAgc3RvcmVTdGF0ZTogTXN0RWRpdG9yU3RhdGU7XG4gICAgb3RoZXJQcGxnPzogc3RyaW5nO1xuICAgIGR0b3M/OiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW107XG4gICAgc3ZnRGF0YVVybHM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIFNpZ25hbGVyaW5nc2JlZWxkSW5mb0lucHV0IHtcbiAgICBkdG9zPzogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdO1xuICAgIGFjdGllOiBhbnk7XG4gICAgc3RvcmVTdGF0ZTogTXN0RWRpdG9yU3RhdGU7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMYWFkU2lnbmFsZXJpbmdzYmVlbGRlbkVmZmVjdCB7XG5cbiAgICBwcml2YXRlIFNWR19QSVhFTF9SVUlNVEUgPSAzMDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8TXN0RWRpdG9yU3RhdGU+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzYmlSZXNvdXJjZTogU2lnbmFsZXJpbmdzYmVlbGRJbmZvUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb25uZWN0b3JTZXJ2aWNlOiBDb25uZWN0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgbWVzc2FnZXNTZXJpdmNlOiBNZXNzYWdlc1NlcnZpY2UpIHtcbiAgICB9XG5cbiAgICB2ZXJ3ZXJrUml0ZGVsZW4kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKFJpdGRlbGVuQWN0aW9ucy5zZXRSaXREZWxlbiwgUml0ZGVsZW5BY3Rpb25zLm5hdmlnZWVyLCBSaXRkZWxlbkFjdGlvbnMubmF2aWdlZXJWYW5hZiksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUpLFxuICAgICAgICBtYXAoKFthY3RpZSwgc3RvcmVTdGF0ZV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goTXN0QWN0aW9ucy5TZXRPbmdlcGxhbmRlQWN0aWVzQmVwYWFsZChmYWxzZSkpO1xuICAgICAgICAgICAgdGhpcy52ZXJ3ZXJrUml0ZGVsZW4oYWN0aWUsIHN0b3JlU3RhdGUpO1xuICAgICAgICB9KSksIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgbGFhZEVuVmVyd2Vya1NpZ25hbGVyaW5nc2JlZWxkSW5mbyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoTXN0QWN0aW9ucy5sYWFkRW5WZXJ3ZXJrU2lnbmFsZXJpbmdzYmVlbGRJbmZvKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2FjdGllLCBzdG9yZVN0YXRlXSkgPT4gdGhpcy5oYW5kbGVTaWduYWxlcmluZ3NiZWVsZEluZm8oe2FjdGllLCBzdG9yZVN0YXRlfSkpXG4gICAgKSwgeyBkaXNwYXRjaDogZmFsc2UgfSk7XG5cbiAgICBwcml2YXRlIGhhbmRsZVNpZ25hbGVyaW5nc2JlZWxkSW5mbyh7YWN0aWUsIHN0b3JlU3RhdGV9IDogU2lnbmFsZXJpbmdzYmVlbGRJbmZvSW5wdXQpOiAgT2JzZXJ2YWJsZTxJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2JpUmVzb3VyY2UubGFhZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyh0aGlzLmNyZWF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb1F1ZXJ5RHRvKGFjdGllLnBwbGdzLCBzdG9yZVN0YXRlLmlhVmVyc2llKSkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICB0YXAoKGR0b3MpID0+IHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHtkdG9zLCBzdG9yZVN0YXRlLCBhY3RpZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXNTZXJpdmNlLnNob3dNZXNzYWdlKE1lc3NhZ2VCdWlsZGVyLm5pZXRHZXZvbmRlblNCSShlcnIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NSZXNwb25zZSh7IGR0b3MsIHN0b3JlU3RhdGUsIGFjdGllIH06IFNpZ25hbGVyaW5nc2JlZWxkSW5mb0lucHV0KTogdm9pZCAge1xuICAgICAgICBpZiAoZHRvcyAmJiBkdG9zLmZpbHRlcihkdG8gPT4gZHRvLm1ldFZpc3VhbGlzYXRpZSkubGVuZ3RoID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNTZXJpdmNlLnNob3dNZXNzYWdlKE1lc3NhZ2VCdWlsZGVyLm1lZXJEYW4xMkJsYWRlbkdldm9uZGVuKGR0b3MubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zKGR0b3MsIHN0b3JlU3RhdGUuaWFWZXJzaWUsIGFjdGllLnJpdCwgYWN0aWUucGFnaW5hdGlvblNpemUsIGFjdGllLnJpdEdld2lqemlnZFRvZWdlc3RhYW4pKTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZXRWaXNpYmxlU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvcyhkdG9zKSk7XG4gICAgfVxuXG4gICAgbmF2aWdlZXJCdWl0ZW5SaXQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKE1zdEFjdGlvbnMubmF2aWdlZXJCdWl0ZW5SaXQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlKSxcbiAgICAgICAgc3dpdGNoTWFwKChbYWN0aWUsIHN0b3JlU3RhdGVdKSA9PlxuICAgICAgICAgICAgb2Yoe1xuICAgICAgICAgICAgICAgIHJhbmQ6IHRoaXMuc2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZS5nZXRUb3BvbG9neUVsZW1lbnRCeVB1aWMoYWN0aWUucmFuZFB1aWMpLFxuICAgICAgICAgICAgICAgIHJhbmRQdWljOiBhY3RpZS5yYW5kUHVpYyxcbiAgICAgICAgICAgICAgICBzdG9yZVN0YXRlXG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh0aGlzLmdldE90aGVyUmFuZC5iaW5kKHRoaXMpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAodGhpcy5sb2FkUm91dGVGaWxlc0FuZFNpZ25hbGVyaW5nc2JlZWxkSW5mby5iaW5kKHRoaXMpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAodGhpcy5sb2FkU2lnbmFsZXJpbmdzYmVlbGRlbi5iaW5kKHRoaXMpKSxcbiAgICAgICAgICAgICAgICBtYXAodGhpcy5wcm9jZXNzU3Znc0FuZFVwZGF0ZVJpdGRlbGVuLmJpbmQodGhpcykpXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApLCB7IGRpc3BhdGNoOiBmYWxzZSB9KTtcblxuICAgIHByaXZhdGUgZ2V0T3RoZXJSYW5kKHsgcmFuZCwgcmFuZFB1aWMsIHN0b3JlU3RhdGV9OiBOYXZpZ2VlckJ1aXRlblJpdElucHV0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvclNlcnZpY2UuZ2V0T3RoZXJSYW5kKHJhbmRQdWljKS5waXBlKFxuICAgICAgICAgICAgbWFwKG90aGVyUHBsZyA9PiAoeyBvdGhlclBwbGcsIHJhbmQsIHN0b3JlU3RhdGUgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUm91dGVGaWxlc0FuZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyh7IG90aGVyUHBsZywgcmFuZCwgc3RvcmVTdGF0ZSB9OiBOYXZpZ2VlckJ1aXRlblJpdElucHV0KSB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5sYWFkUm91dGVGaWxlcyhzdG9yZVN0YXRlLmlhVmVyc2llLnZlcnNpZSwgW3JhbmQuZ2V0UFBMRygpLCBvdGhlclBwbGddKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2JpUmVzb3VyY2UubGFhZFNpZ25hbGVyaW5nc2JlZWxkSW5mbyh0aGlzLmNyZWF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb1F1ZXJ5RHRvKFtyYW5kLmdldFBQTEcoKSwgb3RoZXJQcGxnXSwgc3RvcmVTdGF0ZS5pYVZlcnNpZSkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZHRvcyA9PiAoeyBkdG9zLCBzdG9yZVN0YXRlIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFNpZ25hbGVyaW5nc2JlZWxkZW4oeyBkdG9zLCBzdG9yZVN0YXRlIH06IE5hdmlnZWVyQnVpdGVuUml0SW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5sYWFkU2lnbmFsZXJpbmdzYmVlbGRlbihzdG9yZVN0YXRlLmlhVmVyc2llLnZlcnNpZSwgZHRvcykucGlwZShcbiAgICAgICAgICAgIG1hcChzdmdEYXRhVXJscyA9PiAoeyBzdmdEYXRhVXJscywgc3RvcmVTdGF0ZSwgZHRvcyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdmdzQW5kVXBkYXRlUml0ZGVsZW4oeyBzdmdEYXRhVXJscywgc3RvcmVTdGF0ZSwgZHRvcyB9OiBOYXZpZ2VlckJ1aXRlblJpdElucHV0KTogdm9pZCB7XG4gICAgICAgIHRoaXMudmVyd2Vya1N2Z3Moc3ZnRGF0YVVybHMpO1xuICAgICAgICBjb25zdCBuaWV1d2VSaXRkZWxlbiA9IHRoaXMudXBkYXRlUml0ZGVsZW4oc3RvcmVTdGF0ZS5yaXREZWxlbiwgZHRvcyk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goTXN0QWN0aW9ucy5VcGRhdGVWaXNpYmxlU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvcyhkdG9zKSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUml0ZGVsZW5BY3Rpb25zLnVwZGF0ZVJpdERlbGVuKG5pZXV3ZVJpdGRlbGVuKSk7XG4gICAgfVxuXG4gICAgdmVyd2Vya1JpdGRlbGVuKGFjdGllLCBzdG9yZVN0YXRlOiBNc3RFZGl0b3JTdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0luaXQgPSBhY3RpZS50eXBlID09PSBSaXRkZWxlbkFjdGlvbnMuU0VUX1JJVF9ERUxFTjtcbiAgICAgICAgY29uc3Qgcml0RGVsZW46IFJpdGRlZWxbXSA9IGlzSW5pdCA/IGFjdGllLnJpdERlbGVuIDogc3RvcmVTdGF0ZS5yaXREZWxlbjtcbiAgICAgICAgY29uc3Qgc3RvcmVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10gPSBzdG9yZVN0YXRlLnNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3M7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2VlcihyaXREZWxlbiwgYWN0aWUsIHN0b3JlRHRvcyk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZVJpdERlbGVuID0gcml0RGVsZW4uZmlsdGVyKG4gPT4gbi5pc1ppY2h0YmFhckJpbm5lbldpbmRvdygpKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVJpdFBwbGdzOiBzdHJpbmdbXSA9IHZpc2libGVSaXREZWxlbi5tYXAociA9PiByLmdldFBwbGcoKSkuZmlsdGVyKHRoaXMuZGlzdGluY3QpO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVEdG9zID0gdGhpcy5iZXBhYWxaaWNodGJhcmVEdG9zKHZpc2libGVSaXRQcGxncywgc3RvcmVEdG9zKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ0R0b3MgPSB0aGlzLmJlcGFhbFRvTG9hZER0b3ModmlzaWJsZUR0b3MsIHJpdERlbGVuLCB2aXNpYmxlUml0RGVsZW4sIHZpc2libGVSaXRQcGxncywgc3RvcmVTdGF0ZSk7XG5cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmxhYWRTaWduYWxlcmluZ3NiZWVsZGVuKGFjdGllLmlhdmVyc2llaW5mby52ZXJzaWUsIGxvYWRpbmdEdG9zKS5waXBlKFxuICAgICAgICAgICAgdGFwKHN2Z0RhdGFVcmxzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcndlcmtTdmdzKHN2Z0RhdGFVcmxzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHJpdERlbGVuLCB2aXNpYmxlRHRvcywgc3RvcmVTdGF0ZSwgdmlzaWJsZVJpdFBwbGdzLCBsb2FkaW5nRHRvcywgaXNJbml0LCBzdG9yZUR0b3MpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlc1Nlcml2Y2Uuc2hvd01lc3NhZ2UoTWVzc2FnZUJ1aWxkZXIucndwRGF0YU5pZXRHZXZvbmRlbihVdGlscy5nZXRWYWxpZEVyb3JyTWVzc2FnZShlcnIpKSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVN0YXRlKHJpdERlbGVuOiBSaXRkZWVsW10sIHZpc2libGVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10sIHN0b3JlU3RhdGU6IE1zdEVkaXRvclN0YXRlLCB2aXNpYmxlUml0UHBsZ3M6IHN0cmluZ1tdLCBsb2FkaW5nRHRvczogYW55W10sIGlzSW5pdDogYm9vbGVhbiwgc3RvcmVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10pOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuaWV1d2VSaXRkZWxlbiA9IHRoaXMudXBkYXRlUml0ZGVsZW4ocml0RGVsZW4sIHZpc2libGVEdG9zKTtcbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2coc3RvcmVTdGF0ZS5kZWJ1ZywgdmlzaWJsZVJpdFBwbGdzLCBsb2FkaW5nRHRvcyk7XG5cbiAgICAgICAgICAgIGlmICghaXNJbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChNc3RBY3Rpb25zLlVwZGF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3Moc3RvcmVEdG9zKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChNc3RBY3Rpb25zLlVwZGF0ZVZpc2libGVTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zKGxvYWRpbmdEdG9zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFJpdGRlbGVuQWN0aW9ucy51cGRhdGVSaXREZWxlbihuaWV1d2VSaXRkZWxlbikpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNpZ25hbGVyaW5nc2JlZWxkSW5mb1F1ZXJ5RHRvKHBwbGdzOiBzdHJpbmdbXSwgaWFpbmZvOiBJbmZyYU1vZGVsKTogYW55IHtcbiAgICAgICAgY29uc3QgZGF0dW0gPSBpYWluZm8uaW5nYW5nc0RhdHVtICYmICFpc05hTihpYWluZm8uaW5nYW5nc0RhdHVtLmdldFRpbWUoKSkgPyBpYWluZm8uaW5nYW5nc0RhdHVtLnRvSVNPU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHBwbGdzLCB2ZXJzaWU6IGlhaW5mby52ZXJzaWUsIGluZ2FuZ3NEYXR1bTogZGF0dW0gfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZlcndlcmtTdmdzKHN2Z0RhdGFVcmxzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goTXN0QWN0aW9ucy5TZXRTdmdJbmZvcyh0aGlzLmJlcGFhbFN2Z0luZm9zKHN2Z0RhdGFVcmxzKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsU3ZnSW5mb3Moc3ZnRGF0YVVybHMpOiBTdmdJbmZvW10ge1xuICAgICAgICBsZXQgbmV4dENvb3JkcyA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgY29uc3QgaW5mb3M6IFN2Z0luZm9bXSA9IFtdO1xuICAgICAgICBzdmdEYXRhVXJscy5mb3JFYWNoKHN2Z0RhdGFVcmwgPT4ge1xuICAgICAgICAgICAgaWYgKHN2Z0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkID0gYXRvYihzdmdEYXRhVXJsLnN1YnN0cmluZygnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGluZm9zLnB1c2gobmV3IFN2Z0luZm8oJ2RhdGE6aW1hZ2Uvc3ZnK3htbCwnICsgZGVjb2RlZCwgbmV4dENvb3JkcykpO1xuICAgICAgICAgICAgICAgIG5leHRDb29yZHMgPSBuZXcgUG9pbnQobmV4dENvb3Jkcy54ICsgSW14Vmlld2VyQ29tcG9uZW50LmdldFhDb29yZGluYXRlKGRlY29kZWQpICsgdGhpcy5TVkdfUElYRUxfUlVJTVRFLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpbmZvcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFRvTG9hZER0b3ModmlzaWJsZUR0b3MsIHJpdERlbGVuOiBSaXRkZWVsW10sIHZpc2libGVSaXREZWxlbiwgdmlzaWJsZVJpdFBwbGdzOiBzdHJpbmdbXSwgc3RvcmVTdGF0ZTogTXN0RWRpdG9yU3RhdGUpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdEdG9zID0gWy4uLnZpc2libGVEdG9zXTtcbiAgICAgICAgY29uc3QgZmlyc3RJZHggPSByaXREZWxlbi5pbmRleE9mKHZpc2libGVSaXREZWxlblswXSkgLSAxO1xuICAgICAgICB0aGlzLmFkZFByZXZOb25WaXNpYmxlRHRvKGZpcnN0SWR4LCByaXREZWxlbiwgbG9hZGluZ0R0b3MsIHZpc2libGVSaXRQcGxncywgc3RvcmVTdGF0ZS5zaWduYWxlcmluZ3NiZWVsZEluZm9EdG9zKTtcbiAgICAgICAgY29uc3QgbGFzdElkeCA9IHJpdERlbGVuLmluZGV4T2YodmlzaWJsZVJpdERlbGVuW3Zpc2libGVSaXREZWxlbi5sZW5ndGggLSAxXSkgKyAxO1xuICAgICAgICB0aGlzLmFkZE5leHROb25WaXNpYmxlRHRvKGxhc3RJZHgsIHJpdERlbGVuLCBsb2FkaW5nRHRvcywgdmlzaWJsZVJpdFBwbGdzLCBzdG9yZVN0YXRlLnNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b3MpO1xuICAgICAgICByZXR1cm4gbG9hZGluZ0R0b3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxaaWNodGJhcmVEdG9zKHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sIGR0b3M6IElTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9bXSk6IElTaWduYWxlcmluZ3NiZWVsZEluZm9EdG9bXSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10gPSBbXTtcbiAgICAgICAgdmlzaWJsZVJpdFBwbGdzLmZvckVhY2gocHBsZyA9PiB7XG4gICAgICAgICAgICBkdG9zLmZpbHRlcihkdG8gPT4gZHRvLnBwbGdzLmluY2x1ZGVzKHBwbGcpKS5mb3JFYWNoKGR0byA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF2aXNpYmxlRHRvcy5pbmNsdWRlcyhkdG8pKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVEdG9zLnB1c2goZHRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZpc2libGVEdG9zLmZvckVhY2goZHRvID0+IGR0by5tZXRWaXN1YWxpc2F0aWUgPSB0cnVlKTtcbiAgICAgICAgZHRvcy5maWx0ZXIoZCA9PiAhdmlzaWJsZUR0b3MuaW5jbHVkZXMoZCkpLmZvckVhY2goZCA9PiBkLm1ldFZpc3VhbGlzYXRpZSA9IGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHZpc2libGVEdG9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzdGluY3QodmFsdWUsIGluZGV4LCBzZWxmKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFByZXZOb25WaXNpYmxlRHRvKGZpcnN0SWR4LCByaXRkZWxlbjogUml0ZGVlbFtdLCBsb2FkaW5nRHRvczogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdLCB2aXNpYmxlUml0UHBsZ3M6IHN0cmluZ1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRHRvczogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdKTogdm9pZCB7XG4gICAgICAgIGlmIChmaXJzdElkeCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcGxnID0gcml0ZGVsZW5bZmlyc3RJZHhdLmdldFBwbGcoKTtcbiAgICAgICAgICAgIGNvbnN0IHJpdGRlZWxEdG9zID0gYWxsRHRvcy5maWx0ZXIoZHRvID0+IGR0by5wcGxncy5pbmNsdWRlcyhwcGxnKSkuZmlsdGVyKGR0byA9PiAhbG9hZGluZ0R0b3MuaW5jbHVkZXMoZHRvKSk7XG5cbiAgICAgICAgICAgIGlmICghdmlzaWJsZVJpdFBwbGdzLmluY2x1ZGVzKHBwbGcpICYmIHJpdGRlZWxEdG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByaXRkZWVsRHRvcy5maWx0ZXIoZCA9PiAhbG9hZGluZ0R0b3MuaW5jbHVkZXMoZCkpLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQubWV0VmlzdWFsaXNhdGllID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdEdG9zLnB1c2goZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJldk5vblZpc2libGVEdG8oZmlyc3RJZHggLSAxLCByaXRkZWxlbiwgbG9hZGluZ0R0b3MsIHZpc2libGVSaXRQcGxncywgYWxsRHRvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE5leHROb25WaXNpYmxlRHRvKGxhc3RJZHgsIHJpdGRlbGVuOiBSaXRkZWVsW10sIGxvYWRpbmdEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10sIHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKGxhc3RJZHggPD0gcml0ZGVsZW4ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgcHBsZyA9IHJpdGRlbGVuW2xhc3RJZHhdLmdldFBwbGcoKTtcbiAgICAgICAgICAgIGNvbnN0IHJpdGRlZWxEdG9zID0gYWxsRHRvcy5maWx0ZXIoZHRvID0+IGR0by5wcGxncy5pbmNsdWRlcyhwcGxnKSkuZmlsdGVyKGR0byA9PiAhbG9hZGluZ0R0b3MuaW5jbHVkZXMoZHRvKSk7XG5cbiAgICAgICAgICAgIGlmICghdmlzaWJsZVJpdFBwbGdzLmluY2x1ZGVzKHBwbGcpICYmIHJpdGRlZWxEdG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByaXRkZWVsRHRvcy5maWx0ZXIoZCA9PiAhbG9hZGluZ0R0b3MuaW5jbHVkZXMoZCkpLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQubWV0VmlzdWFsaXNhdGllID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdEdG9zLnB1c2goZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTmV4dE5vblZpc2libGVEdG8obGFzdElkeCArIDEsIHJpdGRlbGVuLCBsb2FkaW5nRHRvcywgdmlzaWJsZVJpdFBwbGdzLCBhbGxEdG9zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWdMb2coZGVidWcsIHZpc2libGVSaXRQcGxnczogc3RyaW5nW10sIGxvYWRpbmdEdG9zKTogdm9pZCB7XG4gICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JJVCBQUExHczogJyArIHZpc2libGVSaXRQcGxncyk7XG4gICAgICAgICAgICBsb2FkaW5nRHRvcy5mb3JFYWNoKGR0byA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHN0ciA9ICdcXG5EVE8tYmxhZE5hYW06ICcgKyBkdG8uYmxhZE5hYW07XG4gICAgICAgICAgICAgICAgc3RyICs9ICdcXG5EVE8tUFBMR3MgICA6ICcgKyBkdG8ucHBsZ3M7XG4gICAgICAgICAgICAgICAgc3RyICs9ICdcXG5WaXNpYmxlICAgICA6ICcgKyBkdG8ubWV0VmlzdWFsaXNhdGllO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0cik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFjdGllczogTmF2aWdlZXJ8TmF2aWdlZXJWYW5hZnxTZXRSaXREZWxlblxuICAgIHByaXZhdGUgbmF2aWdlZXIocml0RGVsZW46IFJpdGRlZWxbXSwgYWN0aWU6IHtcbiAgICAgICAgcGFnaW5hdGlvblNpemU6IG51bWJlcjtcbiAgICAgICAgc3RhcFNpemU6IG51bWJlcjtcbiAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICByaXRkZWVsXG4gICAgfSwgc3RvcmVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10pOiB2b2lkIHtcbiAgICAgICAgLy8gYWxsZSByaXRkZWxlbiBrcmlqZ2VuIHppY2h0YmFhcmhlaWRCdWl0ZW5QYWdpbmF0aWUgPT4gZmFsc2VcbiAgICAgICAgaWYgKGFjdGllLnR5cGUgPT09IFJpdGRlbGVuQWN0aW9ucy5TRVRfUklUX0RFTEVOKSB7XG4gICAgICAgICAgICB0aGlzLmJlcGFhbFppY2h0YmFhcmhlaWRSZWNodHMoMCwgcml0RGVsZW4sIGFjdGllLnBhZ2luYXRpb25TaXplLCBzdG9yZUR0b3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGllLnR5cGUgPT09IFJpdGRlbGVuQWN0aW9ucy5OQVZJR0VFUikge1xuICAgICAgICAgICAgY29uc3QgaXNMaW5rcyA9IGFjdGllLnN0YXBTaXplIDwgMDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmJlcGFhbFN0YXJ0SW5kZXgocml0RGVsZW4pO1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLmJlcGFhbEVuZEluZGV4KHJpdERlbGVuKTtcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnZXJlbk1vZ2VsaWprID0gIShzdGFydEluZGV4ID09PSAwICYmIGlzTGlua3MgfHwgZW5kSW5kZXggPT09IHJpdERlbGVuLmxlbmd0aCAtIDEgJiYgIWlzTGlua3MpO1xuICAgICAgICAgICAgaWYgKG5hdmlnZXJlbk1vZ2VsaWprKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZXBhYWxaaWNodGJhYXJoZWlkTGlua3Moc3RhcnRJbmRleCwgcml0RGVsZW4sIGFjdGllLnBhZ2luYXRpb25TaXplLCBzdG9yZUR0b3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVwYWFsWmljaHRiYWFyaGVpZFJlY2h0cyhlbmRJbmRleCwgcml0RGVsZW4sIGFjdGllLnBhZ2luYXRpb25TaXplLCBzdG9yZUR0b3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhY3RpZS50eXBlID09PSBSaXRkZWxlbkFjdGlvbnMuTkFWSUdFRVJfVkFOQUYpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IHJpdERlbGVuLmluZGV4T2YoYWN0aWUucml0ZGVlbCk7XG4gICAgICAgICAgICB0aGlzLmJlcGFhbFppY2h0YmFhcmhlaWRSZWNodHMoaWR4LCByaXREZWxlbiwgYWN0aWUucGFnaW5hdGlvblNpemUsIHN0b3JlRHRvcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJpdGRlbGVuKHJpdGRlbGVuOiBSaXRkZWVsW10sIHZpc2libGVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10pOiBSaXRkZWVsW10ge1xuICAgICAgICBjb25zdCB2aXNpYmxlSW5kaWNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpdGRlbGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocml0ZGVsZW5baV0uaXNaaWNodGJhYXJCaW5uZW5XaW5kb3coKSkge1xuICAgICAgICAgICAgICAgIHZpc2libGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluID0gTWF0aC5taW4oLi4udmlzaWJsZUluZGljZXMpO1xuICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi52aXNpYmxlSW5kaWNlcyk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaXRkZWxlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmQgPSByaXRkZWxlbltpXTtcblxuICAgICAgICAgICAgaWYgKHJkLmlzWmljaHRiYWFyQmlubmVuV2luZG93KCkpIHtcbiAgICAgICAgICAgICAgICByZC5iZXBhYWxUb3BvbG9naWVFbGVtZW50ZW4odGhpcy5zaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmQuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByaXRkZWxlbltpXSA9IHJkLmlzTmlldEJlc2NoaWtiYWFyKCkgPyByZC5jb3B5TWV0WmljaHRiYWFyaGVpZChSaXRkZWVsWmljaHRiYWFyaGVpZC5aSUNIVEJBQVIpIDogcmQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcml0ZGVsZW5baV0gPSB0aGlzLm1hYWtPbnppY2h0YmFhcihyZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVaaWNodGJhYXJoZWlkQWFuZ3JlemVuZGVSaXRkZWxlbihtaW4sIG1heCwgcml0ZGVsZW4sIHZpc2libGVEdG9zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVaaWNodGJhYXJoZWlkQnVpdGVuV2luZG93KHJpdGRlbGVuLCB2aXNpYmxlRHRvcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVaaWNodGJhYXJoZWlkQnVpdGVuV2luZG93KG5pZXV3ZVJpdGRlbGVuLCB2aXNpYmxlRHRvczogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdKTogUml0ZGVlbFtdIHtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5pZXV3ZVJpdGRlbGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZCA9IG5pZXV3ZVJpdGRlbGVuW2ldO1xuXG4gICAgICAgICAgICBpZiAoIXJkLmlzWmljaHRiYWFyKCkgJiYgdGhpcy5iZXZhdEdldmlzdWFsaXNlZXJkZVBwbGcodmlzaWJsZUR0b3MsIHJkLmdldFBwbGcoKSkpIHtcbiAgICAgICAgICAgICAgICByZC5iZXBhYWxUb3BvbG9naWVFbGVtZW50ZW4odGhpcy5zaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmQuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkubGVuZ3RoID4gMCAmJiB0aGlzLmlzRWVyc3RlTGFhdHN0ZVB1aWNaaWNodGJhYXIocmQuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5pZXV3ZVJpdGRlbGVuW2ldID0gcmQuaXNOaWV0QmVzY2hpa2JhYXIoKSA/IHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkRW5QYWdpbmF0aWUoUml0ZGVlbFppY2h0YmFhcmhlaWQuWklDSFRCQUFSLCB0cnVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEJ1aXRlblBhZ2luYXRpZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5pZXV3ZVJpdGRlbGVuO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWmljaHRiYWFyaGVpZEFhbmdyZXplbmRlUml0ZGVsZW4obWluLCBtYXgsIG5pZXV3ZVJpdGRlbGVuLCB2aXNpYmxlRHRvczogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdKTogdm9pZCB7XG4gICAgICAgIGxldCBpID0gbWluIC0gMTtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgICAgICAgaSA9IHRoaXMudXBkYXRlWmljaHRiYWFySGVpZChpLCAwLCB2aXNpYmxlRHRvcywgbmlldXdlUml0ZGVsZW4pIC0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgPSBtYXggKyAxO1xuICAgICAgICB3aGlsZSAoaSA8IG5pZXV3ZVJpdGRlbGVuLmxlbmd0aCkge1xuICAgICAgICAgICAgaSA9IHRoaXMudXBkYXRlWmljaHRiYWFySGVpZChpLCBuaWV1d2VSaXRkZWxlbi5sZW5ndGgsIHZpc2libGVEdG9zLCBuaWV1d2VSaXRkZWxlbikgKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVaaWNodGJhYXJIZWlkKGk6IG51bWJlciwgZW5kOiBudW1iZXIsIHZpc2libGVEdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10sIG5pZXV3ZVJpdGRlbGVuOiBSaXRkZWVsW10pOiBudW1iZXIge1xuICAgICAgICBjb25zdCByZCA9IG5pZXV3ZVJpdGRlbGVuW2ldO1xuICAgICAgICBpZiAodGhpcy5iZXZhdEdldmlzdWFsaXNlZXJkZVBwbGcodmlzaWJsZUR0b3MsIHJkLmdldFBwbGcoKSkpIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLnVwZGF0ZVppY2h0YmFhcmhlaWRBYW5ncmVuemVuZGVSaXRkZWVsKHJkLCBuaWV1d2VSaXRkZWxlbiwgaSwgZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSBlbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0VlcnN0ZUxhYXRzdGVQdWljWmljaHRiYWFyKHRvcG9FbGVtZW50ZW46IFRvcG9sb2d5RWxlbWVudFtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwJyArIHRvcG9FbGVtZW50ZW5bMF0uZ2V0UHVpYygpKSB8fFxuICAgICAgICAgICAgISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncCcgKyB0b3BvRWxlbWVudGVuW3RvcG9FbGVtZW50ZW4ubGVuZ3RoIC0gMV0uZ2V0UHVpYygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVppY2h0YmFhcmhlaWRBYW5ncmVuemVuZGVSaXRkZWVsKHJkOiBSaXRkZWVsLCBuaWV1d2VSaXRkZWxlbjogUml0ZGVlbFtdLCBpOiBudW1iZXIsIGVuZDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgcmQuYmVwYWFsVG9wb2xvZ2llRWxlbWVudGVuKHRoaXMuc2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSk7XG4gICAgICAgIGlmIChyZC5nZXRUb3BvbG9naWVFbGVtZW50ZW4oKS5sZW5ndGggPiAwICYmIHRoaXMuaXNFZXJzdGVMYWF0c3RlUHVpY1ppY2h0YmFhcihyZC5nZXRUb3BvbG9naWVFbGVtZW50ZW4oKSkpIHtcbiAgICAgICAgICAgIG5pZXV3ZVJpdGRlbGVuW2ldID0gcmQuaXNOaWV0QmVzY2hpa2JhYXIoKSA/IHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkKFJpdGRlZWxaaWNodGJhYXJoZWlkLlpJQ0hUQkFBUikgOiByZDtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJldmF0R2V2aXN1YWxpc2VlcmRlUHBsZyh2aXNpYmxlRHRvczogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdLCBwcGxnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBkdG8gb2YgdmlzaWJsZUR0b3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZHRvcHBsZyBvZiBkdG8ucHBsZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHRvcHBsZyA9PT0gcHBsZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFha09uemljaHRiYWFyKHJkKTogUml0ZGVlbCB7XG4gICAgICAgIHJldHVybiByZC5pc1ppY2h0YmFhcigpIHx8IHJkLmlzT256aWNodGJhYXJEb29yR2VicnVpa2VyKCkgP1xuICAgICAgICAgICAgcmQuY29weU1ldFppY2h0YmFhcmhlaWRFblBhZ2luYXRpZShSaXRkZWVsWmljaHRiYWFyaGVpZC5PTlpJQ0hUQkFBUl9ET09SX1NZU1RFRU0sIGZhbHNlKSA6XG4gICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEJ1aXRlblBhZ2luYXRpZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxaaWNodGJhYXJoZWlkUmVjaHRzKGlkeDogbnVtYmVyLCBpdGVtczogUml0ZGVlbFtdLCBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyLCBkdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHBsZ3NXaW5kb3cgPSBbXTtcbiAgICAgICAgY29uc3QgZHRvc1dpbmRvdyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZCA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGkgPj0gaWR4ICYmIHRoaXMudmFsdEJpbm5lblBhZ2luYXRpZVdpbmRvdyhwcGxnc1dpbmRvdywgcGFnaW5hdGlvblNpemUsIGR0b3NXaW5kb3cpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRaaWNodGJhYXIocmQsIHBwbGdzV2luZG93LCBkdG9zLCBkdG9zV2luZG93LCBpdGVtcywgaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gcmQuaXNaaWNodGJhYXIoKSB8fCByZC5pc09uemljaHRiYWFyRG9vckdlYnJ1aWtlcigpID9cbiAgICAgICAgICAgICAgICAgICAgcmQuY29weU1ldFppY2h0YmFhcmhlaWRFblBhZ2luYXRpZShSaXRkZWVsWmljaHRiYWFyaGVpZC5PTlpJQ0hUQkFBUl9ET09SX1NZU1RFRU0sIGZhbHNlKSA6XG4gICAgICAgICAgICAgICAgICAgIHJkLmNvcHlNZXRaaWNodGJhYXJoZWlkQnVpdGVuUGFnaW5hdGllKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsWmljaHRiYWFyaGVpZExpbmtzKGlkeDogbnVtYmVyLCBpdGVtczogUml0ZGVlbFtdLCBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyLCBkdG9zOiBJU2lnbmFsZXJpbmdzYmVlbGRJbmZvRHRvW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHBsZ3NXaW5kb3cgPSBbXTtcbiAgICAgICAgY29uc3QgZHRvc1dpbmRvdyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJkID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoaSA8PSBpZHggJiYgdGhpcy52YWx0QmlubmVuUGFnaW5hdGllV2luZG93KHBwbGdzV2luZG93LCBwYWdpbmF0aW9uU2l6ZSwgZHRvc1dpbmRvdykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFppY2h0YmFhcihyZCwgcHBsZ3NXaW5kb3csIGR0b3MsIGR0b3NXaW5kb3csIGl0ZW1zLCBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbaV0gPSByZC5pc1ppY2h0YmFhcigpIHx8IHJkLmlzT256aWNodGJhYXJEb29yR2VicnVpa2VyKCkgP1xuICAgICAgICAgICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEVuUGFnaW5hdGllKFJpdGRlZWxaaWNodGJhYXJoZWlkLk9OWklDSFRCQUFSX0RPT1JfU1lTVEVFTSwgZmFsc2UpIDpcbiAgICAgICAgICAgICAgICAgICAgcmQuY29weU1ldFppY2h0YmFhcmhlaWRCdWl0ZW5QYWdpbmF0aWUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWx0QmlubmVuUGFnaW5hdGllV2luZG93KHBwbGdzV2luZG93LCBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyLCBkdG9zV2luZG93KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwcGxnc1dpbmRvdy5sZW5ndGggPCBwYWdpbmF0aW9uU2l6ZSB8fCBkdG9zV2luZG93Lmxlbmd0aCA8IHBhZ2luYXRpb25TaXplO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0WmljaHRiYWFyKHJkLCBwcGxnc1dpbmRvdywgZHRvczogSVNpZ25hbGVyaW5nc2JlZWxkSW5mb0R0b1tdLCBkdG9zV2luZG93LCBpdGVtczogUml0ZGVlbFtdLCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbVBwbGcgPSByZC5nZXRQcGxnKCk7XG4gICAgICAgIGlmICghcHBsZ3NXaW5kb3cuaW5jbHVkZXMoaXRlbVBwbGcpKSB7XG4gICAgICAgICAgICBwcGxnc1dpbmRvdy5wdXNoKGl0ZW1QcGxnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBwbGdEdG9zID0gW107XG4gICAgICAgIGR0b3MuZmlsdGVyKGR0byA9PiBkdG8ucHBsZ3MuaW5jbHVkZXMoaXRlbVBwbGcpKS5mb3JFYWNoKGR0byA9PiB7XG4gICAgICAgICAgICBpZiAoIXBwbGdEdG9zLmluY2x1ZGVzKGR0bykpIHtcbiAgICAgICAgICAgICAgICBwcGxnRHRvcy5wdXNoKGR0byk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBwbGdEdG9zLmZpbHRlcihkID0+ICFkdG9zV2luZG93LmluY2x1ZGVzKGQpKS5mb3JFYWNoKGQgPT4gZHRvc1dpbmRvdy5wdXNoKGQpKTtcblxuICAgICAgICBpdGVtc1tpXSA9ICFyZC5pc1ppY2h0YmFhcigpID8gcmQuY29weU1ldFppY2h0YmFhcmhlaWRFblBhZ2luYXRpZShSaXRkZWVsWmljaHRiYWFyaGVpZC5aSUNIVEJBQVIsIGZhbHNlKSA6XG4gICAgICAgICAgICByZC5jb3B5TWV0WmljaHRiYWFyaGVpZEJ1aXRlblBhZ2luYXRpZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxTdGFydEluZGV4KHJpdERlbGVuOiBSaXRkZWVsW10pOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpdERlbGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocml0RGVsZW5baV0uaXNCaW5uZW5XaW5kb3coKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEVuZEluZGV4KHJpdERlbGVuOiBSaXRkZWVsW10pOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gcml0RGVsZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChyaXREZWxlbltpXS5pc0Jpbm5lbldpbmRvdygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { createEffect, ofType } from '@ngrx/effects';
3
+ import { from } from 'rxjs';
4
+ import { map, switchMap, withLatestFrom } from 'rxjs/operators';
5
+ import { KeurAlleActiesGoed, UpdateRit } from '../actions/actions';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ngrx/effects";
8
+ import * as i2 from "@ngrx/store";
9
+ import * as i3 from "../../services/beweging-verrijker.service";
10
+ export class RitGoedkeurenEffect {
11
+ constructor(actions$, store, bewegingVerrijker) {
12
+ this.actions$ = actions$;
13
+ this.store = store;
14
+ this.bewegingVerrijker = bewegingVerrijker;
15
+ this.keurAllesGoed$ = createEffect(() => this.actions$.pipe(ofType(KeurAlleActiesGoed), withLatestFrom(this.store), switchMap(([action, _store]) => from(this.bewegingVerrijker.getBewegingen(action.bewegingen, action.ongeplandeActies))), map((bewegingen) => UpdateRit(bewegingen))));
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitGoedkeurenEffect, deps: [{ token: i1.Actions }, { token: i2.Store }, { token: i3.BewegingVerrijkerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
18
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitGoedkeurenEffect }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RitGoedkeurenEffect, decorators: [{
21
+ type: Injectable
22
+ }], ctorParameters: () => [{ type: i1.Actions }, { type: i2.Store }, { type: i3.BewegingVerrijkerService }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicml0LWdvZWRrZXVyZW4uZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3N0YXRlL2VmZmVjdC9yaXQtZ29lZGtldXJlbi5lZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFJbkUsTUFBTSxPQUFPLG1CQUFtQjtJQUU1QixZQUFvQixRQUFpQixFQUNqQixLQUE0QixFQUM1QixpQkFBMkM7UUFGM0MsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBRy9ELG1CQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNsRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDMUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3pGLEVBQ0QsR0FBRyxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQ3pELENBQUMsQ0FBQztJQVRILENBQUM7OEdBTFEsbUJBQW1CO2tIQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZXdlZ2luZyB9IGZyb20gJy4uLy4uL29wdGltbyc7XG5pbXBvcnQgeyBCZXdlZ2luZ1ZlcnJpamtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iZXdlZ2luZy12ZXJyaWprZXIuc2VydmljZSc7XG5pbXBvcnQgeyBLZXVyQWxsZUFjdGllc0dvZWQsIFVwZGF0ZVJpdCB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9ucyc7XG5pbXBvcnQgeyBNc3RFZGl0b3JTdGF0ZSB9IGZyb20gJy4uL21zdC1lZGl0b3Itc3RhdGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUml0R29lZGtldXJlbkVmZmVjdCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPE1zdEVkaXRvclN0YXRlPixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJld2VnaW5nVmVycmlqa2VyOiBCZXdlZ2luZ1ZlcnJpamtlclNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBrZXVyQWxsZXNHb2VkJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShLZXVyQWxsZUFjdGllc0dvZWQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlKSxcbiAgICAgICAgc3dpdGNoTWFwKChbYWN0aW9uLCBfc3RvcmVdKSA9PlxuICAgICAgICAgICAgZnJvbSh0aGlzLmJld2VnaW5nVmVycmlqa2VyLmdldEJld2VnaW5nZW4oYWN0aW9uLmJld2VnaW5nZW4sIGFjdGlvbi5vbmdlcGxhbmRlQWN0aWVzKSksXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoYmV3ZWdpbmdlbjogQmV3ZWdpbmdbXSkgPT4gVXBkYXRlUml0KGJld2VnaW5nZW4pKVxuICAgICkpO1xufVxuIl19