@loxia/mst-viewer 8.1.3-202512221725 → 8.1.3-202512242157

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