footprintjs 9.48.2 → 10.0.0

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 (326) hide show
  1. package/AGENTS.md +12 -10
  2. package/CLAUDE.md +21 -23
  3. package/README.md +1 -1
  4. package/dist/advanced.js +71 -128
  5. package/dist/esm/advanced.d.ts +24 -58
  6. package/dist/esm/advanced.js +13 -51
  7. package/dist/esm/index.d.ts +5 -8
  8. package/dist/esm/index.js +3 -3
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/capture/index.d.ts +0 -1
  14. package/dist/esm/lib/capture/index.js +1 -2
  15. package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
  16. package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  17. package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
  18. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
  20. package/dist/esm/lib/engine/index.d.ts +1 -1
  21. package/dist/esm/lib/engine/index.js +1 -1
  22. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  24. package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
  25. package/dist/esm/lib/engine/narrative/index.js +1 -1
  26. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  27. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  29. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
  30. package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
  31. package/dist/esm/lib/engine/traversalContext.js +2 -2
  32. package/dist/esm/lib/engine/types.d.ts +2 -10
  33. package/dist/esm/lib/engine/types.js +1 -1
  34. package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
  35. package/dist/esm/lib/ids/reservedIds.js +2 -2
  36. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  37. package/dist/esm/lib/memory/StageContext.d.ts +2 -4
  38. package/dist/esm/lib/memory/StageContext.js +2 -2
  39. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  40. package/dist/esm/lib/memory/index.d.ts +6 -21
  41. package/dist/esm/lib/memory/index.js +4 -22
  42. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  43. package/dist/esm/lib/memory/redaction.js +2 -2
  44. package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
  45. package/dist/esm/lib/memory/runPolicy.js +1 -1
  46. package/dist/esm/lib/reactive/createTypedScope.js +2 -2
  47. package/dist/esm/lib/reactive/writeTraps.js +2 -2
  48. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
  49. package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
  50. package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
  51. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  52. package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
  53. package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
  54. package/dist/esm/lib/recorder/qualityTrace.js +2 -2
  55. package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
  56. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
  57. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
  58. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  59. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  60. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  61. package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
  62. package/dist/esm/lib/runner/resume.js +2 -2
  63. package/dist/esm/lib/runner/snapshot.js +3 -2
  64. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  65. package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
  66. package/dist/esm/recorders.d.ts +2 -3
  67. package/dist/esm/recorders.js +1 -1
  68. package/dist/esm/trace.d.ts +11 -57
  69. package/dist/esm/trace.js +10 -68
  70. package/dist/index.js +3 -3
  71. package/dist/lib/builder/FlowChartBuilder.js +5 -5
  72. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  73. package/dist/lib/capture/index.js +2 -4
  74. package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
  75. package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
  77. package/dist/lib/engine/index.js +1 -1
  78. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  79. package/dist/lib/engine/narrative/index.js +1 -1
  80. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  81. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
  82. package/dist/lib/engine/traversalContext.js +4 -4
  83. package/dist/lib/engine/types.js +1 -1
  84. package/dist/lib/engine/walkSubflowSpec.js +3 -3
  85. package/dist/lib/ids/reservedIds.js +5 -5
  86. package/dist/lib/memory/DiagnosticCollector.js +3 -3
  87. package/dist/lib/memory/StageContext.js +3 -3
  88. package/dist/lib/memory/borrowedMutation.js +3 -3
  89. package/dist/lib/memory/index.js +7 -42
  90. package/dist/lib/memory/redaction.js +3 -3
  91. package/dist/lib/memory/runPolicy.js +1 -1
  92. package/dist/lib/reactive/createTypedScope.js +3 -3
  93. package/dist/lib/reactive/writeTraps.js +4 -4
  94. package/dist/lib/recorder/ControlDepRecorder.js +3 -2
  95. package/dist/lib/recorder/EmitRecorder.js +1 -1
  96. package/dist/lib/recorder/InOutRecorder.js +3 -3
  97. package/dist/lib/recorder/qualityTrace.js +4 -4
  98. package/dist/lib/runner/DeferredObserverTier.js +3 -3
  99. package/dist/lib/runner/ExecutionRuntime.js +6 -9
  100. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  101. package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
  102. package/dist/lib/runner/resume.js +3 -3
  103. package/dist/lib/runner/snapshot.js +6 -5
  104. package/dist/lib/scope/ScopeFacade.js +3 -3
  105. package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
  106. package/dist/recorders.js +1 -1
  107. package/dist/trace.js +18 -120
  108. package/dist/types/advanced.d.ts +24 -58
  109. package/dist/types/index.d.ts +5 -8
  110. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
  111. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
  112. package/dist/types/lib/capture/index.d.ts +0 -1
  113. package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  114. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  115. package/dist/types/lib/engine/index.d.ts +1 -1
  116. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  117. package/dist/types/lib/engine/narrative/index.d.ts +1 -1
  118. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  119. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  120. package/dist/types/lib/engine/traversalContext.d.ts +1 -1
  121. package/dist/types/lib/engine/types.d.ts +2 -10
  122. package/dist/types/lib/memory/StageContext.d.ts +2 -4
  123. package/dist/types/lib/memory/index.d.ts +6 -21
  124. package/dist/types/lib/memory/redaction.d.ts +1 -1
  125. package/dist/types/lib/memory/runPolicy.d.ts +3 -2
  126. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
  127. package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
  128. package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
  129. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
  130. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  131. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  132. package/dist/types/recorders.d.ts +2 -3
  133. package/dist/types/trace.d.ts +11 -57
  134. package/package.json +6 -15
  135. package/dist/esm/lib/capture/freeze.d.ts +0 -91
  136. package/dist/esm/lib/capture/freeze.js +0 -314
  137. package/dist/esm/lib/capture/ownData.d.ts +0 -7
  138. package/dist/esm/lib/capture/ownData.js +0 -15
  139. package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
  140. package/dist/esm/lib/capture/valueKinds.js +0 -142
  141. package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
  142. package/dist/esm/lib/ids/runtimeStageId.js +0 -194
  143. package/dist/esm/lib/memory/EventLog.d.ts +0 -105
  144. package/dist/esm/lib/memory/EventLog.js +0 -148
  145. package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
  146. package/dist/esm/lib/memory/RecordFrame.js +0 -296
  147. package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
  148. package/dist/esm/lib/memory/SharedMemory.js +0 -88
  149. package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
  150. package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
  151. package/dist/esm/lib/memory/admission.d.ts +0 -81
  152. package/dist/esm/lib/memory/admission.js +0 -153
  153. package/dist/esm/lib/memory/backtrack.d.ts +0 -286
  154. package/dist/esm/lib/memory/backtrack.js +0 -457
  155. package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
  156. package/dist/esm/lib/memory/commitLogUtils.js +0 -384
  157. package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
  158. package/dist/esm/lib/memory/deltaEncoding.js +0 -122
  159. package/dist/esm/lib/memory/equality.d.ts +0 -93
  160. package/dist/esm/lib/memory/equality.js +0 -262
  161. package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
  162. package/dist/esm/lib/memory/eventPosition.js +0 -2
  163. package/dist/esm/lib/memory/honesty.d.ts +0 -93
  164. package/dist/esm/lib/memory/honesty.js +0 -92
  165. package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
  166. package/dist/esm/lib/memory/keyPaths.js +0 -227
  167. package/dist/esm/lib/memory/logModel.d.ts +0 -76
  168. package/dist/esm/lib/memory/logModel.js +0 -364
  169. package/dist/esm/lib/memory/merge.d.ts +0 -26
  170. package/dist/esm/lib/memory/merge.js +0 -60
  171. package/dist/esm/lib/memory/pathOps.d.ts +0 -115
  172. package/dist/esm/lib/memory/pathOps.js +0 -290
  173. package/dist/esm/lib/memory/paths.d.ts +0 -52
  174. package/dist/esm/lib/memory/paths.js +0 -57
  175. package/dist/esm/lib/memory/placeholders.d.ts +0 -39
  176. package/dist/esm/lib/memory/placeholders.js +0 -40
  177. package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
  178. package/dist/esm/lib/memory/recordCommit.js +0 -61
  179. package/dist/esm/lib/memory/scrub.d.ts +0 -53
  180. package/dist/esm/lib/memory/scrub.js +0 -74
  181. package/dist/esm/lib/memory/types.d.ts +0 -209
  182. package/dist/esm/lib/memory/types.js +0 -10
  183. package/dist/esm/lib/memory/utils.d.ts +0 -73
  184. package/dist/esm/lib/memory/utils.js +0 -159
  185. package/dist/esm/lib/memory/verbs.d.ts +0 -333
  186. package/dist/esm/lib/memory/verbs.js +0 -427
  187. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
  188. package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
  189. package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
  190. package/dist/esm/lib/scope/detectCircular.js +0 -14
  191. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
  192. package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
  193. package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
  194. package/dist/esm/lib/slice/elementProvenance.js +0 -190
  195. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
  196. package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
  197. package/dist/esm/lib/slice/index.d.ts +0 -25
  198. package/dist/esm/lib/slice/index.js +0 -25
  199. package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
  200. package/dist/esm/lib/slice/keyIndex.js +0 -293
  201. package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
  202. package/dist/esm/lib/slice/keyTimeline.js +0 -113
  203. package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
  204. package/dist/esm/lib/slice/keysReadSources.js +0 -95
  205. package/dist/esm/lib/slice/serialize.d.ts +0 -78
  206. package/dist/esm/lib/slice/serialize.js +0 -278
  207. package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
  208. package/dist/esm/lib/slice/sliceForKey.js +0 -88
  209. package/dist/esm/lib/slice/types.d.ts +0 -567
  210. package/dist/esm/lib/slice/types.js +0 -25
  211. package/dist/esm/lib/time-travel/axis.d.ts +0 -119
  212. package/dist/esm/lib/time-travel/axis.js +0 -179
  213. package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
  214. package/dist/esm/lib/time-travel/bundles.js +0 -136
  215. package/dist/esm/lib/time-travel/chain.d.ts +0 -93
  216. package/dist/esm/lib/time-travel/chain.js +0 -188
  217. package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
  218. package/dist/esm/lib/time-travel/commitStops.js +0 -202
  219. package/dist/esm/lib/time-travel/index.d.ts +0 -22
  220. package/dist/esm/lib/time-travel/index.js +0 -21
  221. package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
  222. package/dist/esm/lib/time-travel/stateAt.js +0 -153
  223. package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
  224. package/dist/esm/lib/time-travel/tagStops.js +0 -102
  225. package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
  226. package/dist/esm/lib/time-travel/timeTravel.js +0 -360
  227. package/dist/esm/lib/time-travel/types.d.ts +0 -470
  228. package/dist/esm/lib/time-travel/types.js +0 -23
  229. package/dist/esm/write.d.ts +0 -47
  230. package/dist/esm/write.js +0 -46
  231. package/dist/lib/capture/freeze.js +0 -320
  232. package/dist/lib/capture/ownData.js +0 -19
  233. package/dist/lib/capture/valueKinds.js +0 -146
  234. package/dist/lib/ids/runtimeStageId.js +0 -210
  235. package/dist/lib/memory/EventLog.js +0 -152
  236. package/dist/lib/memory/RecordFrame.js +0 -300
  237. package/dist/lib/memory/SharedMemory.js +0 -92
  238. package/dist/lib/memory/TransactionBuffer.js +0 -950
  239. package/dist/lib/memory/admission.js +0 -159
  240. package/dist/lib/memory/backtrack.js +0 -463
  241. package/dist/lib/memory/commitLogUtils.js +0 -399
  242. package/dist/lib/memory/deltaEncoding.js +0 -128
  243. package/dist/lib/memory/equality.js +0 -266
  244. package/dist/lib/memory/eventPosition.js +0 -3
  245. package/dist/lib/memory/honesty.js +0 -95
  246. package/dist/lib/memory/keyPaths.js +0 -243
  247. package/dist/lib/memory/logModel.js +0 -372
  248. package/dist/lib/memory/merge.js +0 -64
  249. package/dist/lib/memory/pathOps.js +0 -306
  250. package/dist/lib/memory/paths.js +0 -62
  251. package/dist/lib/memory/placeholders.js +0 -43
  252. package/dist/lib/memory/recordCommit.js +0 -65
  253. package/dist/lib/memory/scrub.js +0 -79
  254. package/dist/lib/memory/types.js +0 -11
  255. package/dist/lib/memory/utils.js +0 -178
  256. package/dist/lib/memory/verbs.js +0 -444
  257. package/dist/lib/recorder/CommitRangeIndex.js +0 -211
  258. package/dist/lib/scope/detectCircular.js +0 -21
  259. package/dist/lib/scope/recorders/summarizeValue.js +0 -10
  260. package/dist/lib/slice/elementProvenance.js +0 -195
  261. package/dist/lib/slice/forwardSliceForKey.js +0 -247
  262. package/dist/lib/slice/index.js +0 -42
  263. package/dist/lib/slice/keyIndex.js +0 -313
  264. package/dist/lib/slice/keyTimeline.js +0 -117
  265. package/dist/lib/slice/keysReadSources.js +0 -101
  266. package/dist/lib/slice/serialize.js +0 -286
  267. package/dist/lib/slice/sliceForKey.js +0 -93
  268. package/dist/lib/slice/types.js +0 -26
  269. package/dist/lib/time-travel/axis.js +0 -184
  270. package/dist/lib/time-travel/bundles.js +0 -144
  271. package/dist/lib/time-travel/chain.js +0 -193
  272. package/dist/lib/time-travel/commitStops.js +0 -206
  273. package/dist/lib/time-travel/index.js +0 -32
  274. package/dist/lib/time-travel/stateAt.js +0 -160
  275. package/dist/lib/time-travel/tagStops.js +0 -106
  276. package/dist/lib/time-travel/timeTravel.js +0 -364
  277. package/dist/lib/time-travel/types.js +0 -24
  278. package/dist/types/lib/capture/freeze.d.ts +0 -91
  279. package/dist/types/lib/capture/ownData.d.ts +0 -7
  280. package/dist/types/lib/capture/valueKinds.d.ts +0 -57
  281. package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
  282. package/dist/types/lib/memory/EventLog.d.ts +0 -105
  283. package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
  284. package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
  285. package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
  286. package/dist/types/lib/memory/admission.d.ts +0 -81
  287. package/dist/types/lib/memory/backtrack.d.ts +0 -286
  288. package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
  289. package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
  290. package/dist/types/lib/memory/equality.d.ts +0 -93
  291. package/dist/types/lib/memory/eventPosition.d.ts +0 -18
  292. package/dist/types/lib/memory/honesty.d.ts +0 -93
  293. package/dist/types/lib/memory/keyPaths.d.ts +0 -125
  294. package/dist/types/lib/memory/logModel.d.ts +0 -76
  295. package/dist/types/lib/memory/merge.d.ts +0 -26
  296. package/dist/types/lib/memory/pathOps.d.ts +0 -115
  297. package/dist/types/lib/memory/paths.d.ts +0 -52
  298. package/dist/types/lib/memory/placeholders.d.ts +0 -39
  299. package/dist/types/lib/memory/recordCommit.d.ts +0 -45
  300. package/dist/types/lib/memory/scrub.d.ts +0 -53
  301. package/dist/types/lib/memory/types.d.ts +0 -209
  302. package/dist/types/lib/memory/utils.d.ts +0 -73
  303. package/dist/types/lib/memory/verbs.d.ts +0 -333
  304. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
  305. package/dist/types/lib/scope/detectCircular.d.ts +0 -13
  306. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
  307. package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
  308. package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
  309. package/dist/types/lib/slice/index.d.ts +0 -25
  310. package/dist/types/lib/slice/keyIndex.d.ts +0 -137
  311. package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
  312. package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
  313. package/dist/types/lib/slice/serialize.d.ts +0 -78
  314. package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
  315. package/dist/types/lib/slice/types.d.ts +0 -567
  316. package/dist/types/lib/time-travel/axis.d.ts +0 -119
  317. package/dist/types/lib/time-travel/bundles.d.ts +0 -77
  318. package/dist/types/lib/time-travel/chain.d.ts +0 -93
  319. package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
  320. package/dist/types/lib/time-travel/index.d.ts +0 -22
  321. package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
  322. package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
  323. package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
  324. package/dist/types/lib/time-travel/types.d.ts +0 -470
  325. package/dist/types/write.d.ts +0 -47
  326. package/dist/write.js +0 -52
@@ -771,4 +771,4 @@ class CombinedNarrativeRecorder {
771
771
  }
772
772
  }
773
773
  exports.CombinedNarrativeRecorder = CombinedNarrativeRecorder;
774
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUVILDZEQUE0RDtBQUU1RCw0RUFBaUU7QUFFakUsc0VBQWdFO0FBRWhFLGdFQUEwRDtBQUMxRCw0REFXbUM7QUFnRW5DLG1GQUFtRjtBQUVuRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEseUJBQXlCO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLEVBQUUsQ0FBUztJQUNwQiw2RUFBNkU7SUFDNUQsS0FBSyxHQUFHLElBQUksZ0NBQWEsRUFBMEIsQ0FBQztJQUVyRTs7Ozs7T0FLRztJQUNLLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNyRCxzREFBc0Q7SUFDOUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ2xELDJGQUEyRjtJQUNuRixZQUFZLENBQXFCO0lBQ3pDLHlEQUF5RDtJQUNqRCxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFDckQsNEVBQTRFO0lBQ3BFLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTdDLGtCQUFrQixDQUFVO0lBQzVCLGFBQWEsQ0FBVTtJQUN2QixjQUFjLENBQVM7SUFDdkIsV0FBVyxDQUE2QztJQUN4RCxRQUFRLENBQXFCO0lBRXJDLFlBQVksT0FBNEQ7UUFDdEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO1FBQzlE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O1FBQzVDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxXQUFXLENBQUM7SUFDN0csQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQXNCO1FBQzlDLE9BQU8sSUFBQSwyQkFBWSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUF1QjtRQUNoRCxPQUFPLElBQUEsNEJBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBdUI7UUFDaEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLG9CQUFvQixHQUFHLENBQUMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxXQUFXLE9BQU8sR0FBRyxDQUFDLFNBQVMsWUFBWSxHQUFHLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3JILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUF1QjtRQUNoRCxJQUFJLElBQUksR0FBRyxJQUFBLDRCQUFhLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCO1lBQUUsSUFBSSxJQUFJLElBQUEsaUNBQWtCLEVBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7O0FBenhCSCw4REEweEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIOKAlCBJbmxpbmUgbmFycmF0aXZlIGJ1aWxkZXIgdGhhdCBtZXJnZXMgZmxvdyArIGRhdGEgZHVyaW5nIHRyYXZlcnNhbC5cbiAqXG4gKiBDb21wb3NlcyBhIFNlcXVlbmNlU3RvcmU8Q29tYmluZWROYXJyYXRpdmVFbnRyeT4gZm9yIGR1YWwtaW5kZXhlZCBzdG9yYWdlIChvcmRlcmVkIHNlcXVlbmNlXG4gKiArIE8oMSkgcGVyLXN0ZXAgbG9va3VwIGJ5IHJ1bnRpbWVTdGFnZUlkKSDigJQgQ29udmVudGlvbiAxLCBvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXIuXG4gKiBJbXBsZW1lbnRzIGBDb21iaW5lZFJlY29yZGVyYCDigJQgdGhlIGxpYnJhcnkncyBmaXJzdC1jbGFzcyBhYnN0cmFjdGlvbiBmb3Igb2JzZXJ2ZXJzIHRoYXQgc3BhblxuICogYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdyBzdHJlYW1zLlxuICpcbiAqIEV2ZW50IG9yZGVyaW5nIGd1YXJhbnRlZXMgdGhpcyB3b3JrczpcbiAqICAgMS4gU2NvcGUgZXZlbnRzIChvblJlYWQsIG9uV3JpdGUpIGZpcmUgRFVSSU5HIHN0YWdlIGV4ZWN1dGlvblxuICogICAyLiBGbG93IGV2ZW50cyAob25TdGFnZUV4ZWN1dGVkLCBvbkRlY2lzaW9uKSBmaXJlIEFGVEVSIHN0YWdlIGV4ZWN1dGlvblxuICogICAzLiBCb3RoIGNhcnJ5IHRoZSBzYW1lIGBzdGFnZU5hbWVgIOKAlCBubyBtYXRjaGluZyBhbWJpZ3VpdHlcbiAqXG4gKiBTbyB3ZSBidWZmZXIgc2NvcGUgb3BzIHBlci1zdGFnZSwgdGhlbiB3aGVuIHRoZSBmbG93IGV2ZW50IGFycml2ZXMsXG4gKiBlbWl0IHRoZSBzdGFnZSBlbnRyeSArIGZsdXNoIHRoZSBidWZmZXJlZCBvcHMgaW4gb25lIHBhc3MuXG4gKi9cblxuaW1wb3J0IHsgc3VtbWFyaXplVmFsdWUgfSBmcm9tICcuLi8uLi9jYXB0dXJlL3N1bW1hcml6ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuLi8uLi9yZWNvcmRlci9Db21iaW5lZFJlY29yZGVyLmpzJztcbmltcG9ydCB7IGlzRmxvd0V2ZW50IH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRFdmVudCB9IGZyb20gJy4uLy4uL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBTZXF1ZW5jZVN0b3JlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvU2VxdWVuY2VTdG9yZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFBhdXNlRXZlbnQsIFJlYWRFdmVudCwgUmVzdW1lRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi8uLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlVGV4dCB9IGZyb20gJy4vZm9ybWF0dGluZy9yZXNvbHZlVGV4dC5qcyc7XG5pbXBvcnQge1xuICBicmVha1NlbnRlbmNlLFxuICBkZWNpc2lvblNlbnRlbmNlLFxuICBlcnJvclNlbnRlbmNlLFxuICBmb3JrU2VudGVuY2UsXG4gIGxvb3BTZW50ZW5jZSxcbiAgbmV4dFN0YWdlU2VudGVuY2UsXG4gIHBhdXNlU2VudGVuY2UsXG4gIHJlc3VtZVNlbnRlbmNlLFxuICB2YWxpZGF0aW9uRGV0YWlscyxcbiAgdmFsaWRhdGlvblNlbnRlbmNlLFxufSBmcm9tICcuL2Zvcm1hdHRpbmcvc2VudGVuY2VzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRSZW5kZXJDb250ZXh0LFxuICBFcnJvclJlbmRlckNvbnRleHQsXG4gIEZvcmtSZW5kZXJDb250ZXh0LFxuICBMb29wUmVuZGVyQ29udGV4dCxcbiAgTmFycmF0aXZlUmVuZGVyZXIsXG4gIE9wUmVuZGVyQ29udGV4dCxcbiAgUmV0cnlSZW5kZXJDb250ZXh0LFxuICBTZWxlY3RlZFJlbmRlckNvbnRleHQsXG4gIFN0YWdlUmVuZGVyQ29udGV4dCxcbiAgU3ViZmxvd1JlbmRlckNvbnRleHQsXG59IGZyb20gJy4vbmFycmF0aXZlVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93UGF1c2VFdmVudCxcbiAgRmxvd1Jlc3VtZUV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmludGVyZmFjZSBCdWZmZXJlZE9wIHtcbiAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdlbWl0JyB8ICdyZXRyeSc7XG4gIC8qKiBGb3IgcmVhZC93cml0ZTogc2NvcGUga2V5LiBGb3IgZW1pdDogdGhlIGV2ZW50IG5hbWUuIEZvciByZXRyeTogdGhlIHN0YWdlIG5hbWUuICovXG4gIGtleTogc3RyaW5nO1xuICByYXdWYWx1ZTogdW5rbm93bjtcbiAgb3BlcmF0aW9uPzogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnO1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG4gIC8qKiBPbmx5IHNldCBmb3IgdHlwZT0nZW1pdCcg4oCUIGNhcnJpZXMgdGhlIGZ1bGwgRW1pdEV2ZW50IGZvciByZW5kZXJpbmcuICovXG4gIGVtaXRFdmVudD86IEVtaXRFdmVudDtcbiAgLyoqXG4gICAqIE9ubHkgc2V0IGZvciB0eXBlPSdyZXRyeScg4oCUIHRoZSByZXRyeSBmYWN0cywgYnVmZmVyZWQgcmF0aGVyIHRoYW4gcHVzaGVkXG4gICAqIHN0cmFpZ2h0IHRvIHRoZSBzdG9yZSBzbyB0aGUgbGluZSBsYW5kcyBJTiBPUkRFUiBiZXR3ZWVuIHRoZSBmYWlsZWRcbiAgICogYXR0ZW1wdCdzIG9wcyBhbmQgdGhlIG5leHQgYXR0ZW1wdCdzIG9wcy4gKFJldHJ5IGV2ZW50cyBhcnJpdmUgb24gdGhlIGZsb3dcbiAgICogY2hhbm5lbCBEVVJJTkcgdGhlIHN0YWdlLCB1bmxpa2UgZXZlcnkgb3RoZXIgZmxvdyBldmVudCwgd2hpY2ggYXJyaXZlc1xuICAgKiBhZnRlciBpdCDigJQgcHVzaGluZyBkaXJlY3RseSB3b3VsZCBwbGFjZSB0aGUgbGluZSBiZWZvcmUgaXRzIG93biBzdGFnZVxuICAgKiBoZWFkZXIuKVxuICAgKi9cbiAgcmV0cnk/OiBSZXRyeVJlbmRlckNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgbWF4VmFsdWVMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBDdXN0b20gdmFsdWUgZm9ybWF0dGVyLiBDYWxsZWQgYXQgcmVuZGVyIHRpbWUgKGZsdXNoT3BzKSwgbm90IGNhcHR1cmUgdGltZS5cbiAgICogIFJlY2VpdmVzIHRoZSByYXcgdmFsdWUgYW5kIG1heFZhbHVlTGVuZ3RoLiBEZWZhdWx0cyB0byBzdW1tYXJpemVWYWx1ZSgpLiAqL1xuICBmb3JtYXRWYWx1ZT86ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpID0+IHN0cmluZztcbiAgLyoqIFBsdWdnYWJsZSByZW5kZXJlciBmb3IgY3VzdG9taXppbmcgbmFycmF0aXZlIG91dHB1dC4gVW5pbXBsZW1lbnRlZCBtZXRob2RzXG4gICAqICBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgRW5nbGlzaCByZW5kZXJlci4gU2VlIE5hcnJhdGl2ZVJlbmRlcmVyIGRvY3MuICovXG4gIHJlbmRlcmVyPzogTmFycmF0aXZlUmVuZGVyZXI7XG59XG5cbi8vIOKUgOKUgCBTY29wZVJlY29yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEltcGxlbWVudHMgYENvbWJpbmVkUmVjb3JkZXJgIOKAlCB0aGUgbGlicmFyeSdzIGZpcnN0LWNsYXNzIGFic3RyYWN0aW9uIGZvclxuICogb2JzZXJ2ZXJzIHRoYXQgc3BhbiBib3RoIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgKSBhbmQgY29udHJvbC1mbG93XG4gKiAoYEZsb3dSZWNvcmRlcmApIHN0cmVhbXMuIE9uZSBgaWRgLCByb3V0ZWQgdG8gYm90aCBjaGFubmVscyB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKC4uLilgIChvciBlcXVpdmFsZW50bHkgdmlhXG4gKiBgZXhlY3V0b3IuZW5hYmxlTmFycmF0aXZlKC4uLilgIHdoaWNoIGF1dG8tY3JlYXRlcyBhbiBpbnN0YW5jZSkuXG4gKlxuICogRm9yIHNoYXJlZC1tZXRob2QtbmFtZSBldmVudHMgKGBvbkVycm9yYCwgYG9uUGF1c2VgLCBgb25SZXN1bWVgKSB0aGVcbiAqIGhhbmRsZXIgYWNjZXB0cyB0aGUgdW5pb24gcGF5bG9hZCB0eXBlOyB3ZSBkaXNjcmltaW5hdGUgdmlhIGBpc0Zsb3dFdmVudGAuXG4gKiBTY29wZSB2YXJpYW50cyBvZiB0aGVzZSBldmVudHMgYXJlIGRlbGliZXJhdGVseSBpZ25vcmVkIGhlcmUg4oCUIHRoZVxuICogbmFycmF0aXZlIG9ubHkgc3VyZmFjZXMgY29udHJvbC1mbG93IGxpZmVjeWNsZSBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGltcGxlbWVudHMgQ29tYmluZWRSZWNvcmRlciB7XG4gIHByaXZhdGUgc3RhdGljIF9jb3VudGVyID0gMDtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIER1YWwtaW5kZXhlZCBvcmRlcmVkIHN0b3JhZ2UgKENvbnZlbnRpb24gMSDigJQgY29tcG9zZWQsIG5vdCBpbmhlcml0ZWQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gbmV3IFNlcXVlbmNlU3RvcmU8Q29tYmluZWROYXJyYXRpdmVFbnRyeT4oKTtcblxuICAvKipcbiAgICogUGVuZGluZyBzY29wZSBvcHMga2V5ZWQgYnkgcnVudGltZVN0YWdlSWQuIEZsdXNoZWQgaW4gb25TdGFnZUV4ZWN1dGVkL29uRGVjaXNpb24uXG4gICAqXG4gICAqIEtleWluZyBieSBydW50aW1lU3RhZ2VJZCAobm90IHN0YWdlTmFtZSkgZW5zdXJlcyBjb3JyZWN0bmVzcyB3aGVuIHBhcmFsbGVsIGZvcmtcbiAgICogYnJhbmNoZXMgY29udGFpbiBzdGFnZXMgd2l0aCB0aGUgc2FtZSBuYW1lIOKAlCBlYWNoIGV4ZWN1dGlvbiBzdGVwIGhhcyBhIHVuaXF1ZSBJRC5cbiAgICovXG4gIHByaXZhdGUgcGVuZGluZ09wcyA9IG5ldyBNYXA8c3RyaW5nLCBCdWZmZXJlZE9wW10+KCk7XG4gIC8qKiBQZXItc3ViZmxvdyBzdGFnZSBjb3VudGVycy4gS2V5ICcnID0gcm9vdCBmbG93LiAqL1xuICBwcml2YXRlIHN0YWdlQ291bnRlcnMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAvKiogVGhlIHN0YWdlIGBvblJlc3VtZWAganVzdCBuYXJyYXRlZCDigJQgaXRzIGhlYWRlciBtdXN0IG5vdCBhbm5vdW5jZSB0aGUgYXJyaXZhbCBhZ2Fpbi4gKi9cbiAgcHJpdmF0ZSByZXN1bWVkU3RhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFBlci1zdWJmbG93IGZpcnN0LXN0YWdlIGZsYWdzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgZmlyc3RTdGFnZUZsYWdzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIC8qKiBWaXNpdCBjb3VudCBwZXIgc3RhZ2VJZCDigJQgZGV0ZWN0cyBsb29wIGl0ZXJhdGlvbnMgKGNvdW50ID4gMSA9IGxvb3ApLiAqL1xuICBwcml2YXRlIHN0YWdlVmlzaXRDb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHByaXZhdGUgaW5jbHVkZVN0ZXBOdW1iZXJzOiBib29sZWFuO1xuICBwcml2YXRlIGluY2x1ZGVWYWx1ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgbWF4VmFsdWVMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZTogKHZhbHVlOiB1bmtub3duLCBtYXhMZW46IG51bWJlcikgPT4gc3RyaW5nO1xuICBwcml2YXRlIHJlbmRlcmVyPzogTmFycmF0aXZlUmVuZGVyZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zICYgeyBpZD86IHN0cmluZyB9KSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/IGBjb21iaW5lZC1uYXJyYXRpdmUtJHsrK0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuX2NvdW50ZXJ9YDtcbiAgICB0aGlzLmluY2x1ZGVTdGVwTnVtYmVycyA9IG9wdGlvbnM/LmluY2x1ZGVTdGVwTnVtYmVycyA/PyB0cnVlO1xuICAgIHRoaXMuaW5jbHVkZVZhbHVlcyA9IG9wdGlvbnM/LmluY2x1ZGVWYWx1ZXMgPz8gdHJ1ZTtcbiAgICB0aGlzLm1heFZhbHVlTGVuZ3RoID0gb3B0aW9ucz8ubWF4VmFsdWVMZW5ndGggPz8gODA7XG4gICAgdGhpcy5mb3JtYXRWYWx1ZSA9IG9wdGlvbnM/LmZvcm1hdFZhbHVlID8/IHN1bW1hcml6ZVZhbHVlO1xuICAgIHRoaXMucmVuZGVyZXIgPSBvcHRpb25zPy5yZW5kZXJlcjtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTY29wZSBjaGFubmVsIChmaXJlcyBmaXJzdCwgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50LmtleSkgcmV0dXJuO1xuICAgIHRoaXMuYnVmZmVyT3AoZXZlbnQucnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHR5cGU6ICdyZWFkJyxcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgcmF3VmFsdWU6IGV2ZW50LnZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyT3AoZXZlbnQucnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHR5cGU6ICd3cml0ZScsXG4gICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgIHJhd1ZhbHVlOiBldmVudC52YWx1ZSxcbiAgICAgIG9wZXJhdGlvbjogZXZlbnQub3BlcmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3cgY2hhbm5lbCAoZmlyZXMgYWZ0ZXIgc3RhZ2UgZXhlY3V0aW9uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gTm9uLWxpbmVhciBraW5kcyBnZXQgdGhlaXIgbmFycmF0aXZlIGVudHJpZXMgKGFuZCBvcHMgZmx1c2gpXG4gICAgLy8gZnJvbSBgb25EZWNpc2lvbmAgLyBgb25Gb3JrYCAvIGBvblNlbGVjdGVkYCAvIGBvblN1YmZsb3dFbnRyeWAuXG4gICAgLy8gU2tpcCB0aGVtIGhlcmUgc28gZWFjaCBzdGFnZSBoYXMgZXhhY3RseSBvbmUgbmFycmF0aXZlIGVudHJ5LlxuICAgIGlmIChldmVudC5zdGFnZVR5cGUgIT09ICdsaW5lYXInKSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG5cbiAgICAvLyBUcmFjayB2aXNpdCBjb3VudCBwZXIgc3RhZ2VJZCB0byBkZXRlY3QgbG9vcCBpdGVyYXRpb25zXG4gICAgY29uc3QgdmlzaXRLZXkgPSBzdGFnZUlkID8/IGV2ZW50LnN0YWdlTmFtZTtcbiAgICBjb25zdCB2aXNpdENvdW50ID0gKHRoaXMuc3RhZ2VWaXNpdENvdW50cy5nZXQodmlzaXRLZXkpID8/IDApICsgMTtcbiAgICB0aGlzLnN0YWdlVmlzaXRDb3VudHMuc2V0KHZpc2l0S2V5LCB2aXNpdENvdW50KTtcblxuICAgIGNvbnN0IGN0eDogU3RhZ2VSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZU51bWJlcjogc3RhZ2VOdW0sXG4gICAgICBpc0ZpcnN0LFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgbG9vcEl0ZXJhdGlvbjogdmlzaXRDb3VudCA+IDEgPyB2aXNpdENvdW50IC0gMSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLih0aGlzLmNvbnN1bWVSZXN1bWVkKGV2ZW50LnN0YWdlTmFtZSkgJiYgeyByZXN1bWVkOiB0cnVlIH0pLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclN0YWdlPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTdGFnZShjdHgpO1xuXG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMocnVudGltZVN0YWdlSWQsIHNmSWQsIHN0YWdlSWQsIGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkO1xuICAgIGNvbnN0IHJ1bnRpbWVTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQ7XG5cbiAgICAvLyBFbWl0IHRoZSBkZWNpZGVyIHN0YWdlIGVudHJ5LlxuICAgIC8vIFByb3Bvc2FsICMwMDMgYWxzbyBmaXJlcyBgb25TdGFnZUV4ZWN1dGVkKHN0YWdlVHlwZTogJ2RlY2lkZXInKWBcbiAgICAvLyBBRlRFUiB0aGlzIGV2ZW50LCBidXQgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciBnYXRlcyB0aGF0XG4gICAgLy8gaGFuZGxlciB0byBMSU5FQVItb25seSBzbyB0aGlzIHN0YXlzIHRoZSBzaW5nbGUgZW1pc3Npb24gc2l0ZVxuICAgIC8vIGZvciB0aGUgZGVjaWRlcidzIHN0YWdlIGVudHJ5ICsgb3BzIGZsdXNoLiBLZWVwcyBuYXJyYXRpdmVcbiAgICAvLyBvdXRwdXQgYnl0ZS1zdGFibGUgYWNyb3NzIHRoZSB2NiB0cmFuc2l0aW9uLlxuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG5cbiAgICBjb25zdCBzdGFnZUN0eDogU3RhZ2VSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc3RhZ2VOYW1lOiBldmVudC5kZWNpZGVyLFxuICAgICAgc3RhZ2VOdW1iZXI6IHN0YWdlTnVtLFxuICAgICAgaXNGaXJzdCxcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICAgIC4uLih0aGlzLmNvbnN1bWVSZXN1bWVkKGV2ZW50LmRlY2lkZXIpICYmIHsgcmVzdW1lZDogdHJ1ZSB9KSxcbiAgICB9O1xuICAgIGNvbnN0IHN0YWdlVGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclN0YWdlPy4oc3RhZ2VDdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlclN0YWdlKHN0YWdlQ3R4KTtcblxuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgdGV4dDogc3RhZ2VUZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKHJ1bnRpbWVTdGFnZUlkLCBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsIHN0YWdlSWQsIGV2ZW50LmRlY2lkZXIpO1xuXG4gICAgLy8gRW1pdCB0aGUgY29uZGl0aW9uIGVudHJ5IGFzIGEgbmVzdGVkIHN1Yi1pdGVtIChkZXB0aCAxKSBvZiB0aGUgc3RhZ2UgYWJvdmUuXG4gICAgY29uc3QgZGVjaXNpb25DdHg6IERlY2lzaW9uUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIGRlY2lkZXI6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBjaG9zZW46IGV2ZW50LmNob3NlbixcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICAgIHJhdGlvbmFsZTogZXZlbnQucmF0aW9uYWxlLFxuICAgICAgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlLFxuICAgIH07XG4gICAgY29uc3QgY29uZGl0aW9uVGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckRlY2lzaW9uPy4oZGVjaXNpb25DdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckRlY2lzaW9uKGRlY2lzaW9uQ3R4KTtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ2NvbmRpdGlvbicsXG4gICAgICB0ZXh0OiBjb25kaXRpb25UZXh0LFxuICAgICAgZGVwdGg6IDEsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTmV4dCgpOiB2b2lkIHtcbiAgICAvLyBOby1vcC4gb25TdGFnZUV4ZWN1dGVkIGFscmVhZHkgaGFzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG5leHQgc3RhZ2UuXG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHg6IEZvcmtSZW5kZXJDb250ZXh0ID0geyBjaGlsZHJlbjogZXZlbnQuY2hpbGRyZW4gfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyRm9yaz8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyRm9yayhjdHgpO1xuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAnZm9yaycsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdGVkKGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eDogU2VsZWN0ZWRSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc2VsZWN0ZWQ6IGV2ZW50LnNlbGVjdGVkLFxuICAgICAgdG90YWw6IGV2ZW50LnRvdGFsLFxuICAgICAgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclNlbGVjdGVkPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTZWxlY3RlZChjdHgpO1xuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAnc2VsZWN0b3InLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZktleSA9IGV2ZW50LnN1YmZsb3dJZCA/PyAnJztcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuZGVsZXRlKHNmS2V5KTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5kZWxldGUoc2ZLZXkpO1xuXG4gICAgY29uc3QgY3R4OiBTdWJmbG93UmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIG5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBkaXJlY3Rpb246ICdlbnRyeScsXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICBtYXBwZWRJbnB1dDogZXZlbnQubWFwcGVkSW5wdXQsXG4gICAgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyU3ViZmxvdz8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU3ViZmxvdyhjdHgpO1xuICAgIGNvbnN0IHJpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHNpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ3N1YmZsb3cnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5uYW1lLFxuICAgICAgc3RhZ2VJZDogc2lkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHJpZCxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICAgIGRpcmVjdGlvbjogJ2VudHJ5JyxcbiAgICB9KTtcbiAgICAvLyBFbWl0IHBlci1rZXkgc3RlcCBlbnRyaWVzIGZvciBtYXBwZWQgaW5wdXRzLlxuICAgIC8vXG4gICAgLy8gUm91dGUgRUFDSCBrZXkgdGhyb3VnaCB0aGUgY29uc3VtZXIncyBgcmVuZGVyZXIucmVuZGVyT3BgIGhvb2sgYmVmb3JlXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBoYXJkY29kZWQgYElucHV0OiAke2tleX0gPSAke3ZhbHVlU3VtbWFyeX1gXG4gICAgLy8gdGVtcGxhdGUuIFdpdGhvdXQgdGhpcyByb3V0aW5nLCBhIGNvbnN1bWVyIHRoYXQgcHJvdmlkZWQgYVxuICAgIC8vIGRvbWFpbi1hd2FyZSBgcmVuZGVyZXIucmVuZGVyT3BgICh0byByZW5kZXIgZS5nLiBgcGFyc2VkUmVzcG9uc2VgXG4gICAgLy8gb2JqZWN0cyBzZW1hbnRpY2FsbHkpIHdvdWxkIHNlZSBiZWF1dGlmdWwgb3V0cHV0IGZvciBzY29wZSB3cml0ZXNcbiAgICAvLyBidXQgZ2V0IHRoZSBnZW5lcmljIGtleS1saXN0IGZhbGxiYWNrIGZvciBzdWJmbG93IGlucHV0cyDigJQgdGhlXG4gICAgLy8gbGlicmFyeSdzIFwiY29tYmluZWQgbmFycmF0aXZlXCIgcHJvbWlzZSAob25lIHJlbmRlcmVyIGNvbnRyb2xzIHRoZVxuICAgIC8vIHdob2xlIG5hcnJhdGl2ZSkgd291bGQgc2lsZW50bHkgYnJlYWsuIFdlIGhvbm91ciBpdCBoZXJlLlxuICAgIC8vXG4gICAgLy8gVGhlIE9wUmVuZGVyQ29udGV4dCBpcyBidWlsdCB3aXRoIGB0eXBlOiAnd3JpdGUnYCBiZWNhdXNlIHNlbWFudGljYWxseVxuICAgIC8vIHRoZSBzdWJmbG93J3MgaW5pdGlhbCBzY29wZSBJUyBiZWluZyB3cml0dGVuIHZpYSB0aGUgcGFyZW50J3NcbiAgICAvLyBpbnB1dE1hcHBlci4gYG9wZXJhdGlvbjogJ3NldCdgIGxpa2V3aXNlIOKAlCB0aGlzIGlzIHRoZSBzdWJmbG93J3NcbiAgICAvLyBmaXJzdCBzaWdodCBvZiB0aGUga2V5LlxuICAgIC8vXG4gICAgLy8gVmFsdWVzIHNob3duIHdoZW4gaW5jbHVkZVZhbHVlcz10cnVlLiBgZXZlbnQubWFwcGVkSW5wdXRgIGlzIGFscmVhZHlcbiAgICAvLyB0aGUgUkVUQUlORUQgZm9ybSBvZiB0aGUgc2VlZCDigJQgYFN1YmZsb3dFeGVjdXRvcmAgc2NydWJzIGl0IHVuZGVyIHRoZVxuICAgIC8vIHJ1bidzIHJlZGFjdGlvbiBydWxlIGJlZm9yZSByYWlzaW5nIHRoZSBldmVudCAoOS4xOS4wKSwgc28gYSByZWRhY3RlZFxuICAgIC8vIGtleSBhcnJpdmVzIGFzICdbUkVEQUNURURdJyBhbmQgYSBmaWVsZC1sZXZlbCBrZXkgYXMgYSBzY3J1YmJlZCBjbG9uZS5cbiAgICBpZiAoZXZlbnQubWFwcGVkSW5wdXQgJiYgT2JqZWN0LmtleXMoZXZlbnQubWFwcGVkSW5wdXQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBzdGVwTnVtYmVyID0gMDtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50Lm1hcHBlZElucHV0KSkge1xuICAgICAgICBjb25zdCB2YWx1ZVN1bW1hcnkgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlLCB0aGlzLm1heFZhbHVlTGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgb3BDdHg6IE9wUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICB0eXBlOiAnd3JpdGUnLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICByYXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWVTdW1tYXJ5LFxuICAgICAgICAgIG9wZXJhdGlvbjogJ3NldCcsXG4gICAgICAgICAgc3RlcE51bWJlcjogKytzdGVwTnVtYmVyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRleHQgPSByZXNvbHZlVGV4dCh0aGlzLnJlbmRlcmVyPy5yZW5kZXJPcD8uKG9wQ3R4KSwgKCkgPT5cbiAgICAgICAgICB0aGlzLmluY2x1ZGVWYWx1ZXMgPyBgSW5wdXQ6ICR7a2V5fSA9ICR7dmFsdWVTdW1tYXJ5fWAgOiBgSW5wdXQ6ICR7a2V5fWAsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0ZXh0ID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgIHN0YWdlTmFtZTogZXZlbnQubmFtZSxcbiAgICAgICAgICBzdGFnZUlkOiBzaWQsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQ6IHJpZCxcbiAgICAgICAgICBzdWJmbG93SWQ6IHNmSWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHJhd1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHNpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICAvLyBOT1RFOiBvdXRwdXQgc3RhdGUgaXMgTk9UIGVtaXR0ZWQgYXMgc3RlcCBlbnRyaWVzIOKAlCB0aGUgc3ViZmxvdydzIG93blxuICAgIC8vIHN0YWdlcyBhbHJlYWR5IG5hcnJhdGVkIGVhY2ggd3JpdGUsIHNvIHRoZSBleGl0IGhlYWRlciBpcyBzdWZmaWNpZW50O1xuICAgIC8vIGRyaWxsIGludG8gdGhlIHN1YmZsb3cgZm9yIGRldGFpbHMuIFNpbmNlIDkuMjAuMCBgb3V0cHV0U3RhdGVgIGlzIHRoZVxuICAgIC8vIHN1YmZsb3cncyBTRVJWRUQgc3RhdGUgKGl0cyByZWRhY3RlZCBtaXJyb3IgdW5kZXIgYSBwb2xpY3kpLCBzbyBhXG4gICAgLy8gcmVuZGVyZXIgdGhhdCBkb2VzIHNob3cgaXQgc2hvd3Mgd2hhdCBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgXG4gICAgLy8gc2VydmVzLCBuZXZlciB0aGUgcmF3IGhlYXAuXG4gICAgY29uc3QgY3R4OiBTdWJmbG93UmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIG5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBkaXJlY3Rpb246ICdleGl0JyxcbiAgICAgIG91dHB1dFN0YXRlOiBldmVudC5vdXRwdXRTdGF0ZSxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTdWJmbG93Py4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTdWJmbG93KGN0eCk7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdWJmbG93JyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQubmFtZSxcbiAgICAgIHN0YWdlSWQ6IHNpZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiByaWQsXG4gICAgICBzdWJmbG93SWQ6IHNmSWQsXG4gICAgICBkaXJlY3Rpb246ICdleGl0JyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eDogTG9vcFJlbmRlckNvbnRleHQgPSB7XG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcbiAgICAgIGl0ZXJhdGlvbjogZXZlbnQuaXRlcmF0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckxvb3A/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckxvb3AoY3R4KTtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHg6IEJyZWFrUmVuZGVyQ29udGV4dCA9IHsgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyQnJlYWs/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckJyZWFrKGN0eCk7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdicmVhaycsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZhaWxlZCBhdHRlbXB0IHRoYXQgd2FzIHJldHJpZWQuIEJVRkZFUkVELCBub3QgcHVzaGVkOiB0aGlzIGlzIHRoZSBvbmx5XG4gICAqIGZsb3cgZXZlbnQgdGhhdCBmaXJlcyBEVVJJTkcgYSBzdGFnZSwgc28gcHVzaGluZyBpdCBzdHJhaWdodCB0byB0aGUgc3RvcmVcbiAgICogd291bGQgcGxhY2UgdGhlIGxpbmUgYmVmb3JlIGl0cyBvd24gc3RhZ2UgaGVhZGVyLiBCdWZmZXJlZCBhbG9uZ3NpZGUgdGhlXG4gICAqIHJlYWRzIGFuZCB3cml0ZXMsIGl0IGZsdXNoZXMgaW4gdHJ1ZSBleGVjdXRpb24gb3JkZXI6XG4gICAqXG4gICAqICAgICBTdGVwIDM6IEZldGNoIHVzZXJcbiAgICogICAgICAg4oazIHJlYWQgdXNlcklkID0gXCJ1MVwiXG4gICAqICAgICAgIOKGsyBbUmV0cnldOiBhdHRlbXB0IDEgb2YgMyBmYWlsZWQg4oCmIHJldHJ5aW5nXG4gICAqICAgICAgIOKGsyByZWFkIHVzZXJJZCA9IFwidTFcIlxuICAgKiAgICAgICDihrMgd3JvdGUgdXNlciA9IHsg4oCmIH1cbiAgICovXG4gIG9uU3RhZ2VSZXRyeShldmVudDogRmxvd1N0YWdlUmV0cnlFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bnRpbWVTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKCFydW50aW1lU3RhZ2VJZCkgcmV0dXJuO1xuICAgIHRoaXMuYnVmZmVyT3AocnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHR5cGU6ICdyZXRyeScsXG4gICAgICBrZXk6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHJhd1ZhbHVlOiB1bmRlZmluZWQsXG4gICAgICByZXRyeToge1xuICAgICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgICAgYXR0ZW1wdDogZXZlbnQuYXR0ZW1wdCxcbiAgICAgICAgbWF4QXR0ZW1wdHM6IGV2ZW50Lm1heEF0dGVtcHRzLFxuICAgICAgICBkZWxheU1zOiBldmVudC5kZWxheU1zLFxuICAgICAgICBtZXNzYWdlOiBldmVudC5tZXNzYWdlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IFBhdXNlRXZlbnQgfCBGbG93UGF1c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIEJvdGggY2hhbm5lbHMgZmlyZSBvblBhdXNlIHdpdGggZGlmZmVyZW50IHBheWxvYWQgc2hhcGVzLiBOYXJyYXRpdmUgb25seVxuICAgIC8vIHN1cmZhY2VzIHRoZSBjb250cm9sLWZsb3cgdmFyaWFudCAod2hpY2ggaGFzIHN0YWdlTmFtZS9zdGFnZUlkKS4gRGF0YVxuICAgIC8vIGNoYW5uZWwncyBQYXVzZUV2ZW50IGlzIGlnbm9yZWQgdG8gYXZvaWQgZHVwbGljYXRlIGVudHJpZXMuXG4gICAgaWYgKCFpc0Zsb3dFdmVudChldmVudCkpIHJldHVybjtcbiAgICBpZiAoIWV2ZW50LnN0YWdlTmFtZSB8fCAhZXZlbnQuc3RhZ2VJZCkgcmV0dXJuO1xuICAgIGNvbnN0IHRleHQgPSBwYXVzZVNlbnRlbmNlKGV2ZW50KTtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ3BhdXNlJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCA/PyBldmVudC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblJlc3VtZShldmVudDogUmVzdW1lRXZlbnQgfCBGbG93UmVzdW1lRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBTYW1lIGlzRmxvd0V2ZW50IGRpc2NyaW1pbmFudCBhcyBvblBhdXNlIOKAlCBpZ25vcmUgc2NvcGUgUmVzdW1lRXZlbnQuXG4gICAgaWYgKCFpc0Zsb3dFdmVudChldmVudCkpIHJldHVybjtcbiAgICBpZiAoIWV2ZW50LnN0YWdlTmFtZSB8fCAhZXZlbnQuc3RhZ2VJZCkgcmV0dXJuO1xuICAgIGNvbnN0IHRleHQgPSByZXN1bWVTZW50ZW5jZShldmVudCk7XG4gICAgdGhpcy5yZXN1bWVkU3RhZ2UgPSBldmVudC5zdGFnZU5hbWU7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdyZXN1bWUnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkID8/IGV2ZW50LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXJyb3IoZXZlbnQ6IEVycm9yRXZlbnQgfCBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIC8vIE5hcnJhdGl2ZSBvbmx5IHN1cmZhY2VzIHRoZSBjb250cm9sLWZsb3cgdmFyaWFudCBvZiBlcnJvcnMgKGhhc1xuICAgIC8vIHN0YWdlTmFtZSArIG1lc3NhZ2UpLiBTY29wZS1sZXZlbCBFcnJvckV2ZW50IGlzIGNhcHR1cmVkIGVsc2V3aGVyZS5cbiAgICBpZiAoIWlzRmxvd0V2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgZXZlbnQubWVzc2FnZSAhPT0gJ3N0cmluZycpIHJldHVybjtcblxuICAgIGxldCB2YWxpZGF0aW9uSXNzdWVzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGV2ZW50LnN0cnVjdHVyZWRFcnJvcj8uaXNzdWVzPy5sZW5ndGgpIHtcbiAgICAgIHZhbGlkYXRpb25Jc3N1ZXMgPSB2YWxpZGF0aW9uRGV0YWlscyhldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdHg6IEVycm9yUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgbWVzc2FnZTogZXZlbnQubWVzc2FnZSxcbiAgICAgIHZhbGlkYXRpb25Jc3N1ZXMsXG4gICAgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyRXJyb3I/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckVycm9yKGN0eCk7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBFbWl0IGNoYW5uZWwgKFBoYXNlIDMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWNlaXZlIGEgY29uc3VtZXItZW1pdHRlZCBldmVudCBmcm9tIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAuXG4gICAqXG4gICAqIEJ1ZmZlcmVkIGFsb25nc2lkZSBgb25SZWFkYC9gb25Xcml0ZWAgcGVyLXN0YWdlIHNvIHRoYXQgdGhlIGZpbmFsXG4gICAqIG5hcnJhdGl2ZSBwcmVzZXJ2ZXMgb3JkZXJpbmc6XG4gICAqXG4gICAqICAgMS4gc3RhZ2UgaGVhZGVyIChlbWl0dGVkIGJ5IGBvblN0YWdlRXhlY3V0ZWRgIC8gYG9uRGVjaXNpb25gKVxuICAgKiAgIDIuIGJ1ZmZlcmVkIG9wcyBmb3IgdGhhdCBzdGFnZSDigJQgaW4gY2FsbCBvcmRlciDigJQgZmx1c2hlZCByaWdodCBhZnRlclxuICAgKlxuICAgKiBXaXRob3V0IGJ1ZmZlcmluZywgZW1pdCBldmVudHMgd291bGQgZmlyZSBCRUZPUkUgdGhlIHN0YWdlIGhlYWRlclxuICAgKiAod2hpY2ggb25seSBsYW5kcyBhdCBgb25TdGFnZUV4ZWN1dGVkYCksIHByb2R1Y2luZyBvdXQtb2Ytb3JkZXJcbiAgICogbmFycmF0aXZlIGVudHJpZXMuIEZsdXNoIGhhcHBlbnMgaW4gYGZsdXNoT3BzYCB3aGljaCByb3V0ZXMgYGVtaXRgLVxuICAgKiB0eXBlZCBidWZmZXJlZCBvcHMgdGhyb3VnaCBgcmVuZGVyRW1pdGAgaW5zdGVhZCBvZiBgcmVuZGVyT3BgLlxuICAgKi9cbiAgb25FbWl0KGV2ZW50OiBFbWl0RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCB7XG4gICAgICB0eXBlOiAnZW1pdCcsXG4gICAgICBrZXk6IGV2ZW50Lm5hbWUsXG4gICAgICByYXdWYWx1ZTogZXZlbnQucGF5bG9hZCxcbiAgICAgIGVtaXRFdmVudDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJFbWl0KGN0eDogRW1pdFJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgW2VtaXRdICR7Y3R4Lm5hbWV9OiAke2N0eC5wYXlsb2FkU3VtbWFyeX1gO1xuICB9XG5cbiAgLy8g4pSA4pSAIE91dHB1dCAobmFycmF0aXZlLXNwZWNpZmljKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmV0dXJucyBlbnRyaWVzIGdyb3VwZWQgYnkgc3ViZmxvd0lkIGZvciBzdHJ1Y3R1cmVkIGFjY2Vzcy5cbiAgICogUm9vdC1sZXZlbCBlbnRyaWVzIGhhdmUgc3ViZmxvd0lkID0gdW5kZWZpbmVkLlxuICAgKi9cbiAgZ2V0RW50cmllc0J5U3ViZmxvdygpOiBSZWNvcmQ8c3RyaW5nLCBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIENvbWJpbmVkTmFycmF0aXZlRW50cnlbXT4gPSB7ICcnOiBbXSB9O1xuICAgIHRoaXMuc3RvcmUuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGVudHJ5LnN1YmZsb3dJZCA/PyAnJztcbiAgICAgIGlmICghcmVzdWx0W2tleV0pIHJlc3VsdFtrZXldID0gW107XG4gICAgICByZXN1bHRba2V5XS5wdXNoKGVudHJ5KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8g4pSA4pSAIFNlcXVlbmNlIHF1ZXJ5IEFQSSAoZGVsZWdhdGVzIHRvIHRoZSBjb21wb3NlZCBzdG9yZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEFsbCBuYXJyYXRpdmUgZW50cmllcyBpbiBleGVjdXRpb24gb3JkZXIuICovXG4gIGdldEVudHJpZXMoKTogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRBbGwoKTtcbiAgfVxuXG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgbmFycmF0aXZlIGVudHJpZXMuICovXG4gIGdldCBlbnRyeUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2l6ZTtcbiAgfVxuXG4gIC8qKiBPKDEpIGxvb2t1cDogYWxsIG5hcnJhdGl2ZSBlbnRyaWVzIGZvciBvbmUgZXhlY3V0aW9uIHN0ZXAuICovXG4gIGdldEVudHJpZXNGb3JTdGVwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEJ5S2V5KHJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgZGlzdGluY3QgZXhlY3V0aW9uIHN0ZXBzIHRoYXQgcHJvZHVjZWQgZW50cmllcy4gKi9cbiAgZ2V0IHN0ZXBDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmtleUNvdW50O1xuICB9XG5cbiAgLyoqIFByZS1idWlsdCBwZXItc3RlcCByYW5nZSBpbmRleCDigJQgTygxKSBsb29rdXBzIGZvciB0aW1lLXRyYXZlbCBzY3J1YmJpbmcuICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RW50cnlSYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBSZWR1Y2UgQUxMIGVudHJpZXMgdG8gYSBzaW5nbGUgdmFsdWUuICovXG4gIGFnZ3JlZ2F0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IENvbWJpbmVkTmFycmF0aXZlRW50cnkpID0+IFIsIGluaXRpYWw6IFIpOiBSIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5hZ2dyZWdhdGUoZm4sIGluaXRpYWwpO1xuICB9XG5cbiAgLyoqIFJlZHVjZSBlbnRyaWVzLCBvcHRpb25hbGx5IGZpbHRlcmVkIHRvIGEgc2V0IG9mIHZpc2libGUgcnVudGltZVN0YWdlSWRzLiAqL1xuICBhY2N1bXVsYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogQ29tYmluZWROYXJyYXRpdmVFbnRyeSkgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5hY2N1bXVsYXRlKGZuLCBpbml0aWFsLCBrZXlzKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmVzc2l2ZSByZXZlYWw6IGVudHJpZXMgd2hvc2UgcnVudGltZVN0YWdlSWQgaXMgaW4gdGhlIHZpc2libGUgc2V0LiAqL1xuICBnZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KTogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBidW5kbGUgZm9yIGluY2x1c2lvbiBpbiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5yZWNvcmRlcnNgIOKAlFxuICAgKiB0aGUgbmFycmF0aXZlIHJpZGVzIHRoZSBzbmFwc2hvdCwgc28gYSBjb25zdW1lciBob2xkaW5nIG9ubHkgdGhlIGZyb3plblxuICAgKiBzbmFwc2hvdCAoYSB0cmFjZSB2aWV3ZXIsIGFuIGV4cG9ydGVkIHJ1biwgYSBVSSBwYW5lbCB0aGF0IG5ldmVyIHNlZXMgdGhlXG4gICAqIGV4ZWN1dG9yKSBjYW4gcmVhZCB0aGUgcnVuJ3Mgc3Rvcnkgd2l0aG91dCBjYWxsaW5nIGJhY2sgaW50byB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBgcmF3VmFsdWVgIGlzIGRlbGliZXJhdGVseSBEUk9QUEVEIGZyb20gdGhlIHNuYXBzaG90IGVudHJpZXMuIEl0IGlzIGFcbiAgICogbGl2ZSByZWZlcmVuY2UgdG8gc2NvcGUvZW1pdCBwYXlsb2FkcyBieSBjb250cmFjdCAoc2VlXG4gICAqIGBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LnJhd1ZhbHVlYCksIHNvIGtlZXBpbmcgaXQgd291bGQgYm90aCBhbGlhcyBlbmdpbmVcbiAgICogbWVtb3J5IGludG8gYW4gYXJ0aWZhY3QgdGhhdCBpcyBzdXBwb3NlZCB0byBiZSBkZXRhY2hlZCBBTkQgbWFrZSB0aGVcbiAgICogc25hcHNob3QgZmFpbCBgc3RydWN0dXJlZENsb25lYC9gSlNPTi5zdHJpbmdpZnlgIHdoZW5ldmVyIGEgcGF5bG9hZCBpc1xuICAgKiBub3Qgc2VyaWFsaXphYmxlLiBUaGUgcmVuZGVyZWQgYHRleHRgIGFscmVhZHkgY2FycmllcyB0aGUgdmFsdWUgc3VtbWFyeVxuICAgKiAoYGluY2x1ZGVWYWx1ZXNgLCBkZWZhdWx0IG9uKSBhbmQgYGtleWAgY2FycmllcyB0aGUgc2NvcGUga2V5LCBzbyBub3RoaW5nXG4gICAqIGEgc25hcHNob3QgY29uc3VtZXIgY2FuIGFjdCBvbiBpcyBsb3N0LiBJbi1wcm9jZXNzIGNvbnN1bWVycyB0aGF0IG5lZWRcbiAgICogdGhlIGxpdmUgdmFsdWUga2VlcCB1c2luZyBgZ2V0RW50cmllcygpYC5cbiAgICovXG4gIHRvU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdOYXJyYXRpdmUnLFxuICAgICAgZGVzY3JpcHRpb246ICdUcmFuc2xhdG9yIChTZXF1ZW5jZVN0b3JlKSDigJQgcGxhaW4tRW5nbGlzaCB0cmFjZSBtZXJnZWQgZnJvbSBmbG93ICsgZGF0YSBldmVudHMnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0RW50cmllcygpLm1hcCgoeyByYXdWYWx1ZTogX3Jhd1ZhbHVlLCAuLi5lbnRyeSB9KSA9PiBlbnRyeSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWxsIHN0YXRlLiBDYWxsZWQgYXV0b21hdGljYWxseSBiZWZvcmUgZWFjaCBydW4uICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdPcHMuY2xlYXIoKTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5jbGVhcigpO1xuICAgIHRoaXMuc3RhZ2VWaXNpdENvdW50cy5jbGVhcigpO1xuICAgIHRoaXMucmVzdW1lZFN0YWdlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGluY3JlbWVudFN0YWdlQ291bnRlcihzdWJmbG93S2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0YWdlQ291bnRlcnMuZ2V0KHN1YmZsb3dLZXkpID8/IDA7XG4gICAgY29uc3QgbmV4dCA9IGN1cnJlbnQgKyAxO1xuICAgIHRoaXMuc3RhZ2VDb3VudGVycy5zZXQoc3ViZmxvd0tleSwgbmV4dCk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvKiogVGhlIGZpcnN0IHN0YWdlIGhlYWRlciBhZnRlciBhIHJlc3VtZSBiZWxvbmdzIHRvIHRoZSByZXN1bWVkIHN0YWdlOyB0b2xkIG9uY2UsIHRoZW4gY2xlYXJlZC4gKi9cbiAgcHJpdmF0ZSBjb25zdW1lUmVzdW1lZChzdGFnZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3VtZWQgPSB0aGlzLnJlc3VtZWRTdGFnZSA9PT0gc3RhZ2VOYW1lO1xuICAgIHRoaXMucmVzdW1lZFN0YWdlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bWVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lRmlyc3RTdGFnZUZsYWcoc3ViZmxvd0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0U3RhZ2VGbGFncy5oYXMoc3ViZmxvd0tleSkpIHtcbiAgICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLnNldChzdWJmbG93S2V5LCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWZmZXJPcChydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBvcDogT21pdDxCdWZmZXJlZE9wLCAnc3RlcE51bWJlcic+KTogdm9pZCB7XG4gICAgbGV0IG9wcyA9IHRoaXMucGVuZGluZ09wcy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIGlmICghb3BzKSB7XG4gICAgICBvcHMgPSBbXTtcbiAgICAgIHRoaXMucGVuZGluZ09wcy5zZXQocnVudGltZVN0YWdlSWQsIG9wcyk7XG4gICAgfVxuICAgIG9wcy5wdXNoKHsgLi4ub3AsIHN0ZXBOdW1iZXI6IG9wcy5sZW5ndGggKyAxIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaE9wcyhydW50aW1lU3RhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdWJmbG93SWQ/OiBzdHJpbmcsIHN0YWdlSWQ/OiBzdHJpbmcsIHN0YWdlTmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChydW50aW1lU3RhZ2VJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3Qgb3BzID0gdGhpcy5wZW5kaW5nT3BzLmdldChydW50aW1lU3RhZ2VJZCk7XG4gICAgaWYgKCFvcHMgfHwgb3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiBvcHMpIHtcbiAgICAgIC8vIOKUgOKUgCBFbWl0IGV2ZW50cyB0YWtlIGEgZGlmZmVyZW50IHJlbmRlciBwYXRoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgLy9cbiAgICAgIC8vIEVtaXQgZXZlbnRzIGFyZSBidWZmZXJlZCBhbG9uZ3NpZGUgcmVhZHMvd3JpdGVzIChzbyB0aGV5IGFwcGVhclxuICAgICAgLy8gdW5kZXIgdGhlaXIgb3duaW5nIHN0YWdlJ3MgaGVhZGVyIGluIG5hcnJhdGl2ZSBvcmRlciwgbm90IGlubGluZVxuICAgICAgLy8gYXQgY2FsbCB0aW1lKS4gQXQgZmx1c2gsIHRoZXkgcm91dGUgdGhyb3VnaCBgcmVuZGVyRW1pdGAgaW5zdGVhZFxuICAgICAgLy8gb2YgYHJlbmRlck9wYCDigJQgY29uc3VtZXJzIHdhbnRpbmcgY3VzdG9tIGVtaXQgcmVuZGVyaW5nIGltcGxlbWVudFxuICAgICAgLy8gdGhlIGRlZGljYXRlZCBob29rLiBVbmhhbmRsZWQgLyBtaXNzaW5nIHJlbmRlcmVyIGZhbGxzIGJhY2sgdG9cbiAgICAgIC8vIHRoZSBzYW1lIGNvbXBhY3QgYFtlbWl0XSBuYW1lOiBwYXlsb2FkU3VtbWFyeWAgZGVmYXVsdCB1c2VkIGJ5XG4gICAgICAvLyB0aGUgcHJlLWJ1ZmZlcmluZyBvbkVtaXQgcGF0aC5cbiAgICAgIGlmIChvcC50eXBlID09PSAnZW1pdCcgJiYgb3AuZW1pdEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGUgPSBvcC5lbWl0RXZlbnQ7XG4gICAgICAgIGNvbnN0IHBheWxvYWRTdW1tYXJ5ID0gdGhpcy5mb3JtYXRWYWx1ZShlLnBheWxvYWQsIHRoaXMubWF4VmFsdWVMZW5ndGgpO1xuICAgICAgICBjb25zdCBlbWl0Q3R4OiBFbWl0UmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICBuYW1lOiBlLm5hbWUsXG4gICAgICAgICAgcGF5bG9hZDogZS5wYXlsb2FkLFxuICAgICAgICAgIHN0YWdlTmFtZTogZS5zdGFnZU5hbWUsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgc3ViZmxvd1BhdGg6IGUuc3ViZmxvd1BhdGgsXG4gICAgICAgICAgcGlwZWxpbmVJZDogZS5waXBlbGluZUlkLFxuICAgICAgICAgIHRpbWVzdGFtcDogZS50aW1lc3RhbXAsXG4gICAgICAgICAgcGF5bG9hZFN1bW1hcnksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVtaXRUZXh0ID0gcmVzb2x2ZVRleHQodGhpcy5yZW5kZXJlcj8ucmVuZGVyRW1pdD8uKGVtaXRDdHgpLCAoKSA9PiB0aGlzLmRlZmF1bHRSZW5kZXJFbWl0KGVtaXRDdHgpKTtcbiAgICAgICAgaWYgKGVtaXRUZXh0ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnZW1pdCcsXG4gICAgICAgICAgdGV4dDogZW1pdFRleHQsXG4gICAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICAgIHN0YWdlSWQsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFJldHJpZWQgYXR0ZW1wdHMgdGFrZSB0aGVpciBvd24gcmVuZGVyIHBhdGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICAvL1xuICAgICAgLy8gU2FtZSBidWZmZXJpbmcgcmF0aW9uYWxlIGFzIGVtaXQgYWJvdmU6IHRoZSBlbnRyeSBiZWxvbmdzIElOU0lERSBpdHNcbiAgICAgIC8vIHN0YWdlLCBpbiB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIGZhaWx1cmUgYWN0dWFsbHkgaGFwcGVuZWQuXG4gICAgICBpZiAob3AudHlwZSA9PT0gJ3JldHJ5JyAmJiBvcC5yZXRyeSkge1xuICAgICAgICBjb25zdCByZXRyeVRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJSZXRyeT8uKG9wLnJldHJ5KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJSZXRyeShvcC5yZXRyeSk7XG4gICAgICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3JldHJ5JyxcbiAgICAgICAgICB0ZXh0OiByZXRyeVRleHQsXG4gICAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICAgIHN0YWdlSWQsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCBvcC50eXBlIGlzIG5hcnJvd2VkIHRvICdyZWFkJyB8ICd3cml0ZScgKHRoZSBlbWl0IGFuZFxuICAgICAgLy8gcmV0cnkgYnJhbmNoZXMgYWJvdmUgdXNlIGBjb250aW51ZWApLiBUeXBlU2NyaXB0IGNhbid0IGZvbGxvdyB0aGF0XG4gICAgICAvLyBuYXJyb3dpbmcgdGhyb3VnaCB0aGUgY29udGludWUsIHNvIHdlIGFzc2VydCBhdCByZW5kZXIgdGltZS5cbiAgICAgIGNvbnN0IG9wVHlwZSA9IG9wLnR5cGUgYXMgJ3JlYWQnIHwgJ3dyaXRlJztcbiAgICAgIGNvbnN0IHZhbHVlU3VtbWFyeSA9IHRoaXMuZm9ybWF0VmFsdWUob3AucmF3VmFsdWUsIHRoaXMubWF4VmFsdWVMZW5ndGgpO1xuICAgICAgY29uc3Qgb3BDdHg6IE9wUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgdHlwZTogb3BUeXBlLFxuICAgICAgICBrZXk6IG9wLmtleSxcbiAgICAgICAgcmF3VmFsdWU6IG9wLnJhd1ZhbHVlLFxuICAgICAgICB2YWx1ZVN1bW1hcnksXG4gICAgICAgIG9wZXJhdGlvbjogb3Aub3BlcmF0aW9uLFxuICAgICAgICBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdGV4dCA9IHJlc29sdmVUZXh0KHRoaXMucmVuZGVyZXI/LnJlbmRlck9wPy4ob3BDdHgpLCAoKSA9PiB0aGlzLmRlZmF1bHRSZW5kZXJPcChvcEN0eCkpO1xuICAgICAgaWYgKHRleHQgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIHRleHQsXG4gICAgICAgIGRlcHRoOiAxLFxuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyLFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIGtleTogb3Aua2V5LFxuICAgICAgICByYXdWYWx1ZTogb3AucmF3VmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdPcHMuZGVsZXRlKHJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBEZWZhdWx0IHJlbmRlcmVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJTdGFnZShjdHg6IFN0YWdlUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgbGV0IGlubmVyOiBzdHJpbmc7XG4gICAgaWYgKGN0eC5yZXN1bWVkKSB7XG4gICAgICBpbm5lciA9ICdJdCBjb250aW51ZWQgZnJvbSB0aGUgcGF1c2UuJztcbiAgICB9IGVsc2UgaWYgKGN0eC5pc0ZpcnN0KSB7XG4gICAgICBpbm5lciA9IGN0eC5kZXNjcmlwdGlvbiA/IGBUaGUgcHJvY2VzcyBiZWdhbjogJHtjdHguZGVzY3JpcHRpb259LmAgOiBgVGhlIHByb2Nlc3MgYmVnYW4gd2l0aCAke2N0eC5zdGFnZU5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChjdHgubG9vcEl0ZXJhdGlvbiAmJiBjdHgubG9vcEl0ZXJhdGlvbiA+IDApIHtcbiAgICAgIGlubmVyID0gY3R4LmRlc2NyaXB0aW9uXG4gICAgICAgID8gYExvb3BlZCBiYWNrOiAke2N0eC5kZXNjcmlwdGlvbn0gKHBhc3MgJHtjdHgubG9vcEl0ZXJhdGlvbn0pLmBcbiAgICAgICAgOiBgTG9vcGVkIGJhY2sgdG8gJHtjdHguc3RhZ2VOYW1lfSAocGFzcyAke2N0eC5sb29wSXRlcmF0aW9ufSkuYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBuZXh0U3RhZ2VTZW50ZW5jZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gYFN0YWdlICR7Y3R4LnN0YWdlTnVtYmVyfTogJHtpbm5lcn1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyT3AoY3R4OiBPcFJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0ZXBQcmVmaXggPSB0aGlzLmluY2x1ZGVTdGVwTnVtYmVycyA/IGBTdGVwICR7Y3R4LnN0ZXBOdW1iZXJ9OiBgIDogJyc7XG4gICAgaWYgKGN0eC50eXBlID09PSAncmVhZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmluY2x1ZGVWYWx1ZXMgJiYgY3R4LnZhbHVlU3VtbWFyeVxuICAgICAgICA/IGAke3N0ZXBQcmVmaXh9UmVhZCAke2N0eC5rZXl9ID0gJHtjdHgudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgOiBgJHtzdGVwUHJlZml4fVJlYWQgJHtjdHgua2V5fWA7XG4gICAgfVxuICAgIGlmIChjdHgub3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgcmV0dXJuIGAke3N0ZXBQcmVmaXh9RGVsZXRlICR7Y3R4LmtleX1gO1xuICAgIH1cbiAgICBpZiAoY3R4Lm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgPyBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke2N0eC5rZXl9ID0gJHtjdHgudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgOiBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke2N0eC5rZXl9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5jbHVkZVZhbHVlcyA/IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtjdHgua2V5fSA9ICR7Y3R4LnZhbHVlU3VtbWFyeX1gIDogYCR7c3RlcFByZWZpeH1Xcml0ZSAke2N0eC5rZXl9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckRlY2lzaW9uKGN0eDogRGVjaXNpb25SZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBjb25zdCBicmFuY2hOYW1lID0gY3R4LmNob3NlbjtcbiAgICBsZXQgY29uZGl0aW9uVGV4dDogc3RyaW5nO1xuICAgIGlmIChjdHguZXZpZGVuY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCBldmlkZW5jZSA9IGN0eC5ldmlkZW5jZSBhcyBhbnk7XG4gICAgICBjb25zdCBtYXRjaGVkUnVsZSA9IGV2aWRlbmNlLnJ1bGVzPy5maW5kKChyOiBhbnkpID0+IHIubWF0Y2hlZCk7XG4gICAgICBpZiAobWF0Y2hlZFJ1bGUpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBtYXRjaGVkUnVsZS5sYWJlbCA/IGAgXCIke21hdGNoZWRSdWxlLmxhYmVsfVwiYCA6ICcnO1xuICAgICAgICBpZiAobWF0Y2hlZFJ1bGUudHlwZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IG1hdGNoZWRSdWxlLmNvbmRpdGlvbnMubWFwKFxuICAgICAgICAgICAgKGM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYCR7Yy5rZXl9ICR7Yy5hY3R1YWxTdW1tYXJ5fSAke2Mub3B9ICR7SlNPTi5zdHJpbmdpZnkoYy50aHJlc2hvbGQpfSAke2MucmVzdWx0ID8gJ1xcdTI3MTMnIDogJ1xcdTI3MTcnfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25kaXRpb25UZXh0ID0gYEl0IGV2YWx1YXRlZCBSdWxlICR7bWF0Y2hlZFJ1bGUucnVsZUluZGV4fSR7bGFiZWx9OiAke3BhcnRzLmpvaW4oXG4gICAgICAgICAgICAnLCAnLFxuICAgICAgICAgICl9LCBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hlZFJ1bGUuaW5wdXRzLm1hcCgoaTogYW55KSA9PiBgJHtpLmtleX09JHtpLnZhbHVlU3VtbWFyeX1gKTtcbiAgICAgICAgICBjb25kaXRpb25UZXh0ID0gYEl0IGV4YW1pbmVkJHtsYWJlbH06ICR7cGFydHMuam9pbignLCAnKX0sIGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yZWRDb3VudCA9IGV2aWRlbmNlLnJ1bGVzPy5maWx0ZXIoKHI6IGFueSkgPT4gci5tYXRjaEVycm9yICE9PSB1bmRlZmluZWQpLmxlbmd0aCA/PyAwO1xuICAgICAgICBjb25zdCBlcnJvck5vdGUgPSBlcnJvcmVkQ291bnQgPiAwID8gYCAoJHtlcnJvcmVkQ291bnR9IHJ1bGUke2Vycm9yZWRDb3VudCA+IDEgPyAncycgOiAnJ30gdGhyZXcgZXJyb3JzKWAgOiAnJztcbiAgICAgICAgLy8gVGhlIGRlZmF1bHQgYnJhbmNoIGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBubyBydWxlIGxhYmVsIGNhbiBleHBsYWluXG4gICAgICAgIC8vIGl0LiBXaGVuIGRlY2lkZSgpIHdhcyBnaXZlbiB0aGUgb2JqZWN0IGZvcm0gb2YgaXRzIGRlZmF1bHQsIGV2aWRlbmNlXG4gICAgICAgIC8vIGNhcnJpZXMgdGhhdCBtZWFuaW5nIOKAlCBwcmludCBpdCwgZXhhY3RseSBhcyBhIG1hdGNoZWQgcnVsZSdzIGxhYmVsIGlzXG4gICAgICAgIC8vIHByaW50ZWQuIEFic2VudCwgdGhlIHNlbnRlbmNlIGlzIHVuY2hhbmdlZCBmcm9tIGJlZm9yZSB0aGlzIGZpZWxkLlxuICAgICAgICBjb25zdCBkZWZhdWx0TGFiZWwgPSBldmlkZW5jZS5kZWZhdWx0TGFiZWwgPyBgIFwiJHtldmlkZW5jZS5kZWZhdWx0TGFiZWx9XCJgIDogJyc7XG4gICAgICAgIGNvbmRpdGlvblRleHQgPSBgTm8gcnVsZXMgbWF0Y2hlZCR7ZXJyb3JOb3RlfSwgZmVsbCBiYWNrIHRvIGRlZmF1bHQke2RlZmF1bHRMYWJlbH06ICR7YnJhbmNoTmFtZX0uYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGRlY2lzaW9uU2VudGVuY2UoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIGBbQ29uZGl0aW9uXTogJHtjb25kaXRpb25UZXh0fWA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJGb3JrKGN0eDogRm9ya1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgW1BhcmFsbGVsXTogJHtmb3JrU2VudGVuY2UoY3R4KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyU2VsZWN0ZWQoY3R4OiBTZWxlY3RlZFJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGlmIChjdHguZXZpZGVuY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCBldmlkZW5jZSA9IGN0eC5ldmlkZW5jZSBhcyBhbnk7XG4gICAgICBjb25zdCBtYXRjaGVkID0gZXZpZGVuY2UucnVsZXM/LmZpbHRlcigocjogYW55KSA9PiByLm1hdGNoZWQpID8/IFtdO1xuICAgICAgY29uc3QgcGFydHMgPSBtYXRjaGVkLm1hcCgocjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gci5sYWJlbCA/IGAgXCIke3IubGFiZWx9XCJgIDogJyc7XG4gICAgICAgIGlmIChyLnR5cGUgPT09ICdmaWx0ZXInKSB7XG4gICAgICAgICAgY29uc3QgY29uZHMgPSByLmNvbmRpdGlvbnNcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIChjOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgYCR7Yy5rZXl9ICR7Yy5hY3R1YWxTdW1tYXJ5fSAke2Mub3B9ICR7SlNPTi5zdHJpbmdpZnkoYy50aHJlc2hvbGQpfSAke2MucmVzdWx0ID8gJ1xcdTI3MTMnIDogJ1xcdTI3MTcnfWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICByZXR1cm4gYCR7ci5icmFuY2h9JHtsYWJlbH0gKCR7Y29uZHN9KWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRzID0gci5pbnB1dHMubWFwKChpOiBhbnkpID0+IGAke2kua2V5fT0ke2kudmFsdWVTdW1tYXJ5fWApLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiBgJHtyLmJyYW5jaH0ke2xhYmVsfSAoJHtpbnB1dHN9KWA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBgW1NlbGVjdGVkXTogJHtjdHguc2VsZWN0ZWQubGVuZ3RofSBvZiAke2N0eC50b3RhbH0gcGF0aHMgc2VsZWN0ZWQ6ICR7cGFydHMuam9pbignOyAnKX0uYDtcbiAgICB9XG4gICAgY29uc3QgbmFtZXMgPSBjdHguc2VsZWN0ZWQuam9pbignLCAnKTtcbiAgICByZXR1cm4gYFtTZWxlY3RlZF06ICR7Y3R4LnNlbGVjdGVkLmxlbmd0aH0gb2YgJHtjdHgudG90YWx9IHBhdGhzIHNlbGVjdGVkIGZvciBleGVjdXRpb246ICR7bmFtZXN9LmA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJTdWJmbG93KGN0eDogU3ViZmxvd1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGlmIChjdHguZGlyZWN0aW9uID09PSAnZXhpdCcpIHtcbiAgICAgIHJldHVybiBgRXhpdGluZyB0aGUgJHtjdHgubmFtZX0gc3ViZmxvdy5gO1xuICAgIH1cbiAgICByZXR1cm4gY3R4LmRlc2NyaXB0aW9uID8gYEVudGVyaW5nICR7Y3R4Lm5hbWV9OiAke2N0eC5kZXNjcmlwdGlvbn0uYCA6IGBFbnRlcmluZyB0aGUgJHtjdHgubmFtZX0gc3ViZmxvdy5gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyTG9vcChjdHg6IExvb3BSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9vcFNlbnRlbmNlKGN0eCk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJCcmVhayhjdHg6IEJyZWFrUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJyZWFrU2VudGVuY2UoY3R4KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlclJldHJ5KGN0eDogUmV0cnlSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBjb25zdCB3YWl0ID0gY3R4LmRlbGF5TXMgPiAwID8gYCBXYWl0ZWQgJHtjdHguZGVsYXlNc31tcyBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC5gIDogJyc7XG4gICAgcmV0dXJuIGBbUmV0cnldOiBhdHRlbXB0ICR7Y3R4LmF0dGVtcHR9IG9mICR7Y3R4Lm1heEF0dGVtcHRzfSBhdCAke2N0eC5zdGFnZU5hbWV9IGZhaWxlZCAoJHtjdHgubWVzc2FnZX0pLiR7d2FpdH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRXJyb3IoY3R4OiBFcnJvclJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGxldCB0ZXh0ID0gZXJyb3JTZW50ZW5jZShjdHgpO1xuICAgIGlmIChjdHgudmFsaWRhdGlvbklzc3VlcykgdGV4dCArPSB2YWxpZGF0aW9uU2VudGVuY2UoY3R4LnZhbGlkYXRpb25Jc3N1ZXMpO1xuICAgIHJldHVybiBgW0Vycm9yXTogJHt0ZXh0fWA7XG4gIH1cbn1cbiJdfQ==
774
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUVILDZEQUE0RDtBQUU1RCw0RUFBaUU7QUFFakUsc0VBQWdFO0FBRWhFLGdFQUEwRDtBQUMxRCw0REFXbUM7QUFnRW5DLG1GQUFtRjtBQUVuRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEseUJBQXlCO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLEVBQUUsQ0FBUztJQUNwQiw2RUFBNkU7SUFDNUQsS0FBSyxHQUFHLElBQUksZ0NBQWEsRUFBMEIsQ0FBQztJQUVyRTs7Ozs7T0FLRztJQUNLLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNyRCxzREFBc0Q7SUFDOUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ2xELDJGQUEyRjtJQUNuRixZQUFZLENBQXFCO0lBQ3pDLHlEQUF5RDtJQUNqRCxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFDckQsNEVBQTRFO0lBQ3BFLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTdDLGtCQUFrQixDQUFVO0lBQzVCLGFBQWEsQ0FBVTtJQUN2QixjQUFjLENBQVM7SUFDdkIsV0FBVyxDQUE2QztJQUN4RCxRQUFRLENBQXNCO0lBRXRDLFlBQVksT0FBNEQ7UUFDdEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO1FBQzlE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O1FBQzVDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxXQUFXLENBQUM7SUFDN0csQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQXNCO1FBQzlDLE9BQU8sSUFBQSwyQkFBWSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUF1QjtRQUNoRCxPQUFPLElBQUEsNEJBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBdUI7UUFDaEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLG9CQUFvQixHQUFHLENBQUMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxXQUFXLE9BQU8sR0FBRyxDQUFDLFNBQVMsWUFBWSxHQUFHLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3JILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUF1QjtRQUNoRCxJQUFJLElBQUksR0FBRyxJQUFBLDRCQUFhLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCO1lBQUUsSUFBSSxJQUFJLElBQUEsaUNBQWtCLEVBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7O0FBenhCSCw4REEweEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIOKAlCBJbmxpbmUgbmFycmF0aXZlIGJ1aWxkZXIgdGhhdCBtZXJnZXMgZmxvdyArIGRhdGEgZHVyaW5nIHRyYXZlcnNhbC5cbiAqXG4gKiBDb21wb3NlcyBhIFNlcXVlbmNlU3RvcmU8Q29tYmluZWROYXJyYXRpdmVFbnRyeT4gZm9yIGR1YWwtaW5kZXhlZCBzdG9yYWdlIChvcmRlcmVkIHNlcXVlbmNlXG4gKiArIE8oMSkgcGVyLXN0ZXAgbG9va3VwIGJ5IHJ1bnRpbWVTdGFnZUlkKSDigJQgQ29udmVudGlvbiAxLCBvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXIuXG4gKiBJbXBsZW1lbnRzIGBDb21iaW5lZFJlY29yZGVyYCDigJQgdGhlIGxpYnJhcnkncyBmaXJzdC1jbGFzcyBhYnN0cmFjdGlvbiBmb3Igb2JzZXJ2ZXJzIHRoYXQgc3BhblxuICogYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdyBzdHJlYW1zLlxuICpcbiAqIEV2ZW50IG9yZGVyaW5nIGd1YXJhbnRlZXMgdGhpcyB3b3JrczpcbiAqICAgMS4gU2NvcGUgZXZlbnRzIChvblJlYWQsIG9uV3JpdGUpIGZpcmUgRFVSSU5HIHN0YWdlIGV4ZWN1dGlvblxuICogICAyLiBGbG93IGV2ZW50cyAob25TdGFnZUV4ZWN1dGVkLCBvbkRlY2lzaW9uKSBmaXJlIEFGVEVSIHN0YWdlIGV4ZWN1dGlvblxuICogICAzLiBCb3RoIGNhcnJ5IHRoZSBzYW1lIGBzdGFnZU5hbWVgIOKAlCBubyBtYXRjaGluZyBhbWJpZ3VpdHlcbiAqXG4gKiBTbyB3ZSBidWZmZXIgc2NvcGUgb3BzIHBlci1zdGFnZSwgdGhlbiB3aGVuIHRoZSBmbG93IGV2ZW50IGFycml2ZXMsXG4gKiBlbWl0IHRoZSBzdGFnZSBlbnRyeSArIGZsdXNoIHRoZSBidWZmZXJlZCBvcHMgaW4gb25lIHBhc3MuXG4gKi9cblxuaW1wb3J0IHsgc3VtbWFyaXplVmFsdWUgfSBmcm9tICcuLi8uLi9jYXB0dXJlL3N1bW1hcml6ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuLi8uLi9yZWNvcmRlci9Db21iaW5lZFJlY29yZGVyLmpzJztcbmltcG9ydCB7IGlzRmxvd0V2ZW50IH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRFdmVudCB9IGZyb20gJy4uLy4uL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBTZXF1ZW5jZVN0b3JlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvU2VxdWVuY2VTdG9yZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFBhdXNlRXZlbnQsIFJlYWRFdmVudCwgUmVzdW1lRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi8uLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlVGV4dCB9IGZyb20gJy4vZm9ybWF0dGluZy9yZXNvbHZlVGV4dC5qcyc7XG5pbXBvcnQge1xuICBicmVha1NlbnRlbmNlLFxuICBkZWNpc2lvblNlbnRlbmNlLFxuICBlcnJvclNlbnRlbmNlLFxuICBmb3JrU2VudGVuY2UsXG4gIGxvb3BTZW50ZW5jZSxcbiAgbmV4dFN0YWdlU2VudGVuY2UsXG4gIHBhdXNlU2VudGVuY2UsXG4gIHJlc3VtZVNlbnRlbmNlLFxuICB2YWxpZGF0aW9uRGV0YWlscyxcbiAgdmFsaWRhdGlvblNlbnRlbmNlLFxufSBmcm9tICcuL2Zvcm1hdHRpbmcvc2VudGVuY2VzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRSZW5kZXJDb250ZXh0LFxuICBFcnJvclJlbmRlckNvbnRleHQsXG4gIEZvcmtSZW5kZXJDb250ZXh0LFxuICBMb29wUmVuZGVyQ29udGV4dCxcbiAgTmFycmF0aXZlRm9ybWF0dGVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFJldHJ5UmVuZGVyQ29udGV4dCxcbiAgU2VsZWN0ZWRSZW5kZXJDb250ZXh0LFxuICBTdGFnZVJlbmRlckNvbnRleHQsXG4gIFN1YmZsb3dSZW5kZXJDb250ZXh0LFxufSBmcm9tICcuL25hcnJhdGl2ZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd1BhdXNlRXZlbnQsXG4gIEZsb3dSZXN1bWVFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3RhZ2VSZXRyeUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgQnVmZmVyZWRPcCB7XG4gIHR5cGU6ICdyZWFkJyB8ICd3cml0ZScgfCAnZW1pdCcgfCAncmV0cnknO1xuICAvKiogRm9yIHJlYWQvd3JpdGU6IHNjb3BlIGtleS4gRm9yIGVtaXQ6IHRoZSBldmVudCBuYW1lLiBGb3IgcmV0cnk6IHRoZSBzdGFnZSBuYW1lLiAqL1xuICBrZXk6IHN0cmluZztcbiAgcmF3VmFsdWU6IHVua25vd247XG4gIG9wZXJhdGlvbj86ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJztcbiAgc3RlcE51bWJlcjogbnVtYmVyO1xuICAvKiogT25seSBzZXQgZm9yIHR5cGU9J2VtaXQnIOKAlCBjYXJyaWVzIHRoZSBmdWxsIEVtaXRFdmVudCBmb3IgcmVuZGVyaW5nLiAqL1xuICBlbWl0RXZlbnQ/OiBFbWl0RXZlbnQ7XG4gIC8qKlxuICAgKiBPbmx5IHNldCBmb3IgdHlwZT0ncmV0cnknIOKAlCB0aGUgcmV0cnkgZmFjdHMsIGJ1ZmZlcmVkIHJhdGhlciB0aGFuIHB1c2hlZFxuICAgKiBzdHJhaWdodCB0byB0aGUgc3RvcmUgc28gdGhlIGxpbmUgbGFuZHMgSU4gT1JERVIgYmV0d2VlbiB0aGUgZmFpbGVkXG4gICAqIGF0dGVtcHQncyBvcHMgYW5kIHRoZSBuZXh0IGF0dGVtcHQncyBvcHMuIChSZXRyeSBldmVudHMgYXJyaXZlIG9uIHRoZSBmbG93XG4gICAqIGNoYW5uZWwgRFVSSU5HIHRoZSBzdGFnZSwgdW5saWtlIGV2ZXJ5IG90aGVyIGZsb3cgZXZlbnQsIHdoaWNoIGFycml2ZXNcbiAgICogYWZ0ZXIgaXQg4oCUIHB1c2hpbmcgZGlyZWN0bHkgd291bGQgcGxhY2UgdGhlIGxpbmUgYmVmb3JlIGl0cyBvd24gc3RhZ2VcbiAgICogaGVhZGVyLilcbiAgICovXG4gIHJldHJ5PzogUmV0cnlSZW5kZXJDb250ZXh0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zIHtcbiAgaW5jbHVkZVN0ZXBOdW1iZXJzPzogYm9vbGVhbjtcbiAgaW5jbHVkZVZhbHVlcz86IGJvb2xlYW47XG4gIG1heFZhbHVlTGVuZ3RoPzogbnVtYmVyO1xuICAvKiogQ3VzdG9tIHZhbHVlIGZvcm1hdHRlci4gQ2FsbGVkIGF0IHJlbmRlciB0aW1lIChmbHVzaE9wcyksIG5vdCBjYXB0dXJlIHRpbWUuXG4gICAqICBSZWNlaXZlcyB0aGUgcmF3IHZhbHVlIGFuZCBtYXhWYWx1ZUxlbmd0aC4gRGVmYXVsdHMgdG8gc3VtbWFyaXplVmFsdWUoKS4gKi9cbiAgZm9ybWF0VmFsdWU/OiAodmFsdWU6IHVua25vd24sIG1heExlbjogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIC8qKiBQbHVnZ2FibGUgcmVuZGVyZXIgZm9yIGN1c3RvbWl6aW5nIG5hcnJhdGl2ZSBvdXRwdXQuIFVuaW1wbGVtZW50ZWQgbWV0aG9kc1xuICAgKiAgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IEVuZ2xpc2ggcmVuZGVyZXIuIFNlZSBOYXJyYXRpdmVGb3JtYXR0ZXIgZG9jcy4gKi9cbiAgcmVuZGVyZXI/OiBOYXJyYXRpdmVGb3JtYXR0ZXI7XG59XG5cbi8vIOKUgOKUgCBTY29wZVJlY29yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEltcGxlbWVudHMgYENvbWJpbmVkUmVjb3JkZXJgIOKAlCB0aGUgbGlicmFyeSdzIGZpcnN0LWNsYXNzIGFic3RyYWN0aW9uIGZvclxuICogb2JzZXJ2ZXJzIHRoYXQgc3BhbiBib3RoIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgKSBhbmQgY29udHJvbC1mbG93XG4gKiAoYEZsb3dSZWNvcmRlcmApIHN0cmVhbXMuIE9uZSBgaWRgLCByb3V0ZWQgdG8gYm90aCBjaGFubmVscyB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKC4uLilgIChvciBlcXVpdmFsZW50bHkgdmlhXG4gKiBgZXhlY3V0b3IuZW5hYmxlTmFycmF0aXZlKC4uLilgIHdoaWNoIGF1dG8tY3JlYXRlcyBhbiBpbnN0YW5jZSkuXG4gKlxuICogRm9yIHNoYXJlZC1tZXRob2QtbmFtZSBldmVudHMgKGBvbkVycm9yYCwgYG9uUGF1c2VgLCBgb25SZXN1bWVgKSB0aGVcbiAqIGhhbmRsZXIgYWNjZXB0cyB0aGUgdW5pb24gcGF5bG9hZCB0eXBlOyB3ZSBkaXNjcmltaW5hdGUgdmlhIGBpc0Zsb3dFdmVudGAuXG4gKiBTY29wZSB2YXJpYW50cyBvZiB0aGVzZSBldmVudHMgYXJlIGRlbGliZXJhdGVseSBpZ25vcmVkIGhlcmUg4oCUIHRoZVxuICogbmFycmF0aXZlIG9ubHkgc3VyZmFjZXMgY29udHJvbC1mbG93IGxpZmVjeWNsZSBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGltcGxlbWVudHMgQ29tYmluZWRSZWNvcmRlciB7XG4gIHByaXZhdGUgc3RhdGljIF9jb3VudGVyID0gMDtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIER1YWwtaW5kZXhlZCBvcmRlcmVkIHN0b3JhZ2UgKENvbnZlbnRpb24gMSDigJQgY29tcG9zZWQsIG5vdCBpbmhlcml0ZWQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gbmV3IFNlcXVlbmNlU3RvcmU8Q29tYmluZWROYXJyYXRpdmVFbnRyeT4oKTtcblxuICAvKipcbiAgICogUGVuZGluZyBzY29wZSBvcHMga2V5ZWQgYnkgcnVudGltZVN0YWdlSWQuIEZsdXNoZWQgaW4gb25TdGFnZUV4ZWN1dGVkL29uRGVjaXNpb24uXG4gICAqXG4gICAqIEtleWluZyBieSBydW50aW1lU3RhZ2VJZCAobm90IHN0YWdlTmFtZSkgZW5zdXJlcyBjb3JyZWN0bmVzcyB3aGVuIHBhcmFsbGVsIGZvcmtcbiAgICogYnJhbmNoZXMgY29udGFpbiBzdGFnZXMgd2l0aCB0aGUgc2FtZSBuYW1lIOKAlCBlYWNoIGV4ZWN1dGlvbiBzdGVwIGhhcyBhIHVuaXF1ZSBJRC5cbiAgICovXG4gIHByaXZhdGUgcGVuZGluZ09wcyA9IG5ldyBNYXA8c3RyaW5nLCBCdWZmZXJlZE9wW10+KCk7XG4gIC8qKiBQZXItc3ViZmxvdyBzdGFnZSBjb3VudGVycy4gS2V5ICcnID0gcm9vdCBmbG93LiAqL1xuICBwcml2YXRlIHN0YWdlQ291bnRlcnMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAvKiogVGhlIHN0YWdlIGBvblJlc3VtZWAganVzdCBuYXJyYXRlZCDigJQgaXRzIGhlYWRlciBtdXN0IG5vdCBhbm5vdW5jZSB0aGUgYXJyaXZhbCBhZ2Fpbi4gKi9cbiAgcHJpdmF0ZSByZXN1bWVkU3RhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFBlci1zdWJmbG93IGZpcnN0LXN0YWdlIGZsYWdzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgZmlyc3RTdGFnZUZsYWdzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIC8qKiBWaXNpdCBjb3VudCBwZXIgc3RhZ2VJZCDigJQgZGV0ZWN0cyBsb29wIGl0ZXJhdGlvbnMgKGNvdW50ID4gMSA9IGxvb3ApLiAqL1xuICBwcml2YXRlIHN0YWdlVmlzaXRDb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHByaXZhdGUgaW5jbHVkZVN0ZXBOdW1iZXJzOiBib29sZWFuO1xuICBwcml2YXRlIGluY2x1ZGVWYWx1ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgbWF4VmFsdWVMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZTogKHZhbHVlOiB1bmtub3duLCBtYXhMZW46IG51bWJlcikgPT4gc3RyaW5nO1xuICBwcml2YXRlIHJlbmRlcmVyPzogTmFycmF0aXZlRm9ybWF0dGVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyAmIHsgaWQ/OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zPy5pZCA/PyBgY29tYmluZWQtbmFycmF0aXZlLSR7KytDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLl9jb3VudGVyfWA7XG4gICAgdGhpcy5pbmNsdWRlU3RlcE51bWJlcnMgPSBvcHRpb25zPy5pbmNsdWRlU3RlcE51bWJlcnMgPz8gdHJ1ZTtcbiAgICB0aGlzLmluY2x1ZGVWYWx1ZXMgPSBvcHRpb25zPy5pbmNsdWRlVmFsdWVzID8/IHRydWU7XG4gICAgdGhpcy5tYXhWYWx1ZUxlbmd0aCA9IG9wdGlvbnM/Lm1heFZhbHVlTGVuZ3RoID8/IDgwO1xuICAgIHRoaXMuZm9ybWF0VmFsdWUgPSBvcHRpb25zPy5mb3JtYXRWYWx1ZSA/PyBzdW1tYXJpemVWYWx1ZTtcbiAgICB0aGlzLnJlbmRlcmVyID0gb3B0aW9ucz8ucmVuZGVyZXI7XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgY2hhbm5lbCAoZmlyZXMgZmlyc3QsIGR1cmluZyBzdGFnZSBleGVjdXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFldmVudC5rZXkpIHJldHVybjtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCB7XG4gICAgICB0eXBlOiAncmVhZCcsXG4gICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgIHJhd1ZhbHVlOiBldmVudC52YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlck9wKGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCB7XG4gICAgICB0eXBlOiAnd3JpdGUnLFxuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICByYXdWYWx1ZTogZXZlbnQudmFsdWUsXG4gICAgICBvcGVyYXRpb246IGV2ZW50Lm9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93IGNoYW5uZWwgKGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIC8vIE5vbi1saW5lYXIga2luZHMgZ2V0IHRoZWlyIG5hcnJhdGl2ZSBlbnRyaWVzIChhbmQgb3BzIGZsdXNoKVxuICAgIC8vIGZyb20gYG9uRGVjaXNpb25gIC8gYG9uRm9ya2AgLyBgb25TZWxlY3RlZGAgLyBgb25TdWJmbG93RW50cnlgLlxuICAgIC8vIFNraXAgdGhlbSBoZXJlIHNvIGVhY2ggc3RhZ2UgaGFzIGV4YWN0bHkgb25lIG5hcnJhdGl2ZSBlbnRyeS5cbiAgICBpZiAoZXZlbnQuc3RhZ2VUeXBlICE9PSAnbGluZWFyJykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgY29uc3QgcnVudGltZVN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBzZktleSA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCA/PyAnJztcbiAgICBjb25zdCBzdGFnZU51bSA9IHRoaXMuaW5jcmVtZW50U3RhZ2VDb3VudGVyKHNmS2V5KTtcbiAgICBjb25zdCBpc0ZpcnN0ID0gdGhpcy5jb25zdW1lRmlyc3RTdGFnZUZsYWcoc2ZLZXkpO1xuXG4gICAgLy8gVHJhY2sgdmlzaXQgY291bnQgcGVyIHN0YWdlSWQgdG8gZGV0ZWN0IGxvb3AgaXRlcmF0aW9uc1xuICAgIGNvbnN0IHZpc2l0S2V5ID0gc3RhZ2VJZCA/PyBldmVudC5zdGFnZU5hbWU7XG4gICAgY29uc3QgdmlzaXRDb3VudCA9ICh0aGlzLnN0YWdlVmlzaXRDb3VudHMuZ2V0KHZpc2l0S2V5KSA/PyAwKSArIDE7XG4gICAgdGhpcy5zdGFnZVZpc2l0Q291bnRzLnNldCh2aXNpdEtleSwgdmlzaXRDb3VudCk7XG5cbiAgICBjb25zdCBjdHg6IFN0YWdlUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VOdW1iZXI6IHN0YWdlTnVtLFxuICAgICAgaXNGaXJzdCxcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICAgIGxvb3BJdGVyYXRpb246IHZpc2l0Q291bnQgPiAxID8gdmlzaXRDb3VudCAtIDEgOiB1bmRlZmluZWQsXG4gICAgICAuLi4odGhpcy5jb25zdW1lUmVzdW1lZChldmVudC5zdGFnZU5hbWUpICYmIHsgcmVzdW1lZDogdHJ1ZSB9KSxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTdGFnZT8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU3RhZ2UoY3R4KTtcblxuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKHJ1bnRpbWVTdGFnZUlkLCBzZklkLCBzdGFnZUlkLCBldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuXG4gICAgLy8gRW1pdCB0aGUgZGVjaWRlciBzdGFnZSBlbnRyeS5cbiAgICAvLyBQcm9wb3NhbCAjMDAzIGFsc28gZmlyZXMgYG9uU3RhZ2VFeGVjdXRlZChzdGFnZVR5cGU6ICdkZWNpZGVyJylgXG4gICAgLy8gQUZURVIgdGhpcyBldmVudCwgYnV0IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgZ2F0ZXMgdGhhdFxuICAgIC8vIGhhbmRsZXIgdG8gTElORUFSLW9ubHkgc28gdGhpcyBzdGF5cyB0aGUgc2luZ2xlIGVtaXNzaW9uIHNpdGVcbiAgICAvLyBmb3IgdGhlIGRlY2lkZXIncyBzdGFnZSBlbnRyeSArIG9wcyBmbHVzaC4gS2VlcHMgbmFycmF0aXZlXG4gICAgLy8gb3V0cHV0IGJ5dGUtc3RhYmxlIGFjcm9zcyB0aGUgdjYgdHJhbnNpdGlvbi5cbiAgICBjb25zdCBzZktleSA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCA/PyAnJztcbiAgICBjb25zdCBzdGFnZU51bSA9IHRoaXMuaW5jcmVtZW50U3RhZ2VDb3VudGVyKHNmS2V5KTtcbiAgICBjb25zdCBpc0ZpcnN0ID0gdGhpcy5jb25zdW1lRmlyc3RTdGFnZUZsYWcoc2ZLZXkpO1xuXG4gICAgY29uc3Qgc3RhZ2VDdHg6IFN0YWdlUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuZGVjaWRlcixcbiAgICAgIHN0YWdlTnVtYmVyOiBzdGFnZU51bSxcbiAgICAgIGlzRmlyc3QsXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICAuLi4odGhpcy5jb25zdW1lUmVzdW1lZChldmVudC5kZWNpZGVyKSAmJiB7IHJlc3VtZWQ6IHRydWUgfSksXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZVRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTdGFnZT8uKHN0YWdlQ3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTdGFnZShzdGFnZUN0eCk7XG5cbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIHRleHQ6IHN0YWdlVGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5kZWNpZGVyLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gICAgdGhpcy5mbHVzaE9wcyhydW50aW1lU3RhZ2VJZCwgZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLCBzdGFnZUlkLCBldmVudC5kZWNpZGVyKTtcblxuICAgIC8vIEVtaXQgdGhlIGNvbmRpdGlvbiBlbnRyeSBhcyBhIG5lc3RlZCBzdWItaXRlbSAoZGVwdGggMSkgb2YgdGhlIHN0YWdlIGFib3ZlLlxuICAgIGNvbnN0IGRlY2lzaW9uQ3R4OiBEZWNpc2lvblJlbmRlckNvbnRleHQgPSB7XG4gICAgICBkZWNpZGVyOiBldmVudC5kZWNpZGVyLFxuICAgICAgY2hvc2VuOiBldmVudC5jaG9zZW4sXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICByYXRpb25hbGU6IGV2ZW50LnJhdGlvbmFsZSxcbiAgICAgIGV2aWRlbmNlOiBldmVudC5ldmlkZW5jZSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbmRpdGlvblRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJEZWNpc2lvbj8uKGRlY2lzaW9uQ3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJEZWNpc2lvbihkZWNpc2lvbkN0eCk7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdjb25kaXRpb24nLFxuICAgICAgdGV4dDogY29uZGl0aW9uVGV4dCxcbiAgICAgIGRlcHRoOiAxLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5kZWNpZGVyLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvbk5leHQoKTogdm9pZCB7XG4gICAgLy8gTm8tb3AuIG9uU3RhZ2VFeGVjdXRlZCBhbHJlYWR5IGhhcyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBuZXh0IHN0YWdlLlxuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4OiBGb3JrUmVuZGVyQ29udGV4dCA9IHsgY2hpbGRyZW46IGV2ZW50LmNoaWxkcmVuIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckZvcms/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckZvcmsoY3R4KTtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ2ZvcmsnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHg6IFNlbGVjdGVkUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIHNlbGVjdGVkOiBldmVudC5zZWxlY3RlZCxcbiAgICAgIHRvdGFsOiBldmVudC50b3RhbCxcbiAgICAgIGV2aWRlbmNlOiBldmVudC5ldmlkZW5jZSxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTZWxlY3RlZD8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU2VsZWN0ZWQoY3R4KTtcbiAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgdHlwZTogJ3NlbGVjdG9yJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC5zdWJmbG93SWQgPz8gJyc7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLmRlbGV0ZShzZktleSk7XG4gICAgdGhpcy5maXJzdFN0YWdlRmxhZ3MuZGVsZXRlKHNmS2V5KTtcblxuICAgIGNvbnN0IGN0eDogU3ViZmxvd1JlbmRlckNvbnRleHQgPSB7XG4gICAgICBuYW1lOiBldmVudC5uYW1lLFxuICAgICAgZGlyZWN0aW9uOiAnZW50cnknLFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgbWFwcGVkSW5wdXQ6IGV2ZW50Lm1hcHBlZElucHV0LFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclN1YmZsb3c/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlclN1YmZsb3coY3R4KTtcbiAgICBjb25zdCByaWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBzaWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkO1xuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdzdWJmbG93JyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQubmFtZSxcbiAgICAgIHN0YWdlSWQ6IHNpZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiByaWQsXG4gICAgICBzdWJmbG93SWQ6IHNmSWQsXG4gICAgICBkaXJlY3Rpb246ICdlbnRyeScsXG4gICAgfSk7XG4gICAgLy8gRW1pdCBwZXIta2V5IHN0ZXAgZW50cmllcyBmb3IgbWFwcGVkIGlucHV0cy5cbiAgICAvL1xuICAgIC8vIFJvdXRlIEVBQ0gga2V5IHRocm91Z2ggdGhlIGNvbnN1bWVyJ3MgYHJlbmRlcmVyLnJlbmRlck9wYCBob29rIGJlZm9yZVxuICAgIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgaGFyZGNvZGVkIGBJbnB1dDogJHtrZXl9ID0gJHt2YWx1ZVN1bW1hcnl9YFxuICAgIC8vIHRlbXBsYXRlLiBXaXRob3V0IHRoaXMgcm91dGluZywgYSBjb25zdW1lciB0aGF0IHByb3ZpZGVkIGFcbiAgICAvLyBkb21haW4tYXdhcmUgYHJlbmRlcmVyLnJlbmRlck9wYCAodG8gcmVuZGVyIGUuZy4gYHBhcnNlZFJlc3BvbnNlYFxuICAgIC8vIG9iamVjdHMgc2VtYW50aWNhbGx5KSB3b3VsZCBzZWUgYmVhdXRpZnVsIG91dHB1dCBmb3Igc2NvcGUgd3JpdGVzXG4gICAgLy8gYnV0IGdldCB0aGUgZ2VuZXJpYyBrZXktbGlzdCBmYWxsYmFjayBmb3Igc3ViZmxvdyBpbnB1dHMg4oCUIHRoZVxuICAgIC8vIGxpYnJhcnkncyBcImNvbWJpbmVkIG5hcnJhdGl2ZVwiIHByb21pc2UgKG9uZSByZW5kZXJlciBjb250cm9scyB0aGVcbiAgICAvLyB3aG9sZSBuYXJyYXRpdmUpIHdvdWxkIHNpbGVudGx5IGJyZWFrLiBXZSBob25vdXIgaXQgaGVyZS5cbiAgICAvL1xuICAgIC8vIFRoZSBPcFJlbmRlckNvbnRleHQgaXMgYnVpbHQgd2l0aCBgdHlwZTogJ3dyaXRlJ2AgYmVjYXVzZSBzZW1hbnRpY2FsbHlcbiAgICAvLyB0aGUgc3ViZmxvdydzIGluaXRpYWwgc2NvcGUgSVMgYmVpbmcgd3JpdHRlbiB2aWEgdGhlIHBhcmVudCdzXG4gICAgLy8gaW5wdXRNYXBwZXIuIGBvcGVyYXRpb246ICdzZXQnYCBsaWtld2lzZSDigJQgdGhpcyBpcyB0aGUgc3ViZmxvdydzXG4gICAgLy8gZmlyc3Qgc2lnaHQgb2YgdGhlIGtleS5cbiAgICAvL1xuICAgIC8vIFZhbHVlcyBzaG93biB3aGVuIGluY2x1ZGVWYWx1ZXM9dHJ1ZS4gYGV2ZW50Lm1hcHBlZElucHV0YCBpcyBhbHJlYWR5XG4gICAgLy8gdGhlIFJFVEFJTkVEIGZvcm0gb2YgdGhlIHNlZWQg4oCUIGBTdWJmbG93RXhlY3V0b3JgIHNjcnVicyBpdCB1bmRlciB0aGVcbiAgICAvLyBydW4ncyByZWRhY3Rpb24gcnVsZSBiZWZvcmUgcmFpc2luZyB0aGUgZXZlbnQgKDkuMTkuMCksIHNvIGEgcmVkYWN0ZWRcbiAgICAvLyBrZXkgYXJyaXZlcyBhcyAnW1JFREFDVEVEXScgYW5kIGEgZmllbGQtbGV2ZWwga2V5IGFzIGEgc2NydWJiZWQgY2xvbmUuXG4gICAgaWYgKGV2ZW50Lm1hcHBlZElucHV0ICYmIE9iamVjdC5rZXlzKGV2ZW50Lm1hcHBlZElucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgc3RlcE51bWJlciA9IDA7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudC5tYXBwZWRJbnB1dCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVTdW1tYXJ5ID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSwgdGhpcy5tYXhWYWx1ZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG9wQ3R4OiBPcFJlbmRlckNvbnRleHQgPSB7XG4gICAgICAgICAgdHlwZTogJ3dyaXRlJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcmF3VmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlU3VtbWFyeSxcbiAgICAgICAgICBvcGVyYXRpb246ICdzZXQnLFxuICAgICAgICAgIHN0ZXBOdW1iZXI6ICsrc3RlcE51bWJlcixcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0ZXh0ID0gcmVzb2x2ZVRleHQodGhpcy5yZW5kZXJlcj8ucmVuZGVyT3A/LihvcEN0eCksICgpID0+XG4gICAgICAgICAgdGhpcy5pbmNsdWRlVmFsdWVzID8gYElucHV0OiAke2tleX0gPSAke3ZhbHVlU3VtbWFyeX1gIDogYElucHV0OiAke2tleX1gLFxuICAgICAgICApO1xuICAgICAgICBpZiAodGV4dCA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgICBzdGFnZU5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICAgICAgc3RhZ2VJZDogc2lkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkOiByaWQsXG4gICAgICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICByYXdWYWx1ZTogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByaWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBzaWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkO1xuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgLy8gTk9URTogb3V0cHV0IHN0YXRlIGlzIE5PVCBlbWl0dGVkIGFzIHN0ZXAgZW50cmllcyDigJQgdGhlIHN1YmZsb3cncyBvd25cbiAgICAvLyBzdGFnZXMgYWxyZWFkeSBuYXJyYXRlZCBlYWNoIHdyaXRlLCBzbyB0aGUgZXhpdCBoZWFkZXIgaXMgc3VmZmljaWVudDtcbiAgICAvLyBkcmlsbCBpbnRvIHRoZSBzdWJmbG93IGZvciBkZXRhaWxzLiBTaW5jZSA5LjIwLjAgYG91dHB1dFN0YXRlYCBpcyB0aGVcbiAgICAvLyBzdWJmbG93J3MgU0VSVkVEIHN0YXRlIChpdHMgcmVkYWN0ZWQgbWlycm9yIHVuZGVyIGEgcG9saWN5KSwgc28gYVxuICAgIC8vIHJlbmRlcmVyIHRoYXQgZG9lcyBzaG93IGl0IHNob3dzIHdoYXQgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYFxuICAgIC8vIHNlcnZlcywgbmV2ZXIgdGhlIHJhdyBoZWFwLlxuICAgIGNvbnN0IGN0eDogU3ViZmxvd1JlbmRlckNvbnRleHQgPSB7XG4gICAgICBuYW1lOiBldmVudC5uYW1lLFxuICAgICAgZGlyZWN0aW9uOiAnZXhpdCcsXG4gICAgICBvdXRwdXRTdGF0ZTogZXZlbnQub3V0cHV0U3RhdGUsXG4gICAgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyU3ViZmxvdz8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU3ViZmxvdyhjdHgpO1xuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAnc3ViZmxvdycsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBzdGFnZUlkOiBzaWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogcmlkLFxuICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgICAgZGlyZWN0aW9uOiAnZXhpdCcsXG4gICAgfSk7XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHg6IExvb3BSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQsXG4gICAgICBpdGVyYXRpb246IGV2ZW50Lml0ZXJhdGlvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJMb29wPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJMb29wKGN0eCk7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdsb29wJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQnJlYWsoZXZlbnQ6IEZsb3dCcmVha0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4OiBCcmVha1JlbmRlckNvbnRleHQgPSB7IHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckJyZWFrPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJCcmVhayhjdHgpO1xuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAnYnJlYWsnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQSBmYWlsZWQgYXR0ZW1wdCB0aGF0IHdhcyByZXRyaWVkLiBCVUZGRVJFRCwgbm90IHB1c2hlZDogdGhpcyBpcyB0aGUgb25seVxuICAgKiBmbG93IGV2ZW50IHRoYXQgZmlyZXMgRFVSSU5HIGEgc3RhZ2UsIHNvIHB1c2hpbmcgaXQgc3RyYWlnaHQgdG8gdGhlIHN0b3JlXG4gICAqIHdvdWxkIHBsYWNlIHRoZSBsaW5lIGJlZm9yZSBpdHMgb3duIHN0YWdlIGhlYWRlci4gQnVmZmVyZWQgYWxvbmdzaWRlIHRoZVxuICAgKiByZWFkcyBhbmQgd3JpdGVzLCBpdCBmbHVzaGVzIGluIHRydWUgZXhlY3V0aW9uIG9yZGVyOlxuICAgKlxuICAgKiAgICAgU3RlcCAzOiBGZXRjaCB1c2VyXG4gICAqICAgICAgIOKGsyByZWFkIHVzZXJJZCA9IFwidTFcIlxuICAgKiAgICAgICDihrMgW1JldHJ5XTogYXR0ZW1wdCAxIG9mIDMgZmFpbGVkIOKApiByZXRyeWluZ1xuICAgKiAgICAgICDihrMgcmVhZCB1c2VySWQgPSBcInUxXCJcbiAgICogICAgICAg4oazIHdyb3RlIHVzZXIgPSB7IOKApiB9XG4gICAqL1xuICBvblN0YWdlUmV0cnkoZXZlbnQ6IEZsb3dTdGFnZVJldHJ5RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmICghcnVudGltZVN0YWdlSWQpIHJldHVybjtcbiAgICB0aGlzLmJ1ZmZlck9wKHJ1bnRpbWVTdGFnZUlkLCB7XG4gICAgICB0eXBlOiAncmV0cnknLFxuICAgICAga2V5OiBldmVudC5zdGFnZU5hbWUsXG4gICAgICByYXdWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgcmV0cnk6IHtcbiAgICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICAgIGF0dGVtcHQ6IGV2ZW50LmF0dGVtcHQsXG4gICAgICAgIG1heEF0dGVtcHRzOiBldmVudC5tYXhBdHRlbXB0cyxcbiAgICAgICAgZGVsYXlNczogZXZlbnQuZGVsYXlNcyxcbiAgICAgICAgbWVzc2FnZTogZXZlbnQubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvblBhdXNlKGV2ZW50OiBQYXVzZUV2ZW50IHwgRmxvd1BhdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBCb3RoIGNoYW5uZWxzIGZpcmUgb25QYXVzZSB3aXRoIGRpZmZlcmVudCBwYXlsb2FkIHNoYXBlcy4gTmFycmF0aXZlIG9ubHlcbiAgICAvLyBzdXJmYWNlcyB0aGUgY29udHJvbC1mbG93IHZhcmlhbnQgKHdoaWNoIGhhcyBzdGFnZU5hbWUvc3RhZ2VJZCkuIERhdGFcbiAgICAvLyBjaGFubmVsJ3MgUGF1c2VFdmVudCBpcyBpZ25vcmVkIHRvIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzLlxuICAgIGlmICghaXNGbG93RXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgaWYgKCFldmVudC5zdGFnZU5hbWUgfHwgIWV2ZW50LnN0YWdlSWQpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gcGF1c2VTZW50ZW5jZShldmVudCk7XG4gICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgIHR5cGU6ICdwYXVzZScsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQgPz8gZXZlbnQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25SZXN1bWUoZXZlbnQ6IFJlc3VtZUV2ZW50IHwgRmxvd1Jlc3VtZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gU2FtZSBpc0Zsb3dFdmVudCBkaXNjcmltaW5hbnQgYXMgb25QYXVzZSDigJQgaWdub3JlIHNjb3BlIFJlc3VtZUV2ZW50LlxuICAgIGlmICghaXNGbG93RXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgaWYgKCFldmVudC5zdGFnZU5hbWUgfHwgIWV2ZW50LnN0YWdlSWQpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gcmVzdW1lU2VudGVuY2UoZXZlbnQpO1xuICAgIHRoaXMucmVzdW1lZFN0YWdlID0gZXZlbnQuc3RhZ2VOYW1lO1xuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAncmVzdW1lJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCA/PyBldmVudC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBFcnJvckV2ZW50IHwgRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBOYXJyYXRpdmUgb25seSBzdXJmYWNlcyB0aGUgY29udHJvbC1mbG93IHZhcmlhbnQgb2YgZXJyb3JzIChoYXNcbiAgICAvLyBzdGFnZU5hbWUgKyBtZXNzYWdlKS4gU2NvcGUtbGV2ZWwgRXJyb3JFdmVudCBpcyBjYXB0dXJlZCBlbHNld2hlcmUuXG4gICAgaWYgKCFpc0Zsb3dFdmVudChldmVudCkpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGV2ZW50Lm1lc3NhZ2UgIT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgICBsZXQgdmFsaWRhdGlvbklzc3Vlczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChldmVudC5zdHJ1Y3R1cmVkRXJyb3I/Lmlzc3Vlcz8ubGVuZ3RoKSB7XG4gICAgICB2YWxpZGF0aW9uSXNzdWVzID0gdmFsaWRhdGlvbkRldGFpbHMoZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4OiBFcnJvclJlbmRlckNvbnRleHQgPSB7XG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIG1lc3NhZ2U6IGV2ZW50Lm1lc3NhZ2UsXG4gICAgICB2YWxpZGF0aW9uSXNzdWVzLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckVycm9yPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJFcnJvcihjdHgpO1xuICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgRW1pdCBjaGFubmVsIChQaGFzZSAzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVjZWl2ZSBhIGNvbnN1bWVyLWVtaXR0ZWQgZXZlbnQgZnJvbSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgLlxuICAgKlxuICAgKiBCdWZmZXJlZCBhbG9uZ3NpZGUgYG9uUmVhZGAvYG9uV3JpdGVgIHBlci1zdGFnZSBzbyB0aGF0IHRoZSBmaW5hbFxuICAgKiBuYXJyYXRpdmUgcHJlc2VydmVzIG9yZGVyaW5nOlxuICAgKlxuICAgKiAgIDEuIHN0YWdlIGhlYWRlciAoZW1pdHRlZCBieSBgb25TdGFnZUV4ZWN1dGVkYCAvIGBvbkRlY2lzaW9uYClcbiAgICogICAyLiBidWZmZXJlZCBvcHMgZm9yIHRoYXQgc3RhZ2Ug4oCUIGluIGNhbGwgb3JkZXIg4oCUIGZsdXNoZWQgcmlnaHQgYWZ0ZXJcbiAgICpcbiAgICogV2l0aG91dCBidWZmZXJpbmcsIGVtaXQgZXZlbnRzIHdvdWxkIGZpcmUgQkVGT1JFIHRoZSBzdGFnZSBoZWFkZXJcbiAgICogKHdoaWNoIG9ubHkgbGFuZHMgYXQgYG9uU3RhZ2VFeGVjdXRlZGApLCBwcm9kdWNpbmcgb3V0LW9mLW9yZGVyXG4gICAqIG5hcnJhdGl2ZSBlbnRyaWVzLiBGbHVzaCBoYXBwZW5zIGluIGBmbHVzaE9wc2Agd2hpY2ggcm91dGVzIGBlbWl0YC1cbiAgICogdHlwZWQgYnVmZmVyZWQgb3BzIHRocm91Z2ggYHJlbmRlckVtaXRgIGluc3RlYWQgb2YgYHJlbmRlck9wYC5cbiAgICovXG4gIG9uRW1pdChldmVudDogRW1pdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5ydW50aW1lU3RhZ2VJZCwge1xuICAgICAgdHlwZTogJ2VtaXQnLFxuICAgICAga2V5OiBldmVudC5uYW1lLFxuICAgICAgcmF3VmFsdWU6IGV2ZW50LnBheWxvYWQsXG4gICAgICBlbWl0RXZlbnQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRW1pdChjdHg6IEVtaXRSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFtlbWl0XSAke2N0eC5uYW1lfTogJHtjdHgucGF5bG9hZFN1bW1hcnl9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBPdXRwdXQgKG5hcnJhdGl2ZS1zcGVjaWZpYykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJldHVybnMgZW50cmllcyBncm91cGVkIGJ5IHN1YmZsb3dJZCBmb3Igc3RydWN0dXJlZCBhY2Nlc3MuXG4gICAqIFJvb3QtbGV2ZWwgZW50cmllcyBoYXZlIHN1YmZsb3dJZCA9IHVuZGVmaW5lZC5cbiAgICovXG4gIGdldEVudHJpZXNCeVN1YmZsb3coKTogUmVjb3JkPHN0cmluZywgQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10+ID0geyAnJzogW10gfTtcbiAgICB0aGlzLnN0b3JlLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBlbnRyeS5zdWJmbG93SWQgPz8gJyc7XG4gICAgICBpZiAoIXJlc3VsdFtrZXldKSByZXN1bHRba2V5XSA9IFtdO1xuICAgICAgcmVzdWx0W2tleV0ucHVzaChlbnRyeSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTZXF1ZW5jZSBxdWVyeSBBUEkgKGRlbGVnYXRlcyB0byB0aGUgY29tcG9zZWQgc3RvcmUpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgbmFycmF0aXZlIGVudHJpZXMgaW4gZXhlY3V0aW9uIG9yZGVyLiAqL1xuICBnZXRFbnRyaWVzKCk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0QWxsKCk7XG4gIH1cblxuICAvKiogVG90YWwgbnVtYmVyIG9mIG5hcnJhdGl2ZSBlbnRyaWVzLiAqL1xuICBnZXQgZW50cnlDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNpemU7XG4gIH1cblxuICAvKiogTygxKSBsb29rdXA6IGFsbCBuYXJyYXRpdmUgZW50cmllcyBmb3Igb25lIGV4ZWN1dGlvbiBzdGVwLiAqL1xuICBnZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRCeUtleShydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGRpc3RpbmN0IGV4ZWN1dGlvbiBzdGVwcyB0aGF0IHByb2R1Y2VkIGVudHJpZXMuICovXG4gIGdldCBzdGVwQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5rZXlDb3VudDtcbiAgfVxuXG4gIC8qKiBQcmUtYnVpbHQgcGVyLXN0ZXAgcmFuZ2UgaW5kZXgg4oCUIE8oMSkgbG9va3VwcyBmb3IgdGltZS10cmF2ZWwgc2NydWJiaW5nLiAqL1xuICBnZXRFbnRyeVJhbmdlcygpOiBSZWFkb25seU1hcDxzdHJpbmcsIHsgcmVhZG9ubHkgZmlyc3RJZHg6IG51bWJlcjsgcmVhZG9ubHkgZW5kSWR4OiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEVudHJ5UmFuZ2VzKCk7XG4gIH1cblxuICAvKiogUmVkdWNlIEFMTCBlbnRyaWVzIHRvIGEgc2luZ2xlIHZhbHVlLiAqL1xuICBhZ2dyZWdhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5KSA9PiBSLCBpbml0aWFsOiBSKTogUiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuYWdncmVnYXRlKGZuLCBpbml0aWFsKTtcbiAgfVxuXG4gIC8qKiBSZWR1Y2UgZW50cmllcywgb3B0aW9uYWxseSBmaWx0ZXJlZCB0byBhIHNldCBvZiB2aXNpYmxlIHJ1bnRpbWVTdGFnZUlkcy4gKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IENvbWJpbmVkTmFycmF0aXZlRW50cnkpID0+IFIsIGluaXRpYWw6IFIsIGtleXM/OiBSZWFkb25seVNldDxzdHJpbmc+KTogUiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuYWNjdW11bGF0ZShmbiwgaW5pdGlhbCwga2V5cyk7XG4gIH1cblxuICAvKiogUHJvZ3Jlc3NpdmUgcmV2ZWFsOiBlbnRyaWVzIHdob3NlIHJ1bnRpbWVTdGFnZUlkIGlzIGluIHRoZSB2aXNpYmxlIHNldC4gKi9cbiAgZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkczogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkcyk7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3QgYnVuZGxlIGZvciBpbmNsdXNpb24gaW4gYGV4ZWN1dG9yLmdldFNuYXBzaG90KCkucmVjb3JkZXJzYCDigJRcbiAgICogdGhlIG5hcnJhdGl2ZSByaWRlcyB0aGUgc25hcHNob3QsIHNvIGEgY29uc3VtZXIgaG9sZGluZyBvbmx5IHRoZSBmcm96ZW5cbiAgICogc25hcHNob3QgKGEgdHJhY2Ugdmlld2VyLCBhbiBleHBvcnRlZCBydW4sIGEgVUkgcGFuZWwgdGhhdCBuZXZlciBzZWVzIHRoZVxuICAgKiBleGVjdXRvcikgY2FuIHJlYWQgdGhlIHJ1bidzIHN0b3J5IHdpdGhvdXQgY2FsbGluZyBiYWNrIGludG8gdGhlIGVuZ2luZS5cbiAgICpcbiAgICogYHJhd1ZhbHVlYCBpcyBkZWxpYmVyYXRlbHkgRFJPUFBFRCBmcm9tIHRoZSBzbmFwc2hvdCBlbnRyaWVzLiBJdCBpcyBhXG4gICAqIGxpdmUgcmVmZXJlbmNlIHRvIHNjb3BlL2VtaXQgcGF5bG9hZHMgYnkgY29udHJhY3QgKHNlZVxuICAgKiBgQ29tYmluZWROYXJyYXRpdmVFbnRyeS5yYXdWYWx1ZWApLCBzbyBrZWVwaW5nIGl0IHdvdWxkIGJvdGggYWxpYXMgZW5naW5lXG4gICAqIG1lbW9yeSBpbnRvIGFuIGFydGlmYWN0IHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgZGV0YWNoZWQgQU5EIG1ha2UgdGhlXG4gICAqIHNuYXBzaG90IGZhaWwgYHN0cnVjdHVyZWRDbG9uZWAvYEpTT04uc3RyaW5naWZ5YCB3aGVuZXZlciBhIHBheWxvYWQgaXNcbiAgICogbm90IHNlcmlhbGl6YWJsZS4gVGhlIHJlbmRlcmVkIGB0ZXh0YCBhbHJlYWR5IGNhcnJpZXMgdGhlIHZhbHVlIHN1bW1hcnlcbiAgICogKGBpbmNsdWRlVmFsdWVzYCwgZGVmYXVsdCBvbikgYW5kIGBrZXlgIGNhcnJpZXMgdGhlIHNjb3BlIGtleSwgc28gbm90aGluZ1xuICAgKiBhIHNuYXBzaG90IGNvbnN1bWVyIGNhbiBhY3Qgb24gaXMgbG9zdC4gSW4tcHJvY2VzcyBjb25zdW1lcnMgdGhhdCBuZWVkXG4gICAqIHRoZSBsaXZlIHZhbHVlIGtlZXAgdXNpbmcgYGdldEVudHJpZXMoKWAuXG4gICAqL1xuICB0b1NuYXBzaG90KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnTmFycmF0aXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVHJhbnNsYXRvciAoU2VxdWVuY2VTdG9yZSkg4oCUIHBsYWluLUVuZ2xpc2ggdHJhY2UgbWVyZ2VkIGZyb20gZmxvdyArIGRhdGEgZXZlbnRzJyxcbiAgICAgIHByZWZlcnJlZE9wZXJhdGlvbjogJ3RyYW5zbGF0ZScgYXMgY29uc3QsXG4gICAgICBkYXRhOiB0aGlzLmdldEVudHJpZXMoKS5tYXAoKHsgcmF3VmFsdWU6IF9yYXdWYWx1ZSwgLi4uZW50cnkgfSkgPT4gZW50cnkpLFxuICAgIH07XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCBzdGF0ZS4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGVhY2ggcnVuLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmNsZWFyKCk7XG4gICAgdGhpcy5wZW5kaW5nT3BzLmNsZWFyKCk7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5maXJzdFN0YWdlRmxhZ3MuY2xlYXIoKTtcbiAgICB0aGlzLnN0YWdlVmlzaXRDb3VudHMuY2xlYXIoKTtcbiAgICB0aGlzLnJlc3VtZWRTdGFnZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YXRlIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnRTdGFnZUNvdW50ZXIoc3ViZmxvd0tleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGFnZUNvdW50ZXJzLmdldChzdWJmbG93S2V5KSA/PyAwO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50ICsgMTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuc2V0KHN1YmZsb3dLZXksIG5leHQpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLyoqIFRoZSBmaXJzdCBzdGFnZSBoZWFkZXIgYWZ0ZXIgYSByZXN1bWUgYmVsb25ncyB0byB0aGUgcmVzdW1lZCBzdGFnZTsgdG9sZCBvbmNlLCB0aGVuIGNsZWFyZWQuICovXG4gIHByaXZhdGUgY29uc3VtZVJlc3VtZWQoc3RhZ2VOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXN1bWVkID0gdGhpcy5yZXN1bWVkU3RhZ2UgPT09IHN0YWdlTmFtZTtcbiAgICB0aGlzLnJlc3VtZWRTdGFnZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdW1lZDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHN1YmZsb3dLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5maXJzdFN0YWdlRmxhZ3MuaGFzKHN1YmZsb3dLZXkpKSB7XG4gICAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5zZXQoc3ViZmxvd0tleSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVmZmVyT3AocnVudGltZVN0YWdlSWQ6IHN0cmluZywgb3A6IE9taXQ8QnVmZmVyZWRPcCwgJ3N0ZXBOdW1iZXInPik6IHZvaWQge1xuICAgIGxldCBvcHMgPSB0aGlzLnBlbmRpbmdPcHMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICBpZiAoIW9wcykge1xuICAgICAgb3BzID0gW107XG4gICAgICB0aGlzLnBlbmRpbmdPcHMuc2V0KHJ1bnRpbWVTdGFnZUlkLCBvcHMpO1xuICAgIH1cbiAgICBvcHMucHVzaCh7IC4uLm9wLCBzdGVwTnVtYmVyOiBvcHMubGVuZ3RoICsgMSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hPcHMocnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgc3ViZmxvd0lkPzogc3RyaW5nLCBzdGFnZUlkPzogc3RyaW5nLCBzdGFnZU5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocnVudGltZVN0YWdlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG9wcyA9IHRoaXMucGVuZGluZ09wcy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIGlmICghb3BzIHx8IG9wcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGZvciAoY29uc3Qgb3Agb2Ygb3BzKSB7XG4gICAgICAvLyDilIDilIAgRW1pdCBldmVudHMgdGFrZSBhIGRpZmZlcmVudCByZW5kZXIgcGF0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIC8vXG4gICAgICAvLyBFbWl0IGV2ZW50cyBhcmUgYnVmZmVyZWQgYWxvbmdzaWRlIHJlYWRzL3dyaXRlcyAoc28gdGhleSBhcHBlYXJcbiAgICAgIC8vIHVuZGVyIHRoZWlyIG93bmluZyBzdGFnZSdzIGhlYWRlciBpbiBuYXJyYXRpdmUgb3JkZXIsIG5vdCBpbmxpbmVcbiAgICAgIC8vIGF0IGNhbGwgdGltZSkuIEF0IGZsdXNoLCB0aGV5IHJvdXRlIHRocm91Z2ggYHJlbmRlckVtaXRgIGluc3RlYWRcbiAgICAgIC8vIG9mIGByZW5kZXJPcGAg4oCUIGNvbnN1bWVycyB3YW50aW5nIGN1c3RvbSBlbWl0IHJlbmRlcmluZyBpbXBsZW1lbnRcbiAgICAgIC8vIHRoZSBkZWRpY2F0ZWQgaG9vay4gVW5oYW5kbGVkIC8gbWlzc2luZyByZW5kZXJlciBmYWxscyBiYWNrIHRvXG4gICAgICAvLyB0aGUgc2FtZSBjb21wYWN0IGBbZW1pdF0gbmFtZTogcGF5bG9hZFN1bW1hcnlgIGRlZmF1bHQgdXNlZCBieVxuICAgICAgLy8gdGhlIHByZS1idWZmZXJpbmcgb25FbWl0IHBhdGguXG4gICAgICBpZiAob3AudHlwZSA9PT0gJ2VtaXQnICYmIG9wLmVtaXRFdmVudCkge1xuICAgICAgICBjb25zdCBlID0gb3AuZW1pdEV2ZW50O1xuICAgICAgICBjb25zdCBwYXlsb2FkU3VtbWFyeSA9IHRoaXMuZm9ybWF0VmFsdWUoZS5wYXlsb2FkLCB0aGlzLm1heFZhbHVlTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZW1pdEN0eDogRW1pdFJlbmRlckNvbnRleHQgPSB7XG4gICAgICAgICAgbmFtZTogZS5uYW1lLFxuICAgICAgICAgIHBheWxvYWQ6IGUucGF5bG9hZCxcbiAgICAgICAgICBzdGFnZU5hbWU6IGUuc3RhZ2VOYW1lLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHN1YmZsb3dQYXRoOiBlLnN1YmZsb3dQYXRoLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IGUucGlwZWxpbmVJZCxcbiAgICAgICAgICB0aW1lc3RhbXA6IGUudGltZXN0YW1wLFxuICAgICAgICAgIHBheWxvYWRTdW1tYXJ5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlbWl0VGV4dCA9IHJlc29sdmVUZXh0KHRoaXMucmVuZGVyZXI/LnJlbmRlckVtaXQ/LihlbWl0Q3R4KSwgKCkgPT4gdGhpcy5kZWZhdWx0UmVuZGVyRW1pdChlbWl0Q3R4KSk7XG4gICAgICAgIGlmIChlbWl0VGV4dCA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2VtaXQnLFxuICAgICAgICAgIHRleHQ6IGVtaXRUZXh0LFxuICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgICBzdGFnZUlkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHN0ZXBOdW1iZXI6IG9wLnN0ZXBOdW1iZXIsXG4gICAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBSZXRyaWVkIGF0dGVtcHRzIHRha2UgdGhlaXIgb3duIHJlbmRlciBwYXRoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgLy9cbiAgICAgIC8vIFNhbWUgYnVmZmVyaW5nIHJhdGlvbmFsZSBhcyBlbWl0IGFib3ZlOiB0aGUgZW50cnkgYmVsb25ncyBJTlNJREUgaXRzXG4gICAgICAvLyBzdGFnZSwgaW4gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBmYWlsdXJlIGFjdHVhbGx5IGhhcHBlbmVkLlxuICAgICAgaWYgKG9wLnR5cGUgPT09ICdyZXRyeScgJiYgb3AucmV0cnkpIHtcbiAgICAgICAgY29uc3QgcmV0cnlUZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyUmV0cnk/LihvcC5yZXRyeSkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyUmV0cnkob3AucmV0cnkpO1xuICAgICAgICB0aGlzLnN0b3JlLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdyZXRyeScsXG4gICAgICAgICAgdGV4dDogcmV0cnlUZXh0LFxuICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgICBzdGFnZUlkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHN0ZXBOdW1iZXI6IG9wLnN0ZXBOdW1iZXIsXG4gICAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgb3AudHlwZSBpcyBuYXJyb3dlZCB0byAncmVhZCcgfCAnd3JpdGUnICh0aGUgZW1pdCBhbmRcbiAgICAgIC8vIHJldHJ5IGJyYW5jaGVzIGFib3ZlIHVzZSBgY29udGludWVgKS4gVHlwZVNjcmlwdCBjYW4ndCBmb2xsb3cgdGhhdFxuICAgICAgLy8gbmFycm93aW5nIHRocm91Z2ggdGhlIGNvbnRpbnVlLCBzbyB3ZSBhc3NlcnQgYXQgcmVuZGVyIHRpbWUuXG4gICAgICBjb25zdCBvcFR5cGUgPSBvcC50eXBlIGFzICdyZWFkJyB8ICd3cml0ZSc7XG4gICAgICBjb25zdCB2YWx1ZVN1bW1hcnkgPSB0aGlzLmZvcm1hdFZhbHVlKG9wLnJhd1ZhbHVlLCB0aGlzLm1heFZhbHVlTGVuZ3RoKTtcbiAgICAgIGNvbnN0IG9wQ3R4OiBPcFJlbmRlckNvbnRleHQgPSB7XG4gICAgICAgIHR5cGU6IG9wVHlwZSxcbiAgICAgICAga2V5OiBvcC5rZXksXG4gICAgICAgIHJhd1ZhbHVlOiBvcC5yYXdWYWx1ZSxcbiAgICAgICAgdmFsdWVTdW1tYXJ5LFxuICAgICAgICBvcGVyYXRpb246IG9wLm9wZXJhdGlvbixcbiAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRleHQgPSByZXNvbHZlVGV4dCh0aGlzLnJlbmRlcmVyPy5yZW5kZXJPcD8uKG9wQ3R4KSwgKCkgPT4gdGhpcy5kZWZhdWx0UmVuZGVyT3Aob3BDdHgpKTtcbiAgICAgIGlmICh0ZXh0ID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICB0ZXh0LFxuICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICBrZXk6IG9wLmtleSxcbiAgICAgICAgcmF3VmFsdWU6IG9wLnJhd1ZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nT3BzLmRlbGV0ZShydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvLyDilIDilIAgRGVmYXVsdCByZW5kZXJlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyU3RhZ2UoY3R4OiBTdGFnZVJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGxldCBpbm5lcjogc3RyaW5nO1xuICAgIGlmIChjdHgucmVzdW1lZCkge1xuICAgICAgaW5uZXIgPSAnSXQgY29udGludWVkIGZyb20gdGhlIHBhdXNlLic7XG4gICAgfSBlbHNlIGlmIChjdHguaXNGaXJzdCkge1xuICAgICAgaW5uZXIgPSBjdHguZGVzY3JpcHRpb24gPyBgVGhlIHByb2Nlc3MgYmVnYW46ICR7Y3R4LmRlc2NyaXB0aW9ufS5gIDogYFRoZSBwcm9jZXNzIGJlZ2FuIHdpdGggJHtjdHguc3RhZ2VOYW1lfS5gO1xuICAgIH0gZWxzZSBpZiAoY3R4Lmxvb3BJdGVyYXRpb24gJiYgY3R4Lmxvb3BJdGVyYXRpb24gPiAwKSB7XG4gICAgICBpbm5lciA9IGN0eC5kZXNjcmlwdGlvblxuICAgICAgICA/IGBMb29wZWQgYmFjazogJHtjdHguZGVzY3JpcHRpb259IChwYXNzICR7Y3R4Lmxvb3BJdGVyYXRpb259KS5gXG4gICAgICAgIDogYExvb3BlZCBiYWNrIHRvICR7Y3R4LnN0YWdlTmFtZX0gKHBhc3MgJHtjdHgubG9vcEl0ZXJhdGlvbn0pLmA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyID0gbmV4dFN0YWdlU2VudGVuY2UoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGFnZSAke2N0eC5zdGFnZU51bWJlcn06ICR7aW5uZXJ9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlck9wKGN0eDogT3BSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGVwUHJlZml4ID0gdGhpcy5pbmNsdWRlU3RlcE51bWJlcnMgPyBgU3RlcCAke2N0eC5zdGVwTnVtYmVyfTogYCA6ICcnO1xuICAgIGlmIChjdHgudHlwZSA9PT0gJ3JlYWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmNsdWRlVmFsdWVzICYmIGN0eC52YWx1ZVN1bW1hcnlcbiAgICAgICAgPyBgJHtzdGVwUHJlZml4fVJlYWQgJHtjdHgua2V5fSA9ICR7Y3R4LnZhbHVlU3VtbWFyeX1gXG4gICAgICAgIDogYCR7c3RlcFByZWZpeH1SZWFkICR7Y3R4LmtleX1gO1xuICAgIH1cbiAgICBpZiAoY3R4Lm9wZXJhdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIHJldHVybiBgJHtzdGVwUHJlZml4fURlbGV0ZSAke2N0eC5rZXl9YDtcbiAgICB9XG4gICAgaWYgKGN0eC5vcGVyYXRpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmNsdWRlVmFsdWVzXG4gICAgICAgID8gYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtjdHgua2V5fSA9ICR7Y3R4LnZhbHVlU3VtbWFyeX1gXG4gICAgICAgIDogYCR7c3RlcFByZWZpeH1VcGRhdGUgJHtjdHgua2V5fWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmluY2x1ZGVWYWx1ZXMgPyBgJHtzdGVwUHJlZml4fVdyaXRlICR7Y3R4LmtleX0gPSAke2N0eC52YWx1ZVN1bW1hcnl9YCA6IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtjdHgua2V5fWA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJEZWNpc2lvbihjdHg6IERlY2lzaW9uUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IGN0eC5jaG9zZW47XG4gICAgbGV0IGNvbmRpdGlvblRleHQ6IHN0cmluZztcbiAgICBpZiAoY3R4LmV2aWRlbmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgZXZpZGVuY2UgPSBjdHguZXZpZGVuY2UgYXMgYW55O1xuICAgICAgY29uc3QgbWF0Y2hlZFJ1bGUgPSBldmlkZW5jZS5ydWxlcz8uZmluZCgocjogYW55KSA9PiByLm1hdGNoZWQpO1xuICAgICAgaWYgKG1hdGNoZWRSdWxlKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gbWF0Y2hlZFJ1bGUubGFiZWwgPyBgIFwiJHttYXRjaGVkUnVsZS5sYWJlbH1cImAgOiAnJztcbiAgICAgICAgaWYgKG1hdGNoZWRSdWxlLnR5cGUgPT09ICdmaWx0ZXInKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBtYXRjaGVkUnVsZS5jb25kaXRpb25zLm1hcChcbiAgICAgICAgICAgIChjOiBhbnkpID0+XG4gICAgICAgICAgICAgIGAke2Mua2V5fSAke2MuYWN0dWFsU3VtbWFyeX0gJHtjLm9wfSAke0pTT04uc3RyaW5naWZ5KGMudGhyZXNob2xkKX0gJHtjLnJlc3VsdCA/ICdcXHUyNzEzJyA6ICdcXHUyNzE3J31gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCBldmFsdWF0ZWQgUnVsZSAke21hdGNoZWRSdWxlLnJ1bGVJbmRleH0ke2xhYmVsfTogJHtwYXJ0cy5qb2luKFxuICAgICAgICAgICAgJywgJyxcbiAgICAgICAgICApfSwgYW5kIGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IG1hdGNoZWRSdWxlLmlucHV0cy5tYXAoKGk6IGFueSkgPT4gYCR7aS5rZXl9PSR7aS52YWx1ZVN1bW1hcnl9YCk7XG4gICAgICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCBleGFtaW5lZCR7bGFiZWx9OiAke3BhcnRzLmpvaW4oJywgJyl9LCBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvcmVkQ291bnQgPSBldmlkZW5jZS5ydWxlcz8uZmlsdGVyKChyOiBhbnkpID0+IHIubWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkKS5sZW5ndGggPz8gMDtcbiAgICAgICAgY29uc3QgZXJyb3JOb3RlID0gZXJyb3JlZENvdW50ID4gMCA/IGAgKCR7ZXJyb3JlZENvdW50fSBydWxlJHtlcnJvcmVkQ291bnQgPiAxID8gJ3MnIDogJyd9IHRocmV3IGVycm9ycylgIDogJyc7XG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IGJyYW5jaCBpcyBjaG9zZW4gYnkgbm8gcnVsZSwgc28gbm8gcnVsZSBsYWJlbCBjYW4gZXhwbGFpblxuICAgICAgICAvLyBpdC4gV2hlbiBkZWNpZGUoKSB3YXMgZ2l2ZW4gdGhlIG9iamVjdCBmb3JtIG9mIGl0cyBkZWZhdWx0LCBldmlkZW5jZVxuICAgICAgICAvLyBjYXJyaWVzIHRoYXQgbWVhbmluZyDigJQgcHJpbnQgaXQsIGV4YWN0bHkgYXMgYSBtYXRjaGVkIHJ1bGUncyBsYWJlbCBpc1xuICAgICAgICAvLyBwcmludGVkLiBBYnNlbnQsIHRoZSBzZW50ZW5jZSBpcyB1bmNoYW5nZWQgZnJvbSBiZWZvcmUgdGhpcyBmaWVsZC5cbiAgICAgICAgY29uc3QgZGVmYXVsdExhYmVsID0gZXZpZGVuY2UuZGVmYXVsdExhYmVsID8gYCBcIiR7ZXZpZGVuY2UuZGVmYXVsdExhYmVsfVwiYCA6ICcnO1xuICAgICAgICBjb25kaXRpb25UZXh0ID0gYE5vIHJ1bGVzIG1hdGNoZWQke2Vycm9yTm90ZX0sIGZlbGwgYmFjayB0byBkZWZhdWx0JHtkZWZhdWx0TGFiZWx9OiAke2JyYW5jaE5hbWV9LmA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBkZWNpc2lvblNlbnRlbmNlKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiBgW0NvbmRpdGlvbl06ICR7Y29uZGl0aW9uVGV4dH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRm9yayhjdHg6IEZvcmtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFtQYXJhbGxlbF06ICR7Zm9ya1NlbnRlbmNlKGN0eCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlclNlbGVjdGVkKGN0eDogU2VsZWN0ZWRSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBpZiAoY3R4LmV2aWRlbmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgZXZpZGVuY2UgPSBjdHguZXZpZGVuY2UgYXMgYW55O1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IGV2aWRlbmNlLnJ1bGVzPy5maWx0ZXIoKHI6IGFueSkgPT4gci5tYXRjaGVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hlZC5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHIubGFiZWwgPyBgIFwiJHtyLmxhYmVsfVwiYCA6ICcnO1xuICAgICAgICBpZiAoci50eXBlID09PSAnZmlsdGVyJykge1xuICAgICAgICAgIGNvbnN0IGNvbmRzID0gci5jb25kaXRpb25zXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAoYzogYW55KSA9PlxuICAgICAgICAgICAgICAgIGAke2Mua2V5fSAke2MuYWN0dWFsU3VtbWFyeX0gJHtjLm9wfSAke0pTT04uc3RyaW5naWZ5KGMudGhyZXNob2xkKX0gJHtjLnJlc3VsdCA/ICdcXHUyNzEzJyA6ICdcXHUyNzE3J31gLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgcmV0dXJuIGAke3IuYnJhbmNofSR7bGFiZWx9ICgke2NvbmRzfSlgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IHIuaW5wdXRzLm1hcCgoaTogYW55KSA9PiBgJHtpLmtleX09JHtpLnZhbHVlU3VtbWFyeX1gKS5qb2luKCcsICcpO1xuICAgICAgICByZXR1cm4gYCR7ci5icmFuY2h9JHtsYWJlbH0gKCR7aW5wdXRzfSlgO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYFtTZWxlY3RlZF06ICR7Y3R4LnNlbGVjdGVkLmxlbmd0aH0gb2YgJHtjdHgudG90YWx9IHBhdGhzIHNlbGVjdGVkOiAke3BhcnRzLmpvaW4oJzsgJyl9LmA7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzID0gY3R4LnNlbGVjdGVkLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGBbU2VsZWN0ZWRdOiAke2N0eC5zZWxlY3RlZC5sZW5ndGh9IG9mICR7Y3R4LnRvdGFsfSBwYXRocyBzZWxlY3RlZCBmb3IgZXhlY3V0aW9uOiAke25hbWVzfS5gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyU3ViZmxvdyhjdHg6IFN1YmZsb3dSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gJ2V4aXQnKSB7XG4gICAgICByZXR1cm4gYEV4aXRpbmcgdGhlICR7Y3R4Lm5hbWV9IHN1YmZsb3cuYDtcbiAgICB9XG4gICAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvbiA/IGBFbnRlcmluZyAke2N0eC5uYW1lfTogJHtjdHguZGVzY3JpcHRpb259LmAgOiBgRW50ZXJpbmcgdGhlICR7Y3R4Lm5hbWV9IHN1YmZsb3cuYDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckxvb3AoY3R4OiBMb29wUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvb3BTZW50ZW5jZShjdHgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyQnJlYWsoY3R4OiBCcmVha1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIHJldHVybiBicmVha1NlbnRlbmNlKGN0eCk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJSZXRyeShjdHg6IFJldHJ5UmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgY29uc3Qgd2FpdCA9IGN0eC5kZWxheU1zID4gMCA/IGAgV2FpdGVkICR7Y3R4LmRlbGF5TXN9bXMgYmVmb3JlIHRoZSBuZXh0IGF0dGVtcHQuYCA6ICcnO1xuICAgIHJldHVybiBgW1JldHJ5XTogYXR0ZW1wdCAke2N0eC5hdHRlbXB0fSBvZiAke2N0eC5tYXhBdHRlbXB0c30gYXQgJHtjdHguc3RhZ2VOYW1lfSBmYWlsZWQgKCR7Y3R4Lm1lc3NhZ2V9KS4ke3dhaXR9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckVycm9yKGN0eDogRXJyb3JSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBsZXQgdGV4dCA9IGVycm9yU2VudGVuY2UoY3R4KTtcbiAgICBpZiAoY3R4LnZhbGlkYXRpb25Jc3N1ZXMpIHRleHQgKz0gdmFsaWRhdGlvblNlbnRlbmNlKGN0eC52YWxpZGF0aW9uSXNzdWVzKTtcbiAgICByZXR1cm4gYFtFcnJvcl06ICR7dGV4dH1gO1xuICB9XG59XG4iXX0=
@@ -25,4 +25,4 @@ var SilentNarrativeFlowRecorder_js_1 = require("./recorders/SilentNarrativeFlowR
25
25
  Object.defineProperty(exports, "SilentNarrativeFlowRecorder", { enumerable: true, get: function () { return SilentNarrativeFlowRecorder_js_1.SilentNarrativeFlowRecorder; } });
26
26
  var WindowedNarrativeFlowRecorder_js_1 = require("./recorders/WindowedNarrativeFlowRecorder.js");
27
27
  Object.defineProperty(exports, "WindowedNarrativeFlowRecorder", { enumerable: true, get: function () { return WindowedNarrativeFlowRecorder_js_1.WindowedNarrativeFlowRecorder; } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0VBQTJFO0FBQWxFLHlJQUFBLHlCQUF5QixPQUFBO0FBaUJsQywrRkFBMkY7QUFBbEYseUpBQUEsaUNBQWlDLE9BQUE7QUFHMUMsc0JBQXNCO0FBQ3RCLHlFQUFxRTtBQUE1RCxtSUFBQSxzQkFBc0IsT0FBQTtBQUMvQix1RUFBbUU7QUFBMUQsaUlBQUEscUJBQXFCLE9BQUE7QUFnQjlCLCtFQUErRTtBQUMvRSxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUE7QUFDdEMsbUdBQStGO0FBQXRGLG1KQUFBLDhCQUE4QixPQUFBO0FBQ3ZDLHVHQUFtRztBQUExRix1SkFBQSxnQ0FBZ0MsT0FBQTtBQUN6Qyx1RkFBbUY7QUFBMUUsdUlBQUEsd0JBQXdCLE9BQUE7QUFDakMsaUdBQTZGO0FBQXBGLGlKQUFBLDZCQUE2QixPQUFBO0FBQ3RDLDZGQUF5RjtBQUFoRiw2SUFBQSwyQkFBMkIsT0FBQTtBQUNwQyxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LFxuICBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMsXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRW1pdFJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBOYXJyYXRpdmVGb3JtYXR0ZXIsXG4gIE5hcnJhdGl2ZVJlbmRlcmVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9uYXJyYXRpdmVUeXBlcy5qcyc7XG5leHBvcnQgeyBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgfSBmcm9tICcuL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci5qcyc7XG5leHBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBGbG93UmVjb3JkZXIgc3lzdGVtXG5leHBvcnQgeyBGbG93UmVjb3JkZXJEaXNwYXRjaGVyIH0gZnJvbSAnLi9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLmpzJztcbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93UnVuRXZlbnQsXG4gIEZsb3dSdW5GYWlsZWRFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQnVpbHQtaW4gRmxvd1JlY29yZGVyIHN0cmF0ZWdpZXMgKHRyZWUtc2hha2VhYmxlIOKAlCBvbmx5IGltcG9ydGVkIGNvZGUgc2hpcHMpXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL0FkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL01pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1Byb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1JMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1NlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1NpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1dpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0VBQTJFO0FBQWxFLHlJQUFBLHlCQUF5QixPQUFBO0FBZ0JsQywrRkFBMkY7QUFBbEYseUpBQUEsaUNBQWlDLE9BQUE7QUFHMUMsc0JBQXNCO0FBQ3RCLHlFQUFxRTtBQUE1RCxtSUFBQSxzQkFBc0IsT0FBQTtBQUMvQix1RUFBbUU7QUFBMUQsaUlBQUEscUJBQXFCLE9BQUE7QUFnQjlCLCtFQUErRTtBQUMvRSxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUE7QUFDdEMsbUdBQStGO0FBQXRGLG1KQUFBLDhCQUE4QixPQUFBO0FBQ3ZDLHVHQUFtRztBQUExRix1SkFBQSxnQ0FBZ0MsT0FBQTtBQUN6Qyx1RkFBbUY7QUFBMUUsdUlBQUEsd0JBQXdCLE9BQUE7QUFDakMsaUdBQTZGO0FBQXBGLGlKQUFBLDZCQUE2QixPQUFBO0FBQ3RDLDZGQUF5RjtBQUFoRiw2SUFBQSwyQkFBMkIsT0FBQTtBQUNwQyxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LFxuICBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMsXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRW1pdFJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBOYXJyYXRpdmVGb3JtYXR0ZXIsXG4gIE9wUmVuZGVyQ29udGV4dCxcbiAgU2VsZWN0ZWRSZW5kZXJDb250ZXh0LFxuICBTdGFnZVJlbmRlckNvbnRleHQsXG4gIFN1YmZsb3dSZW5kZXJDb250ZXh0LFxufSBmcm9tICcuL25hcnJhdGl2ZVR5cGVzLmpzJztcbmV4cG9ydCB7IE51bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciB9IGZyb20gJy4vTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzJztcbmV4cG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEZsb3dSZWNvcmRlciBzeXN0ZW1cbmV4cG9ydCB7IEZsb3dSZWNvcmRlckRpc3BhdGNoZXIgfSBmcm9tICcuL0Zsb3dSZWNvcmRlckRpc3BhdGNoZXIuanMnO1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9OYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBCdWlsdC1pbiBGbG93UmVjb3JkZXIgc3RyYXRlZ2llcyAodHJlZS1zaGFrZWFibGUg4oCUIG9ubHkgaW1wb3J0ZWQgY29kZSBzaGlwcylcbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuIl19
@@ -7,4 +7,4 @@
7
7
  * Use CombinedNarrativeRecorder (auto-attached by setEnableNarrative()) instead.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFycmF0aXZlVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvbmFycmF0aXZlVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbmFycmF0aXZlVHlwZXMg4oCUIFNoYXJlZCB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgbmFycmF0aXZlIHJlY29yZGVyIHN5c3RlbS5cbiAqXG4gKiBQcmV2aW91c2x5OiBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIudHMgKGZpbGUgcmVuYW1lZCBpbiBwb3N0LXJlbGVhc2UgY2xlYW51cCkuXG4gKiBUaGUgQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIGNsYXNzIHdhcyByZW1vdmVkIGluIHYxLjAuXG4gKiBVc2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciAoYXV0by1hdHRhY2hlZCBieSBzZXRFbmFibGVOYXJyYXRpdmUoKSkgaW5zdGVhZC5cbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVzIChrZXB0IOKAlCB1c2VkIGJ5IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIsIEZsb3dDaGFydEV4ZWN1dG9yLCBldGMuKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB7XG4gIHR5cGU6XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnc3RlcCdcbiAgICB8ICdjb25kaXRpb24nXG4gICAgfCAnZm9yaydcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAnYnJlYWsnXG4gICAgfCAnZXJyb3InXG4gICAgfCAncGF1c2UnXG4gICAgfCAncmVzdW1lJ1xuICAgIHwgJ2VtaXQnXG4gICAgLyoqIEEgZmFpbGVkIGF0dGVtcHQgYXQgYSBzdGFnZSB3aXRoIGEgZGVjbGFyZWQgcmV0cnkgcG9saWN5LCB3aGljaCB3YXNcbiAgICAgKiAgcmV0cmllZC4gUmVuZGVyZWQgYXMgYSBkZXB0aC0xIHN1Yi1pdGVtIG9mIGl0cyBzdGFnZSwgSU4gT1JERVIgYmV0d2VlblxuICAgICAqICB0aGUgYXR0ZW1wdHMnIHJlYWRzIGFuZCB3cml0ZXMuICovXG4gICAgfCAncmV0cnknO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGRlcHRoOiBudW1iZXI7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIGZyb20gdGhlIGJ1aWxkZXIgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gVXNlIGZvciBVSSBzeW5jLiAqL1xuICBzdGFnZUlkPzogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleC5cbiAgICogIExpbmtzIG5hcnJhdGl2ZSBlbnRyaWVzIHRvIHJlY29yZGVyIE1hcCBlbnRyaWVzIGZvciBPKDEpIHRpbWUtdHJhdmVsIGxvb2t1cC5cbiAgICogIFVuZGVmaW5lZCBvbmx5IHdoZW4gVHJhdmVyc2FsQ29udGV4dCBpcyBhYnNlbnQgZnJvbSB0aGUgc291cmNlIGV2ZW50LiAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgc3RlcE51bWJlcj86IG51bWJlcjtcbiAgLyoqIFN1YmZsb3cgSUQgd2hlbiB0aGlzIGVudHJ5IHdhcyBnZW5lcmF0ZWQgaW5zaWRlIGEgc3ViZmxvdy4gVW5kZWZpbmVkIGZvciByb290LWxldmVsLiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXJlY3Rpb24gZm9yIHN1YmZsb3cgZW50cmllczogJ2VudHJ5JyB3aGVuIGVudGVyaW5nLCAnZXhpdCcgd2hlbiBsZWF2aW5nLlxuICAgKiAgT25seSBwcmVzZW50IG9uIGVudHJpZXMgd2l0aCB0eXBlID09PSAnc3ViZmxvdycuIFVzZSB0aGlzIGluc3RlYWQgb2YgdGV4dCBzY2FubmluZy4gKi9cbiAgZGlyZWN0aW9uPzogJ2VudHJ5JyB8ICdleGl0JztcbiAgLyoqIFNjb3BlIGtleSB0aGF0IHdhcyByZWFkIG9yIHdyaXR0ZW4uIE9ubHkgcHJlc2VudCBvbiAnc3RlcCcgZW50cmllcy5cbiAgICogIFVzZSB0aGlzIGZvciBzdHJ1Y3R1cmVkIGRhdGEgZXh0cmFjdGlvbiAoZS5nLiwgZ3JvdW5kaW5nIGFuYWx5c2lzKVxuICAgKiAgaW5zdGVhZCBvZiBtYXRjaGluZyBvbiByZW5kZXJlZCB0ZXh0IHN0cmluZ3MuICovXG4gIGtleT86IHN0cmluZztcbiAgLyoqIFJhdyB2YWx1ZSBmcm9tIHRoZSBzY29wZSBldmVudCDigJQgYXZhaWxhYmxlIGZvciBwcm9ncmFtbWF0aWMgYWNjZXNzIGFuZCBjdXN0b20gZm9ybWF0dGluZy5cbiAgICogIE9ubHkgcHJlc2VudCBvbiAnc3RlcCcgZW50cmllcyAocmVhZC93cml0ZSBvcHMpLiBUaGlzIGlzIGEgbGl2ZSByZWZlcmVuY2UsIG5vdCBhIGNsb25lLlxuICAgKiAgV2hlbiB1c2luZyBTY29wZUZhY2FkZSwgcmVkYWN0ZWQga2V5cyB3aWxsIGhhdmUgdmFsdWUgJ1tSRURBQ1RFRF0nIChzYW5pdGl6ZWQgdXBzdHJlYW1cbiAgICogIGJ5IFNjb3BlRmFjYWRlIGJlZm9yZSBkaXNwYXRjaGluZyBldmVudHMg4oCUIHRoZSByZWNvcmRlciBkb2VzIG5vdCBlbmZvcmNlIHJlZGFjdGlvbikuICovXG4gIHJhd1ZhbHVlPzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgaW5kZW50Pzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5hcnJhdGl2ZVJlbmRlcmVyIOKAlCBQbHVnZ2FibGUgcmVuZGVyaW5nIGZvciBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlclN0YWdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZVJlbmRlckNvbnRleHQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc3RhZ2VOdW1iZXI6IG51bWJlcjtcbiAgaXNGaXJzdDogYm9vbGVhbjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBMb29wIGl0ZXJhdGlvbiBudW1iZXIgKDEtYmFzZWQpLiBQcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyB2aXNpdGVkIHZpYSBsb29wVG8oKS4gKi9cbiAgbG9vcEl0ZXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIFRydWUgZm9yIHRoZSBzdGFnZSBhIHJlc3VtZSByZS1lbnRlcmVkOiBpdHMgYXJyaXZhbCB3YXMgYWxyZWFkeSB0b2xkIGJ5IHRoZSByZXN1bWUgZW50cnkuICovXG4gIHJlc3VtZWQ/OiBib29sZWFuO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyT3AuIFJldHVybiBudWxsIHRvIGV4Y2x1ZGUgdGhlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcFJlbmRlckNvbnRleHQge1xuICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnO1xuICBrZXk6IHN0cmluZztcbiAgcmF3VmFsdWU6IHVua25vd247XG4gIHZhbHVlU3VtbWFyeTogc3RyaW5nO1xuICBvcGVyYXRpb24/OiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIHN0ZXBOdW1iZXI6IG51bWJlcjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckRlY2lzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWNpc2lvblJlbmRlckNvbnRleHQge1xuICBkZWNpZGVyOiBzdHJpbmc7XG4gIGNob3Nlbjogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICAvKiogUmF3IGV2aWRlbmNlIGZyb20gZGVjaWRlKCkvc2VsZWN0KCkg4oCUIGF2YWlsYWJsZSBmb3IgY3VzdG9tIHJlbmRlcmluZy4gKi9cbiAgZXZpZGVuY2U/OiB1bmtub3duO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyRm9yay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ya1JlbmRlckNvbnRleHQge1xuICBjaGlsZHJlbjogc3RyaW5nW107XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJTdWJmbG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVuZGVyQ29udGV4dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGlyZWN0aW9uOiAnZW50cnknIHwgJ2V4aXQnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIE1hcHBlZCBpbnB1dCB2YWx1ZXMgc2VudCBpbnRvIHRoZSBzdWJmbG93LiBQcmVzZW50IG9uIGVudHJ5LiAqL1xuICBtYXBwZWRJbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU3ViZmxvdyBzaGFyZWQgc3RhdGUgYXQgZXhpdC4gUHJlc2VudCBvbiBleGl0LiAqL1xuICBvdXRwdXRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyTG9vcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcFJlbmRlckNvbnRleHQge1xuICB0YXJnZXQ6IHN0cmluZztcbiAgaXRlcmF0aW9uOiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyQnJlYWsuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFrUmVuZGVyQ29udGV4dCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyU2VsZWN0ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkUmVuZGVyQ29udGV4dCB7XG4gIHNlbGVjdGVkOiBzdHJpbmdbXTtcbiAgdG90YWw6IG51bWJlcjtcbiAgLyoqIFJhdyBldmlkZW5jZSBmcm9tIHNlbGVjdCgpIOKAlCBhdmFpbGFibGUgZm9yIGN1c3RvbSByZW5kZXJpbmcuICovXG4gIGV2aWRlbmNlPzogdW5rbm93bjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckVycm9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvclJlbmRlckNvbnRleHQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB2YWxpZGF0aW9uSXNzdWVzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRleHQgcGFzc2VkIHRvIGBOYXJyYXRpdmVGb3JtYXR0ZXIucmVuZGVyUmV0cnlgIOKAlCBvbmUgZmFpbGVkIGF0dGVtcHQgYXQgYVxuICogc3RhZ2Ugd2l0aCBhIGRlY2xhcmVkIHJldHJ5IHBvbGljeSwgd2hpY2ggdGhlIGVuZ2luZSB0aGVuIHJldHJpZWQuIEZpcmVzIG9ubHlcbiAqIGZvciBhdHRlbXB0cyBmb2xsb3dlZCBieSBhbm90aGVyIGF0dGVtcHQ7IHRoZSBmaW5hbCBmYWlsdXJlIGdvZXMgdG9cbiAqIGByZW5kZXJFcnJvcmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlSZW5kZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBhdHRlbXB0IGp1c3QgZmFpbGVkLCAxLWJhc2VkLiAqL1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBhdHRlbXB0cyB0aGUgcG9saWN5IGFsbG93cywgaW5jbHVkaW5nIHRoZSBmaXJzdC4gKi9cbiAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgLyoqIE1pbGxpc2Vjb25kcyB3YWl0ZWQgYmVmb3JlIHRoZSBuZXh0IGF0dGVtcHQuIGAwYCA9IGltbWVkaWF0ZS4gKi9cbiAgZGVsYXlNczogbnVtYmVyO1xuICAvKiogVGhlIGZhaWxlZCBhdHRlbXB0J3MgZXJyb3IgbWVzc2FnZS4gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRleHQgcGFzc2VkIHRvIGBOYXJyYXRpdmVGb3JtYXR0ZXIucmVuZGVyRW1pdGAg4oCUIGZpcmVzIGZvciBldmVyeVxuICogY29uc3VtZXItZW1pdHRlZCBldmVudCAoYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCkuIENhcnJpZXMgdGhlIGZ1bGxcbiAqIGBFbWl0RXZlbnRgIHNoYXBlIHNvIGZvcm1hdHRlcnMgY2FuIHJlbmRlciBuYW1lICsgcGF5bG9hZCB3aXRoIGZ1bGxcbiAqIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlbmRlckNvbnRleHQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHBheWxvYWQ6IHVua25vd247XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIC8qKiBTdW1tYXJ5IHN0cmluZyDigJQgdGhlIGxpYnJhcnkncyBkZWZhdWx0IHRydW5jYXRlZCBwYXlsb2FkIHByZXZpZXcuICovXG4gIHBheWxvYWRTdW1tYXJ5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGx1Z2dhYmxlIGZvcm1hdHRlciBmb3IgbmFycmF0aXZlIG91dHB1dC4gVHVybnMgc3RydWN0dXJlZCBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgdGhhdCBtYWtlIHVwIHRoZSBuYXJyYXRpdmUgYXJyYXkuXG4gKlxuICogIyMgV2h5IFwiRm9ybWF0dGVyXCIsIG5vdCBcIlJlbmRlcmVyXCJcbiAqXG4gKiBJbiB3ZWIgdGVybWlub2xvZ3kgXCJyZW5kZXJlclwiIHVzdWFsbHkgbWVhbnMgXCJ0dXJuIGRhdGEgaW50byBhIHZpc2libGUgVUlcIlxuICogKHBpeGVscywgRE9NLCBIVE1MKS4gVGhpcyBpbnRlcmZhY2UgZG9lcyBzb21ldGhpbmcgc21hbGxlcjogaXQgY29udmVydHNcbiAqIGV2ZW50IGNvbnRleHQgaW50byBhIHRleHQgc3RyaW5nLiBUaGF0IGlzIG1vcmUgYWNjdXJhdGVseSBjYWxsZWQgYVxuICogKmZvcm1hdHRlciog4oCUIGhlbmNlIHRoZSBuZXcgbmFtZS4gVGhlIGxlZ2FjeSBhbGlhcyBgTmFycmF0aXZlUmVuZGVyZXJgXG4gKiBpcyBwcmVzZXJ2ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIG1hcmtlZCBgQGRlcHJlY2F0ZWRgOyBpdCB3aWxsXG4gKiBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG4gKlxuICogIyMgQmVoYXZpb3VyXG4gKlxuICogRWFjaCBtZXRob2QgaXMgb3B0aW9uYWwg4oCUIHVuaW1wbGVtZW50ZWQgbWV0aG9kcyBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHRcbiAqIEVuZ2xpc2ggZm9ybWF0dGVyLiBSZXR1cm4gYG51bGxgIGZyb20gYHJlbmRlck9wYCB0byBleGNsdWRlIHRoYXQgZW50cnlcbiAqIGZyb20gdGhlIG5hcnJhdGl2ZSBlbnRpcmVseS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVjID0gbmFycmF0aXZlKHtcbiAqICAgcmVuZGVyZXI6IHtcbiAqICAgICByZW5kZXJPcChjdHgpIHtcbiAqICAgICAgIGlmIChjdHgua2V5LnN0YXJ0c1dpdGgoJ19pbnRlcm5hbCcpKSByZXR1cm4gbnVsbDsgLy8gZmlsdGVyIG91dCBpbnRlcm5hbCBrZXlzXG4gKiAgICAgICByZXR1cm4gYCR7Y3R4LnR5cGUgPT09ICdyZWFkJyA/ICdSZWFkJyA6ICdXcm90ZSd9ICR7Y3R4LmtleX06ICR7Y3R4LnZhbHVlU3VtbWFyeX1gO1xuICogICAgIH0sXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hcnJhdGl2ZUZvcm1hdHRlciB7XG4gIHJlbmRlclN0YWdlPyhjdHg6IFN0YWdlUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgLyoqXG4gICAqIEZvcm1hdCBhbiBvcCAoc2NvcGUgcmVhZC93cml0ZSwgb3Igc3ViZmxvdy1pbnB1dCBrZXkpIGludG8gYSBuYXJyYXRpdmUgbGluZS5cbiAgICpcbiAgICogICAtIGBzdHJpbmdgICAgIOKGkiB1c2UgYXMgdGhlIG5hcnJhdGl2ZSBsaW5lXG4gICAqICAgLSBgbnVsbGAgICAgICDihpIgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGUgdGhpcyBlbnRyeSBmcm9tIHRoZSBuYXJyYXRpdmVcbiAgICogICAtIGB1bmRlZmluZWRgIOKGkiB0aGlzIGZvcm1hdHRlciBkb2VzIG5vdCBoYW5kbGUgdGhpcyBvcDsgZmFsbCBiYWNrIHRvXG4gICAqICAgICAgICAgICAgICAgICAgIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBUaGUgYHVuZGVmaW5lZGAgcmV0dXJuIGxldHMgYSBkb21haW4tYXdhcmUgZm9ybWF0dGVyIGhhbmRsZSBvbmx5IHRoZVxuICAgKiBrZXlzIGl0IGtub3dzIGFib3V0IGFuZCBsZWF2ZSB0aGUgcmVzdCB0byB0aGUgbGlicmFyeSBkZWZhdWx0IOKAlCB3aXRob3V0XG4gICAqIGhhdmluZyB0byByZS1pbXBsZW1lbnQgdGhlIHdob2xlIGRlZmF1bHQgaW5saW5lLlxuICAgKi9cbiAgcmVuZGVyT3A/KGN0eDogT3BSZW5kZXJDb250ZXh0KTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcmVuZGVyRGVjaXNpb24/KGN0eDogRGVjaXNpb25SZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJGb3JrPyhjdHg6IEZvcmtSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJTZWxlY3RlZD8oY3R4OiBTZWxlY3RlZFJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlclN1YmZsb3c/KGN0eDogU3ViZmxvd1JlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlckxvb3A/KGN0eDogTG9vcFJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlckJyZWFrPyhjdHg6IEJyZWFrUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyRXJyb3I/KGN0eDogRXJyb3JSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICAvKipcbiAgICogRm9ybWF0IGEgcmV0cmllZCBhdHRlbXB0IGludG8gYSBuYXJyYXRpdmUgbGluZS4gUmVuZGVyZWQgYXMgYSBkZXB0aC0xXG4gICAqIHN1Yi1pdGVtIG9mIGl0cyBzdGFnZSwgcG9zaXRpb25lZCBiZXR3ZWVuIHRoZSBhdHRlbXB0cycgcmVhZHMgYW5kIHdyaXRlc1xuICAgKiBzbyB0aGUgbmFycmF0aXZlIHJlYWRzIGluIHRoZSBvcmRlciB0aGluZ3MgYWN0dWFsbHkgaGFwcGVuZWQuXG4gICAqL1xuICByZW5kZXJSZXRyeT8oY3R4OiBSZXRyeVJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3JtYXQgYSBjb25zdW1lci1lbWl0dGVkIGV2ZW50IChmcm9tIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWApXG4gICAqIGludG8gYSBuYXJyYXRpdmUgbGluZS5cbiAgICpcbiAgICogICAtIGBzdHJpbmdgICAgIOKGkiB1c2UgYXMgdGhlIG5hcnJhdGl2ZSBsaW5lXG4gICAqICAgLSBgbnVsbGAgICAgICDihpIgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGUgdGhpcyBlbnRyeVxuICAgKiAgIC0gYHVuZGVmaW5lZGAg4oaSIHRoaXMgZm9ybWF0dGVyIGRvZXMgbm90IGhhbmRsZSB0aGlzIGVtaXQ7IGZhbGwgYmFja1xuICAgKiAgICAgICAgICAgICAgICAgICB0byB0aGUgbGlicmFyeSdzIGRlZmF1bHQgdGVtcGxhdGVcbiAgICpcbiAgICogVHlwaWNhbCBwYXR0ZXJuOiBzd2l0Y2ggb24gYGN0eC5uYW1lYCAob3IgYSBwcmVmaXggb2YgaXQpIGFuZCByZXR1cm4gYVxuICAgKiBkb21haW4tc3BlY2lmaWMgdGV4dCBsaW5lIGZvciB0aGUgZXZlbnQgdHlwZXMgeW91IGNhcmUgYWJvdXQ7IHJldHVyblxuICAgKiBgdW5kZWZpbmVkYCBmb3IgZXZlcnl0aGluZyBlbHNlIHNvIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGhhbmRsZXMgaXQuXG4gICAqL1xuICByZW5kZXJFbWl0PyhjdHg6IEVtaXRSZW5kZXJDb250ZXh0KTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBSZW5hbWVkIHRvIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIGZvciBjbGFyaXR5IOKAlCB0aGlzIGludGVyZmFjZVxuICogZm9ybWF0cyBldmVudCBjb250ZXh0IGludG8gdGV4dCBsaW5lcywgbm90IFwicmVuZGVyIHRvIFVJXCIuIExlZ2FjeSBhbGlhc1xuICoga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTsgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yXG4gKiByZWxlYXNlLiBNaWdyYXRlIGJ5IHJlcGxhY2luZyBgTmFycmF0aXZlUmVuZGVyZXJgIHdpdGhcbiAqIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIGF0IGltcG9ydHMg4oCUIG5vIGJlaGF2aW91cmFsIGNoYW5nZS5cbiAqL1xuZXhwb3J0IHR5cGUgTmFycmF0aXZlUmVuZGVyZXIgPSBOYXJyYXRpdmVGb3JtYXR0ZXI7XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFycmF0aXZlVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvbmFycmF0aXZlVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbmFycmF0aXZlVHlwZXMg4oCUIFNoYXJlZCB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgbmFycmF0aXZlIHJlY29yZGVyIHN5c3RlbS5cbiAqXG4gKiBQcmV2aW91c2x5OiBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIudHMgKGZpbGUgcmVuYW1lZCBpbiBwb3N0LXJlbGVhc2UgY2xlYW51cCkuXG4gKiBUaGUgQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIGNsYXNzIHdhcyByZW1vdmVkIGluIHYxLjAuXG4gKiBVc2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciAoYXV0by1hdHRhY2hlZCBieSBzZXRFbmFibGVOYXJyYXRpdmUoKSkgaW5zdGVhZC5cbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVzIChrZXB0IOKAlCB1c2VkIGJ5IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIsIEZsb3dDaGFydEV4ZWN1dG9yLCBldGMuKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB7XG4gIHR5cGU6XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnc3RlcCdcbiAgICB8ICdjb25kaXRpb24nXG4gICAgfCAnZm9yaydcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAnYnJlYWsnXG4gICAgfCAnZXJyb3InXG4gICAgfCAncGF1c2UnXG4gICAgfCAncmVzdW1lJ1xuICAgIHwgJ2VtaXQnXG4gICAgLyoqIEEgZmFpbGVkIGF0dGVtcHQgYXQgYSBzdGFnZSB3aXRoIGEgZGVjbGFyZWQgcmV0cnkgcG9saWN5LCB3aGljaCB3YXNcbiAgICAgKiAgcmV0cmllZC4gUmVuZGVyZWQgYXMgYSBkZXB0aC0xIHN1Yi1pdGVtIG9mIGl0cyBzdGFnZSwgSU4gT1JERVIgYmV0d2VlblxuICAgICAqICB0aGUgYXR0ZW1wdHMnIHJlYWRzIGFuZCB3cml0ZXMuICovXG4gICAgfCAncmV0cnknO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGRlcHRoOiBudW1iZXI7XG4gIHN0YWdlTmFtZT86IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIGZyb20gdGhlIGJ1aWxkZXIgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gVXNlIGZvciBVSSBzeW5jLiAqL1xuICBzdGFnZUlkPzogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleC5cbiAgICogIExpbmtzIG5hcnJhdGl2ZSBlbnRyaWVzIHRvIHJlY29yZGVyIE1hcCBlbnRyaWVzIGZvciBPKDEpIHRpbWUtdHJhdmVsIGxvb2t1cC5cbiAgICogIFVuZGVmaW5lZCBvbmx5IHdoZW4gVHJhdmVyc2FsQ29udGV4dCBpcyBhYnNlbnQgZnJvbSB0aGUgc291cmNlIGV2ZW50LiAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgc3RlcE51bWJlcj86IG51bWJlcjtcbiAgLyoqIFN1YmZsb3cgSUQgd2hlbiB0aGlzIGVudHJ5IHdhcyBnZW5lcmF0ZWQgaW5zaWRlIGEgc3ViZmxvdy4gVW5kZWZpbmVkIGZvciByb290LWxldmVsLiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXJlY3Rpb24gZm9yIHN1YmZsb3cgZW50cmllczogJ2VudHJ5JyB3aGVuIGVudGVyaW5nLCAnZXhpdCcgd2hlbiBsZWF2aW5nLlxuICAgKiAgT25seSBwcmVzZW50IG9uIGVudHJpZXMgd2l0aCB0eXBlID09PSAnc3ViZmxvdycuIFVzZSB0aGlzIGluc3RlYWQgb2YgdGV4dCBzY2FubmluZy4gKi9cbiAgZGlyZWN0aW9uPzogJ2VudHJ5JyB8ICdleGl0JztcbiAgLyoqIFNjb3BlIGtleSB0aGF0IHdhcyByZWFkIG9yIHdyaXR0ZW4uIE9ubHkgcHJlc2VudCBvbiAnc3RlcCcgZW50cmllcy5cbiAgICogIFVzZSB0aGlzIGZvciBzdHJ1Y3R1cmVkIGRhdGEgZXh0cmFjdGlvbiAoZS5nLiwgZ3JvdW5kaW5nIGFuYWx5c2lzKVxuICAgKiAgaW5zdGVhZCBvZiBtYXRjaGluZyBvbiByZW5kZXJlZCB0ZXh0IHN0cmluZ3MuICovXG4gIGtleT86IHN0cmluZztcbiAgLyoqIFJhdyB2YWx1ZSBmcm9tIHRoZSBzY29wZSBldmVudCDigJQgYXZhaWxhYmxlIGZvciBwcm9ncmFtbWF0aWMgYWNjZXNzIGFuZCBjdXN0b20gZm9ybWF0dGluZy5cbiAgICogIE9ubHkgcHJlc2VudCBvbiAnc3RlcCcgZW50cmllcyAocmVhZC93cml0ZSBvcHMpLiBUaGlzIGlzIGEgbGl2ZSByZWZlcmVuY2UsIG5vdCBhIGNsb25lLlxuICAgKiAgV2hlbiB1c2luZyBTY29wZUZhY2FkZSwgcmVkYWN0ZWQga2V5cyB3aWxsIGhhdmUgdmFsdWUgJ1tSRURBQ1RFRF0nIChzYW5pdGl6ZWQgdXBzdHJlYW1cbiAgICogIGJ5IFNjb3BlRmFjYWRlIGJlZm9yZSBkaXNwYXRjaGluZyBldmVudHMg4oCUIHRoZSByZWNvcmRlciBkb2VzIG5vdCBlbmZvcmNlIHJlZGFjdGlvbikuICovXG4gIHJhd1ZhbHVlPzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgaW5kZW50Pzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5hcnJhdGl2ZUZvcm1hdHRlciDigJQgUGx1Z2dhYmxlIGZvcm1hdHRpbmcgZm9yIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyU3RhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlUmVuZGVyQ29udGV4dCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzdGFnZU51bWJlcjogbnVtYmVyO1xuICBpc0ZpcnN0OiBib29sZWFuO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIExvb3AgaXRlcmF0aW9uIG51bWJlciAoMS1iYXNlZCkuIFByZXNlbnQgd2hlbiB0aGlzIHN0YWdlIGlzIHZpc2l0ZWQgdmlhIGxvb3BUbygpLiAqL1xuICBsb29wSXRlcmF0aW9uPzogbnVtYmVyO1xuICAvKiogVHJ1ZSBmb3IgdGhlIHN0YWdlIGEgcmVzdW1lIHJlLWVudGVyZWQ6IGl0cyBhcnJpdmFsIHdhcyBhbHJlYWR5IHRvbGQgYnkgdGhlIHJlc3VtZSBlbnRyeS4gKi9cbiAgcmVzdW1lZD86IGJvb2xlYW47XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJPcC4gUmV0dXJuIG51bGwgdG8gZXhjbHVkZSB0aGUgZW50cnkuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wUmVuZGVyQ29udGV4dCB7XG4gIHR5cGU6ICdyZWFkJyB8ICd3cml0ZSc7XG4gIGtleTogc3RyaW5nO1xuICByYXdWYWx1ZTogdW5rbm93bjtcbiAgdmFsdWVTdW1tYXJ5OiBzdHJpbmc7XG4gIG9wZXJhdGlvbj86ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJztcbiAgc3RlcE51bWJlcjogbnVtYmVyO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyRGVjaXNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIERlY2lzaW9uUmVuZGVyQ29udGV4dCB7XG4gIGRlY2lkZXI6IHN0cmluZztcbiAgY2hvc2VuOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByYXRpb25hbGU/OiBzdHJpbmc7XG4gIC8qKiBSYXcgZXZpZGVuY2UgZnJvbSBkZWNpZGUoKS9zZWxlY3QoKSDigJQgYXZhaWxhYmxlIGZvciBjdXN0b20gcmVuZGVyaW5nLiAqL1xuICBldmlkZW5jZT86IHVua25vd247XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJGb3JrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JrUmVuZGVyQ29udGV4dCB7XG4gIGNoaWxkcmVuOiBzdHJpbmdbXTtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlclN1YmZsb3cuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZW5kZXJDb250ZXh0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkaXJlY3Rpb246ICdlbnRyeScgfCAnZXhpdCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogTWFwcGVkIGlucHV0IHZhbHVlcyBzZW50IGludG8gdGhlIHN1YmZsb3cuIFByZXNlbnQgb24gZW50cnkuICovXG4gIG1hcHBlZElucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBTdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0LiBQcmVzZW50IG9uIGV4aXQuICovXG4gIG91dHB1dFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJMb29wLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29wUmVuZGVyQ29udGV4dCB7XG4gIHRhcmdldDogc3RyaW5nO1xuICBpdGVyYXRpb246IG51bWJlcjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJCcmVhay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWtSZW5kZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJTZWxlY3RlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRSZW5kZXJDb250ZXh0IHtcbiAgc2VsZWN0ZWQ6IHN0cmluZ1tdO1xuICB0b3RhbDogbnVtYmVyO1xuICAvKiogUmF3IGV2aWRlbmNlIGZyb20gc2VsZWN0KCkg4oCUIGF2YWlsYWJsZSBmb3IgY3VzdG9tIHJlbmRlcmluZy4gKi9cbiAgZXZpZGVuY2U/OiB1bmtub3duO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyRXJyb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yUmVuZGVyQ29udGV4dCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHZhbGlkYXRpb25Jc3N1ZXM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udGV4dCBwYXNzZWQgdG8gYE5hcnJhdGl2ZUZvcm1hdHRlci5yZW5kZXJSZXRyeWAg4oCUIG9uZSBmYWlsZWQgYXR0ZW1wdCBhdCBhXG4gKiBzdGFnZSB3aXRoIGEgZGVjbGFyZWQgcmV0cnkgcG9saWN5LCB3aGljaCB0aGUgZW5naW5lIHRoZW4gcmV0cmllZC4gRmlyZXMgb25seVxuICogZm9yIGF0dGVtcHRzIGZvbGxvd2VkIGJ5IGFub3RoZXIgYXR0ZW1wdDsgdGhlIGZpbmFsIGZhaWx1cmUgZ29lcyB0b1xuICogYHJlbmRlckVycm9yYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeVJlbmRlckNvbnRleHQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFdoaWNoIGF0dGVtcHQganVzdCBmYWlsZWQsIDEtYmFzZWQuICovXG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgLyoqIFRvdGFsIGF0dGVtcHRzIHRoZSBwb2xpY3kgYWxsb3dzLCBpbmNsdWRpbmcgdGhlIGZpcnN0LiAqL1xuICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAvKiogTWlsbGlzZWNvbmRzIHdhaXRlZCBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC4gYDBgID0gaW1tZWRpYXRlLiAqL1xuICBkZWxheU1zOiBudW1iZXI7XG4gIC8qKiBUaGUgZmFpbGVkIGF0dGVtcHQncyBlcnJvciBtZXNzYWdlLiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udGV4dCBwYXNzZWQgdG8gYE5hcnJhdGl2ZUZvcm1hdHRlci5yZW5kZXJFbWl0YCDigJQgZmlyZXMgZm9yIGV2ZXJ5XG4gKiBjb25zdW1lci1lbWl0dGVkIGV2ZW50IChgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgKS4gQ2FycmllcyB0aGUgZnVsbFxuICogYEVtaXRFdmVudGAgc2hhcGUgc28gZm9ybWF0dGVycyBjYW4gcmVuZGVyIG5hbWUgKyBwYXlsb2FkIHdpdGggZnVsbFxuICogY29udGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWl0UmVuZGVyQ29udGV4dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGF5bG9hZDogdW5rbm93bjtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgLyoqIFN1bW1hcnkgc3RyaW5nIOKAlCB0aGUgbGlicmFyeSdzIGRlZmF1bHQgdHJ1bmNhdGVkIHBheWxvYWQgcHJldmlldy4gKi9cbiAgcGF5bG9hZFN1bW1hcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQbHVnZ2FibGUgZm9ybWF0dGVyIGZvciBuYXJyYXRpdmUgb3V0cHV0LiBUdXJucyBzdHJ1Y3R1cmVkIGV2ZW50IGNvbnRleHRcbiAqIG9iamVjdHMgaW50byB0aGUgdGV4dCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhlIG5hcnJhdGl2ZSBhcnJheS5cbiAqXG4gKiAjIyBXaHkgXCJGb3JtYXR0ZXJcIiwgbm90IFwiUmVuZGVyZXJcIlxuICpcbiAqIEluIHdlYiB0ZXJtaW5vbG9neSBcInJlbmRlcmVyXCIgdXN1YWxseSBtZWFucyBcInR1cm4gZGF0YSBpbnRvIGEgdmlzaWJsZSBVSVwiXG4gKiAocGl4ZWxzLCBET00sIEhUTUwpLiBUaGlzIGludGVyZmFjZSBkb2VzIHNvbWV0aGluZyBzbWFsbGVyOiBpdCBjb252ZXJ0c1xuICogZXZlbnQgY29udGV4dCBpbnRvIGEgdGV4dCBzdHJpbmcuIFRoYXQgaXMgbW9yZSBhY2N1cmF0ZWx5IGNhbGxlZCBhXG4gKiAqZm9ybWF0dGVyKi5cbiAqXG4gKiAjIyBCZWhhdmlvdXJcbiAqXG4gKiBFYWNoIG1ldGhvZCBpcyBvcHRpb25hbCDigJQgdW5pbXBsZW1lbnRlZCBtZXRob2RzIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdFxuICogRW5nbGlzaCBmb3JtYXR0ZXIuIFJldHVybiBgbnVsbGAgZnJvbSBgcmVuZGVyT3BgIHRvIGV4Y2x1ZGUgdGhhdCBlbnRyeVxuICogZnJvbSB0aGUgbmFycmF0aXZlIGVudGlyZWx5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZWMgPSBuYXJyYXRpdmUoe1xuICogICByZW5kZXJlcjoge1xuICogICAgIHJlbmRlck9wKGN0eCkge1xuICogICAgICAgaWYgKGN0eC5rZXkuc3RhcnRzV2l0aCgnX2ludGVybmFsJykpIHJldHVybiBudWxsOyAvLyBmaWx0ZXIgb3V0IGludGVybmFsIGtleXNcbiAqICAgICAgIHJldHVybiBgJHtjdHgudHlwZSA9PT0gJ3JlYWQnID8gJ1JlYWQnIDogJ1dyb3RlJ30gJHtjdHgua2V5fTogJHtjdHgudmFsdWVTdW1tYXJ5fWA7XG4gKiAgICAgfSxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFycmF0aXZlRm9ybWF0dGVyIHtcbiAgcmVuZGVyU3RhZ2U/KGN0eDogU3RhZ2VSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICAvKipcbiAgICogRm9ybWF0IGFuIG9wIChzY29wZSByZWFkL3dyaXRlLCBvciBzdWJmbG93LWlucHV0IGtleSkgaW50byBhIG5hcnJhdGl2ZSBsaW5lLlxuICAgKlxuICAgKiAgIC0gYHN0cmluZ2AgICAg4oaSIHVzZSBhcyB0aGUgbmFycmF0aXZlIGxpbmVcbiAgICogICAtIGBudWxsYCAgICAgIOKGkiBkZWxpYmVyYXRlbHkgZXhjbHVkZSB0aGlzIGVudHJ5IGZyb20gdGhlIG5hcnJhdGl2ZVxuICAgKiAgIC0gYHVuZGVmaW5lZGAg4oaSIHRoaXMgZm9ybWF0dGVyIGRvZXMgbm90IGhhbmRsZSB0aGlzIG9wOyBmYWxsIGJhY2sgdG9cbiAgICogICAgICAgICAgICAgICAgICAgdGhlIGxpYnJhcnkncyBkZWZhdWx0IHRlbXBsYXRlXG4gICAqXG4gICAqIFRoZSBgdW5kZWZpbmVkYCByZXR1cm4gbGV0cyBhIGRvbWFpbi1hd2FyZSBmb3JtYXR0ZXIgaGFuZGxlIG9ubHkgdGhlXG4gICAqIGtleXMgaXQga25vd3MgYWJvdXQgYW5kIGxlYXZlIHRoZSByZXN0IHRvIHRoZSBsaWJyYXJ5IGRlZmF1bHQg4oCUIHdpdGhvdXRcbiAgICogaGF2aW5nIHRvIHJlLWltcGxlbWVudCB0aGUgd2hvbGUgZGVmYXVsdCBpbmxpbmUuXG4gICAqL1xuICByZW5kZXJPcD8oY3R4OiBPcFJlbmRlckNvbnRleHQpOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICByZW5kZXJEZWNpc2lvbj8oY3R4OiBEZWNpc2lvblJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlckZvcms/KGN0eDogRm9ya1JlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlclNlbGVjdGVkPyhjdHg6IFNlbGVjdGVkUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyU3ViZmxvdz8oY3R4OiBTdWJmbG93UmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyTG9vcD8oY3R4OiBMb29wUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyQnJlYWs/KGN0eDogQnJlYWtSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJFcnJvcj8oY3R4OiBFcnJvclJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3JtYXQgYSByZXRyaWVkIGF0dGVtcHQgaW50byBhIG5hcnJhdGl2ZSBsaW5lLiBSZW5kZXJlZCBhcyBhIGRlcHRoLTFcbiAgICogc3ViLWl0ZW0gb2YgaXRzIHN0YWdlLCBwb3NpdGlvbmVkIGJldHdlZW4gdGhlIGF0dGVtcHRzJyByZWFkcyBhbmQgd3JpdGVzXG4gICAqIHNvIHRoZSBuYXJyYXRpdmUgcmVhZHMgaW4gdGhlIG9yZGVyIHRoaW5ncyBhY3R1YWxseSBoYXBwZW5lZC5cbiAgICovXG4gIHJlbmRlclJldHJ5PyhjdHg6IFJldHJ5UmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgLyoqXG4gICAqIEZvcm1hdCBhIGNvbnN1bWVyLWVtaXR0ZWQgZXZlbnQgKGZyb20gYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYClcbiAgICogaW50byBhIG5hcnJhdGl2ZSBsaW5lLlxuICAgKlxuICAgKiAgIC0gYHN0cmluZ2AgICAg4oaSIHVzZSBhcyB0aGUgbmFycmF0aXZlIGxpbmVcbiAgICogICAtIGBudWxsYCAgICAgIOKGkiBkZWxpYmVyYXRlbHkgZXhjbHVkZSB0aGlzIGVudHJ5XG4gICAqICAgLSBgdW5kZWZpbmVkYCDihpIgdGhpcyBmb3JtYXR0ZXIgZG9lcyBub3QgaGFuZGxlIHRoaXMgZW1pdDsgZmFsbCBiYWNrXG4gICAqICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBUeXBpY2FsIHBhdHRlcm46IHN3aXRjaCBvbiBgY3R4Lm5hbWVgIChvciBhIHByZWZpeCBvZiBpdCkgYW5kIHJldHVybiBhXG4gICAqIGRvbWFpbi1zcGVjaWZpYyB0ZXh0IGxpbmUgZm9yIHRoZSBldmVudCB0eXBlcyB5b3UgY2FyZSBhYm91dDsgcmV0dXJuXG4gICAqIGB1bmRlZmluZWRgIGZvciBldmVyeXRoaW5nIGVsc2Ugc28gdGhlIGRlZmF1bHQgdGVtcGxhdGUgaGFuZGxlcyBpdC5cbiAgICovXG4gIHJlbmRlckVtaXQ/KGN0eDogRW1pdFJlbmRlckNvbnRleHQpOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufVxuIl19