@decaf-ts/integrations 0.3.8 → 0.3.9

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 (413) hide show
  1. package/dist/integrations.cjs +3 -3
  2. package/dist/integrations.js +3 -3
  3. package/lib/cjs/graph/engine/constants.cjs +58 -0
  4. package/lib/cjs/graph/engine/decorators.cjs +4 -0
  5. package/lib/cjs/graph/engine/errors/GraphCycleError.cjs +20 -0
  6. package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs +27 -0
  7. package/lib/cjs/graph/engine/errors/GraphInputError.cjs +20 -0
  8. package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs +20 -0
  9. package/lib/cjs/graph/engine/errors/GraphPinningError.cjs +20 -0
  10. package/lib/cjs/graph/engine/errors/GraphPortError.cjs +20 -0
  11. package/lib/cjs/graph/engine/errors/GraphStoreError.cjs +20 -0
  12. package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs +20 -0
  13. package/lib/cjs/graph/{errors → engine/errors}/index.cjs +2 -2
  14. package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs +4 -0
  15. package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs +40 -0
  16. package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs +37 -0
  17. package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs +4 -0
  18. package/lib/cjs/graph/{events → engine/events}/index.cjs +2 -2
  19. package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs +4 -0
  20. package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs +79 -0
  21. package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs +408 -0
  22. package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs +32 -0
  23. package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs +30 -0
  24. package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs +4 -0
  25. package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +103 -0
  26. package/lib/cjs/graph/{execution → engine/execution}/index.cjs +2 -2
  27. package/lib/cjs/graph/engine/index.cjs +84 -0
  28. package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs +87 -0
  29. package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +85 -0
  30. package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs +85 -0
  31. package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs +16 -0
  32. package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs +77 -0
  33. package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs +78 -0
  34. package/lib/cjs/graph/{loops → engine/loops}/index.cjs +2 -2
  35. package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs +28 -0
  36. package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs +20 -0
  37. package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs +34 -0
  38. package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs +191 -0
  39. package/lib/cjs/graph/{pinning → engine/pinning}/index.cjs +2 -2
  40. package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs +4 -0
  41. package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs +4 -0
  42. package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs +4 -0
  43. package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs +4 -0
  44. package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs +197 -0
  45. package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs +172 -0
  46. package/lib/cjs/graph/engine/planning/GraphTopology.cjs +57 -0
  47. package/lib/cjs/graph/{planning → engine/planning}/index.cjs +2 -2
  48. package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs +44 -0
  49. package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs +27 -0
  50. package/lib/cjs/graph/{registry → engine/registry}/index.cjs +2 -2
  51. package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
  52. package/lib/cjs/graph/{snapshots → engine/snapshots}/index.cjs +2 -2
  53. package/lib/cjs/graph/engine/store/GraphCachedValue.cjs +4 -0
  54. package/lib/cjs/graph/engine/store/GraphValueKey.cjs +4 -0
  55. package/lib/cjs/graph/engine/store/GraphValueStore.cjs +76 -0
  56. package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs +4 -0
  57. package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
  58. package/lib/cjs/graph/{store → engine/store}/index.cjs +2 -2
  59. package/lib/cjs/graph/engine/types.cjs +4 -0
  60. package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs +33 -0
  61. package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs +58 -0
  62. package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs +52 -0
  63. package/lib/cjs/graph/{validation → engine/validation}/index.cjs +2 -2
  64. package/lib/cjs/graph/index.cjs +10 -60
  65. package/lib/cjs/graph/shared/constants.cjs +44 -0
  66. package/lib/cjs/graph/shared/index.cjs +38 -0
  67. package/lib/cjs/graph/{nodes → shared/nodes}/agent.cjs +2 -2
  68. package/lib/cjs/graph/shared/nodes/base.cjs +35 -0
  69. package/lib/cjs/graph/shared/nodes/category-styles.cjs +38 -0
  70. package/lib/cjs/graph/shared/nodes/flow-control.cjs +464 -0
  71. package/lib/cjs/graph/{nodes → shared/nodes}/index.cjs +2 -2
  72. package/lib/cjs/graph/shared/nodes/triggers.cjs +250 -0
  73. package/lib/cjs/graph/shared/types.cjs +4 -0
  74. package/lib/cjs/index.cjs +3 -3
  75. package/lib/esm/graph/engine/constants.js +62 -0
  76. package/lib/esm/graph/engine/decorators.js +2 -0
  77. package/lib/esm/graph/engine/errors/GraphCycleError.js +15 -0
  78. package/lib/esm/graph/engine/errors/GraphExecutionError.js +22 -0
  79. package/lib/esm/graph/engine/errors/GraphInputError.js +15 -0
  80. package/lib/esm/graph/engine/errors/GraphLoopLimitError.js +15 -0
  81. package/lib/esm/graph/engine/errors/GraphPinningError.js +15 -0
  82. package/lib/esm/graph/engine/errors/GraphPortError.js +15 -0
  83. package/lib/esm/graph/engine/errors/GraphStoreError.js +15 -0
  84. package/lib/esm/graph/engine/errors/GraphTopologyError.js +15 -0
  85. package/lib/esm/graph/engine/errors/index.js +14 -0
  86. package/lib/esm/graph/engine/events/GraphExecutionEvent.js +2 -0
  87. package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js +35 -0
  88. package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js +32 -0
  89. package/lib/esm/graph/engine/events/GraphExecutionObserver.js +2 -0
  90. package/lib/esm/graph/engine/events/index.js +10 -0
  91. package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js +18 -0
  92. package/lib/esm/graph/engine/execution/GraphExecutionContext.js +74 -0
  93. package/lib/esm/graph/engine/execution/GraphExecutionEngine.js +403 -0
  94. package/lib/esm/graph/engine/execution/GraphExecutionFrame.js +27 -0
  95. package/lib/esm/graph/engine/execution/GraphExecutionResult.js +26 -0
  96. package/lib/esm/graph/engine/execution/GraphNodeExecutor.js +2 -0
  97. package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +98 -0
  98. package/lib/esm/graph/engine/execution/index.js +13 -0
  99. package/lib/esm/graph/engine/index.js +67 -0
  100. package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js +82 -0
  101. package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +80 -0
  102. package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js +80 -0
  103. package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js +11 -0
  104. package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js +72 -0
  105. package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js +73 -0
  106. package/lib/esm/graph/engine/loops/index.js +12 -0
  107. package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js +23 -0
  108. package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js +15 -0
  109. package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js +29 -0
  110. package/lib/esm/graph/engine/pinning/GraphPinningService.js +186 -0
  111. package/lib/esm/graph/engine/pinning/index.js +10 -0
  112. package/lib/esm/graph/engine/planning/GraphExecutionPlan.js +2 -0
  113. package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js +7 -0
  114. package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js +2 -0
  115. package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js +2 -0
  116. package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js +192 -0
  117. package/lib/esm/graph/engine/planning/GraphRelationResolver.js +167 -0
  118. package/lib/esm/graph/engine/planning/GraphTopology.js +52 -0
  119. package/lib/esm/graph/engine/planning/index.js +13 -0
  120. package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js +39 -0
  121. package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js +22 -0
  122. package/lib/esm/graph/engine/registry/index.js +8 -0
  123. package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js +48 -0
  124. package/lib/esm/graph/engine/snapshots/index.js +7 -0
  125. package/lib/esm/graph/engine/store/GraphCachedValue.js +2 -0
  126. package/lib/esm/graph/engine/store/GraphValueKey.js +7 -0
  127. package/lib/esm/graph/engine/store/GraphValueStore.js +71 -0
  128. package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js +2 -0
  129. package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js +64 -0
  130. package/lib/esm/graph/engine/store/index.js +11 -0
  131. package/lib/esm/graph/engine/types.js +2 -0
  132. package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js +28 -0
  133. package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js +53 -0
  134. package/lib/esm/graph/engine/validation/GraphValueValidator.js +47 -0
  135. package/lib/esm/graph/engine/validation/index.js +9 -0
  136. package/lib/esm/graph/index.js +9 -59
  137. package/lib/esm/graph/shared/constants.js +56 -0
  138. package/lib/esm/graph/shared/index.js +19 -0
  139. package/lib/esm/graph/shared/nodes/agent.js +101 -0
  140. package/lib/esm/graph/shared/nodes/base.js +30 -0
  141. package/lib/esm/graph/shared/nodes/category-styles.js +34 -0
  142. package/lib/esm/graph/shared/nodes/flow-control.js +455 -0
  143. package/lib/esm/graph/shared/nodes/index.js +18 -0
  144. package/lib/esm/graph/shared/nodes/triggers.js +241 -0
  145. package/lib/esm/graph/shared/types.js +2 -0
  146. package/lib/esm/index.js +3 -3
  147. package/lib/types/graph/engine/constants.d.cts +59 -0
  148. package/lib/types/graph/engine/constants.d.mts +59 -0
  149. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.cts +1 -1
  150. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.mts +1 -1
  151. package/lib/types/graph/engine/index.d.cts +61 -0
  152. package/lib/types/graph/engine/index.d.mts +61 -0
  153. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.cts +1 -1
  154. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.mts +1 -1
  155. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.cts +2 -1
  156. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.mts +2 -1
  157. package/lib/types/graph/{types.d.cts → engine/types.d.cts} +8 -116
  158. package/lib/types/graph/{types.d.mts → engine/types.d.mts} +8 -116
  159. package/lib/types/graph/index.d.cts +8 -53
  160. package/lib/types/graph/index.d.mts +8 -53
  161. package/lib/types/graph/shared/constants.d.cts +53 -0
  162. package/lib/types/graph/shared/constants.d.mts +53 -0
  163. package/lib/types/graph/shared/index.d.cts +18 -0
  164. package/lib/types/graph/shared/index.d.mts +18 -0
  165. package/lib/types/graph/shared/types.d.cts +121 -0
  166. package/lib/types/graph/shared/types.d.mts +121 -0
  167. package/lib/types/index.d.cts +2 -2
  168. package/lib/types/index.d.mts +2 -2
  169. package/package.json +14 -3
  170. package/lib/cjs/graph/constants.cjs +0 -94
  171. package/lib/cjs/graph/decorators.cjs +0 -4
  172. package/lib/cjs/graph/errors/GraphCycleError.cjs +0 -20
  173. package/lib/cjs/graph/errors/GraphExecutionError.cjs +0 -27
  174. package/lib/cjs/graph/errors/GraphInputError.cjs +0 -20
  175. package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +0 -20
  176. package/lib/cjs/graph/errors/GraphPinningError.cjs +0 -20
  177. package/lib/cjs/graph/errors/GraphPortError.cjs +0 -20
  178. package/lib/cjs/graph/errors/GraphStoreError.cjs +0 -20
  179. package/lib/cjs/graph/errors/GraphTopologyError.cjs +0 -20
  180. package/lib/cjs/graph/events/GraphExecutionEvent.cjs +0 -4
  181. package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +0 -40
  182. package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +0 -37
  183. package/lib/cjs/graph/events/GraphExecutionObserver.cjs +0 -4
  184. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +0 -4
  185. package/lib/cjs/graph/execution/GraphExecutionContext.cjs +0 -79
  186. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +0 -407
  187. package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +0 -32
  188. package/lib/cjs/graph/execution/GraphExecutionResult.cjs +0 -30
  189. package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +0 -4
  190. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +0 -103
  191. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +0 -87
  192. package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +0 -84
  193. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +0 -85
  194. package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +0 -16
  195. package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +0 -76
  196. package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +0 -77
  197. package/lib/cjs/graph/nodes/base.cjs +0 -35
  198. package/lib/cjs/graph/nodes/category-styles.cjs +0 -38
  199. package/lib/cjs/graph/nodes/flow-control.cjs +0 -464
  200. package/lib/cjs/graph/nodes/triggers.cjs +0 -250
  201. package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +0 -28
  202. package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +0 -20
  203. package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +0 -34
  204. package/lib/cjs/graph/pinning/GraphPinningService.cjs +0 -191
  205. package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +0 -4
  206. package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +0 -4
  207. package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +0 -4
  208. package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +0 -4
  209. package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +0 -197
  210. package/lib/cjs/graph/planning/GraphRelationResolver.cjs +0 -172
  211. package/lib/cjs/graph/planning/GraphTopology.cjs +0 -57
  212. package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +0 -44
  213. package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +0 -27
  214. package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +0 -53
  215. package/lib/cjs/graph/store/GraphCachedValue.cjs +0 -4
  216. package/lib/cjs/graph/store/GraphValueKey.cjs +0 -4
  217. package/lib/cjs/graph/store/GraphValueStore.cjs +0 -76
  218. package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +0 -4
  219. package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +0 -69
  220. package/lib/cjs/graph/types.cjs +0 -4
  221. package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +0 -33
  222. package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +0 -58
  223. package/lib/cjs/graph/validation/GraphValueValidator.cjs +0 -52
  224. package/lib/esm/graph/constants.js +0 -106
  225. package/lib/esm/graph/decorators.js +0 -2
  226. package/lib/esm/graph/errors/GraphCycleError.js +0 -15
  227. package/lib/esm/graph/errors/GraphExecutionError.js +0 -22
  228. package/lib/esm/graph/errors/GraphInputError.js +0 -15
  229. package/lib/esm/graph/errors/GraphLoopLimitError.js +0 -15
  230. package/lib/esm/graph/errors/GraphPinningError.js +0 -15
  231. package/lib/esm/graph/errors/GraphPortError.js +0 -15
  232. package/lib/esm/graph/errors/GraphStoreError.js +0 -15
  233. package/lib/esm/graph/errors/GraphTopologyError.js +0 -15
  234. package/lib/esm/graph/errors/index.js +0 -14
  235. package/lib/esm/graph/events/GraphExecutionEvent.js +0 -2
  236. package/lib/esm/graph/events/GraphExecutionEventEmitter.js +0 -35
  237. package/lib/esm/graph/events/GraphExecutionEventFactory.js +0 -32
  238. package/lib/esm/graph/events/GraphExecutionObserver.js +0 -2
  239. package/lib/esm/graph/events/index.js +0 -10
  240. package/lib/esm/graph/execution/CodeSandboxEvaluator.js +0 -18
  241. package/lib/esm/graph/execution/GraphExecutionContext.js +0 -74
  242. package/lib/esm/graph/execution/GraphExecutionEngine.js +0 -402
  243. package/lib/esm/graph/execution/GraphExecutionFrame.js +0 -27
  244. package/lib/esm/graph/execution/GraphExecutionResult.js +0 -26
  245. package/lib/esm/graph/execution/GraphNodeExecutor.js +0 -2
  246. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +0 -98
  247. package/lib/esm/graph/execution/index.js +0 -13
  248. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +0 -82
  249. package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +0 -79
  250. package/lib/esm/graph/loops/GraphConditionEvaluator.js +0 -80
  251. package/lib/esm/graph/loops/GraphLoopExecutionContext.js +0 -11
  252. package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +0 -71
  253. package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +0 -72
  254. package/lib/esm/graph/loops/index.js +0 -12
  255. package/lib/esm/graph/nodes/agent.js +0 -101
  256. package/lib/esm/graph/nodes/base.js +0 -30
  257. package/lib/esm/graph/nodes/category-styles.js +0 -34
  258. package/lib/esm/graph/nodes/flow-control.js +0 -455
  259. package/lib/esm/graph/nodes/index.js +0 -18
  260. package/lib/esm/graph/nodes/triggers.js +0 -241
  261. package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +0 -23
  262. package/lib/esm/graph/pinning/GraphPinningMetadata.js +0 -15
  263. package/lib/esm/graph/pinning/GraphPinningPolicy.js +0 -29
  264. package/lib/esm/graph/pinning/GraphPinningService.js +0 -186
  265. package/lib/esm/graph/pinning/index.js +0 -10
  266. package/lib/esm/graph/planning/GraphExecutionPlan.js +0 -2
  267. package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +0 -7
  268. package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +0 -2
  269. package/lib/esm/graph/planning/GraphExecutionPlanNode.js +0 -2
  270. package/lib/esm/graph/planning/GraphExecutionPlanner.js +0 -192
  271. package/lib/esm/graph/planning/GraphRelationResolver.js +0 -167
  272. package/lib/esm/graph/planning/GraphTopology.js +0 -52
  273. package/lib/esm/graph/planning/index.js +0 -13
  274. package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +0 -39
  275. package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +0 -22
  276. package/lib/esm/graph/registry/index.js +0 -8
  277. package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +0 -48
  278. package/lib/esm/graph/snapshots/index.js +0 -7
  279. package/lib/esm/graph/store/GraphCachedValue.js +0 -2
  280. package/lib/esm/graph/store/GraphValueKey.js +0 -7
  281. package/lib/esm/graph/store/GraphValueStore.js +0 -71
  282. package/lib/esm/graph/store/GraphValueStoreAdapter.js +0 -2
  283. package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +0 -64
  284. package/lib/esm/graph/store/index.js +0 -11
  285. package/lib/esm/graph/types.js +0 -2
  286. package/lib/esm/graph/validation/GraphDefinitionValidator.js +0 -28
  287. package/lib/esm/graph/validation/GraphPortSchemaResolver.js +0 -53
  288. package/lib/esm/graph/validation/GraphValueValidator.js +0 -47
  289. package/lib/esm/graph/validation/index.js +0 -9
  290. package/lib/types/graph/constants.d.cts +0 -101
  291. package/lib/types/graph/constants.d.mts +0 -101
  292. /package/lib/types/graph/{decorators.d.cts → engine/decorators.d.cts} +0 -0
  293. /package/lib/types/graph/{decorators.d.mts → engine/decorators.d.mts} +0 -0
  294. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.cts +0 -0
  295. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.mts +0 -0
  296. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.cts +0 -0
  297. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.mts +0 -0
  298. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.cts +0 -0
  299. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.mts +0 -0
  300. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.cts +0 -0
  301. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.mts +0 -0
  302. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.cts +0 -0
  303. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.mts +0 -0
  304. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.cts +0 -0
  305. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.mts +0 -0
  306. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.cts +0 -0
  307. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.mts +0 -0
  308. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.cts +0 -0
  309. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.mts +0 -0
  310. /package/lib/types/graph/{errors → engine/errors}/index.d.cts +0 -0
  311. /package/lib/types/graph/{errors → engine/errors}/index.d.mts +0 -0
  312. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.cts +0 -0
  313. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.mts +0 -0
  314. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.cts +0 -0
  315. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.mts +0 -0
  316. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.cts +0 -0
  317. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.mts +0 -0
  318. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.cts +0 -0
  319. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.mts +0 -0
  320. /package/lib/types/graph/{events → engine/events}/index.d.cts +0 -0
  321. /package/lib/types/graph/{events → engine/events}/index.d.mts +0 -0
  322. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.cts +0 -0
  323. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.mts +0 -0
  324. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.cts +0 -0
  325. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.mts +0 -0
  326. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.cts +0 -0
  327. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.mts +0 -0
  328. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.cts +0 -0
  329. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.mts +0 -0
  330. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.cts +0 -0
  331. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.mts +0 -0
  332. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.cts +0 -0
  333. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.mts +0 -0
  334. /package/lib/types/graph/{execution → engine/execution}/index.d.cts +0 -0
  335. /package/lib/types/graph/{execution → engine/execution}/index.d.mts +0 -0
  336. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.cts +0 -0
  337. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.mts +0 -0
  338. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.cts +0 -0
  339. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.mts +0 -0
  340. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.cts +0 -0
  341. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.mts +0 -0
  342. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.cts +0 -0
  343. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.mts +0 -0
  344. /package/lib/types/graph/{loops → engine/loops}/index.d.cts +0 -0
  345. /package/lib/types/graph/{loops → engine/loops}/index.d.mts +0 -0
  346. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.cts +0 -0
  347. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.mts +0 -0
  348. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.cts +0 -0
  349. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.mts +0 -0
  350. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.cts +0 -0
  351. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.mts +0 -0
  352. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.cts +0 -0
  353. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.mts +0 -0
  354. /package/lib/types/graph/{pinning → engine/pinning}/index.d.cts +0 -0
  355. /package/lib/types/graph/{pinning → engine/pinning}/index.d.mts +0 -0
  356. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.cts +0 -0
  357. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.mts +0 -0
  358. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.cts +0 -0
  359. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.mts +0 -0
  360. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.cts +0 -0
  361. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.mts +0 -0
  362. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.cts +0 -0
  363. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.mts +0 -0
  364. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.cts +0 -0
  365. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.mts +0 -0
  366. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.cts +0 -0
  367. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.mts +0 -0
  368. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.cts +0 -0
  369. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.mts +0 -0
  370. /package/lib/types/graph/{planning → engine/planning}/index.d.cts +0 -0
  371. /package/lib/types/graph/{planning → engine/planning}/index.d.mts +0 -0
  372. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.cts +0 -0
  373. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.mts +0 -0
  374. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.cts +0 -0
  375. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.mts +0 -0
  376. /package/lib/types/graph/{registry → engine/registry}/index.d.cts +0 -0
  377. /package/lib/types/graph/{registry → engine/registry}/index.d.mts +0 -0
  378. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.cts +0 -0
  379. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.mts +0 -0
  380. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.cts +0 -0
  381. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.mts +0 -0
  382. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.cts +0 -0
  383. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.mts +0 -0
  384. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.cts +0 -0
  385. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.mts +0 -0
  386. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.cts +0 -0
  387. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.mts +0 -0
  388. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.cts +0 -0
  389. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.mts +0 -0
  390. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.cts +0 -0
  391. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.mts +0 -0
  392. /package/lib/types/graph/{store → engine/store}/index.d.cts +0 -0
  393. /package/lib/types/graph/{store → engine/store}/index.d.mts +0 -0
  394. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.cts +0 -0
  395. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.mts +0 -0
  396. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.cts +0 -0
  397. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.mts +0 -0
  398. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.cts +0 -0
  399. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.mts +0 -0
  400. /package/lib/types/graph/{validation → engine/validation}/index.d.cts +0 -0
  401. /package/lib/types/graph/{validation → engine/validation}/index.d.mts +0 -0
  402. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.cts +0 -0
  403. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.mts +0 -0
  404. /package/lib/types/graph/{nodes → shared/nodes}/base.d.cts +0 -0
  405. /package/lib/types/graph/{nodes → shared/nodes}/base.d.mts +0 -0
  406. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.cts +0 -0
  407. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.mts +0 -0
  408. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.cts +0 -0
  409. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.mts +0 -0
  410. /package/lib/types/graph/{nodes → shared/nodes}/index.d.cts +0 -0
  411. /package/lib/types/graph/{nodes → shared/nodes}/index.d.mts +0 -0
  412. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.cts +0 -0
  413. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.mts +0 -0
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphPinningDependencyResolver = void 0;
4
+ const GraphTopology_js_1 = require("./../planning/GraphTopology.cjs");
5
+ /**
6
+ * Resolves the upstream dependency subtree of a node for pinning operations.
7
+ */
8
+ class GraphPinningDependencyResolver {
9
+ /**
10
+ * Returns the set of upstream node ids that the given node depends on,
11
+ * excluding the workflow boundary.
12
+ */
13
+ getDependencies(plan, nodeId) {
14
+ return GraphTopology_js_1.GraphTopology.upstreamNodes(nodeId, plan.incomingByNode, false);
15
+ }
16
+ /**
17
+ * Returns the full set of node ids to pin: the node itself plus all its
18
+ * upstream dependencies.
19
+ */
20
+ getPinSet(plan, nodeId) {
21
+ const deps = this.getDependencies(plan, nodeId);
22
+ deps.add(nodeId);
23
+ return deps;
24
+ }
25
+ }
26
+ exports.GraphPinningDependencyResolver = GraphPinningDependencyResolver;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL2VuZ2luZS9waW5uaW5nL0dyYXBoUGlubmluZ0RlcGVuZGVuY3lSZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsYUFBYSxFQUFFLHVDQUFrQztBQUUxRDs7R0FFRztBQUNILE1BQU0sT0FBTyw4QkFBOEI7SUFDekM7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLElBQXdCLEVBQUUsTUFBYztRQUN0RCxPQUFPLGFBQWEsQ0FBQyxhQUFhLENBQ2hDLE1BQU0sRUFDTixJQUFJLENBQUMsY0FBYyxFQUNuQixLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsSUFBd0IsRUFBRSxNQUFjO1FBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3Bpbm5pbmcvR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyXG4gKiBAc3VtbWFyeSBSZXNvbHZlcyB1cHN0cmVhbSBkZXBlbmRlbmN5IHN1YnRyZWVzIGZvciBwaW5uaW5nLlxuICogQGRlc2NyaXB0aW9uIFdoZW4gYSBub2RlIGlzIHBpbm5lZCwgYWxsIHVwc3RyZWFtIG5vZGVzIGl0IGRlcGVuZHMgb24gbXVzdCBhbHNvIGJlIHBpbm5lZC4gVGhpcyByZXNvbHZlciBjb21wdXRlcyB0aGUgZGVwZW5kZW5jeSBzZXQuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuIH0gZnJvbSBcIi4uL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhblwiO1xuaW1wb3J0IHsgR3JhcGhUb3BvbG9neSB9IGZyb20gXCIuLi9wbGFubmluZy9HcmFwaFRvcG9sb2d5XCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHVwc3RyZWFtIGRlcGVuZGVuY3kgc3VidHJlZSBvZiBhIG5vZGUgZm9yIHBpbm5pbmcgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoUGlubmluZ0RlcGVuZGVuY3lSZXNvbHZlciB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgdXBzdHJlYW0gbm9kZSBpZHMgdGhhdCB0aGUgZ2l2ZW4gbm9kZSBkZXBlbmRzIG9uLFxuICAgKiBleGNsdWRpbmcgdGhlIHdvcmtmbG93IGJvdW5kYXJ5LlxuICAgKi9cbiAgZ2V0RGVwZW5kZW5jaWVzKHBsYW46IEdyYXBoRXhlY3V0aW9uUGxhbiwgbm9kZUlkOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIEdyYXBoVG9wb2xvZ3kudXBzdHJlYW1Ob2RlcyhcbiAgICAgIG5vZGVJZCxcbiAgICAgIHBsYW4uaW5jb21pbmdCeU5vZGUsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZnVsbCBzZXQgb2Ygbm9kZSBpZHMgdG8gcGluOiB0aGUgbm9kZSBpdHNlbGYgcGx1cyBhbGwgaXRzXG4gICAqIHVwc3RyZWFtIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIGdldFBpblNldChwbGFuOiBHcmFwaEV4ZWN1dGlvblBsYW4sIG5vZGVJZDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IGRlcHMgPSB0aGlzLmdldERlcGVuZGVuY2llcyhwbGFuLCBub2RlSWQpO1xuICAgIGRlcHMuYWRkKG5vZGVJZCk7XG4gICAgcmV0dXJuIGRlcHM7XG4gIH1cbn1cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUErRDtBQUMvRDs7R0FFRztBQUNILE1BQWEsOEJBQThCO0lBQ3ZDOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTTtRQUN4QixPQUFPLGdDQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU07UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFqQkQsd0VBaUJDO0FBQ0QsMDFFQUEwMUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaFRvcG9sb2d5IH0gZnJvbSBcIi4vLi4vcGxhbm5pbmcvR3JhcGhUb3BvbG9neS5qc1wiO1xuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jeSBzdWJ0cmVlIG9mIGEgbm9kZSBmb3IgcGlubmluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgdXBzdHJlYW0gbm9kZSBpZHMgdGhhdCB0aGUgZ2l2ZW4gbm9kZSBkZXBlbmRzIG9uLFxuICAgICAqIGV4Y2x1ZGluZyB0aGUgd29ya2Zsb3cgYm91bmRhcnkuXG4gICAgICovXG4gICAgZ2V0RGVwZW5kZW5jaWVzKHBsYW4sIG5vZGVJZCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUb3BvbG9neS51cHN0cmVhbU5vZGVzKG5vZGVJZCwgcGxhbi5pbmNvbWluZ0J5Tm9kZSwgZmFsc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBub2RlIGlkcyB0byBwaW46IHRoZSBub2RlIGl0c2VsZiBwbHVzIGFsbCBpdHNcbiAgICAgKiB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgZ2V0UGluU2V0KHBsYW4sIG5vZGVJZCkge1xuICAgICAgICBjb25zdCBkZXBzID0gdGhpcy5nZXREZXBlbmRlbmNpZXMocGxhbiwgbm9kZUlkKTtcbiAgICAgICAgZGVwcy5hZGQobm9kZUlkKTtcbiAgICAgICAgcmV0dXJuIGRlcHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaFFhVzV1YVc1blJHVndaVzVrWlc1amVWSmxjMjlzZG1WeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZMaTR2TGk0dkxpNHZjM0pqTDJkeVlYQm9MMlZ1WjJsdVpTOXdhVzV1YVc1bkwwZHlZWEJvVUdsdWJtbHVaMFJsY0dWdVpHVnVZM2xTWlhOdmJIWmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGTlFTeFBRVUZQTEVWQlFVVXNZVUZCWVN4RlFVRkZMSFZEUVVGclF6dEJRVVV4UkRzN1IwRkZSenRCUVVOSUxFMUJRVTBzVDBGQlR5dzRRa0ZCT0VJN1NVRkRla003T3p0UFFVZEhPMGxCUTBnc1pVRkJaU3hEUVVGRExFbEJRWGRDTEVWQlFVVXNUVUZCWXp0UlFVTjBSQ3hQUVVGUExHRkJRV0VzUTBGQlF5eGhRVUZoTEVOQlEyaERMRTFCUVUwc1JVRkRUaXhKUVVGSkxFTkJRVU1zWTBGQll5eEZRVU51UWl4TFFVRkxMRU5CUTA0c1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJEczdPMDlCUjBjN1NVRkRTQ3hUUVVGVExFTkJRVU1zU1VGQmQwSXNSVUZCUlN4TlFVRmpPMUZCUTJoRUxFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEyaEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEYWtJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBOQlEwWWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJ0YjJSMWJHVWdhVzUwWldkeVlYUnBiMjV6TDJkeVlYQm9MM0JwYm01cGJtY3ZSM0poY0doUWFXNXVhVzVuUkdWd1pXNWtaVzVqZVZKbGMyOXNkbVZ5WEc0Z0tpQkFjM1Z0YldGeWVTQlNaWE52YkhabGN5QjFjSE4wY21WaGJTQmtaWEJsYm1SbGJtTjVJSE4xWW5SeVpXVnpJR1p2Y2lCd2FXNXVhVzVuTGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZkb1pXNGdZU0J1YjJSbElHbHpJSEJwYm01bFpDd2dZV3hzSUhWd2MzUnlaV0Z0SUc1dlpHVnpJR2wwSUdSbGNHVnVaSE1nYjI0Z2JYVnpkQ0JoYkhOdklHSmxJSEJwYm01bFpDNGdWR2hwY3lCeVpYTnZiSFpsY2lCamIyMXdkWFJsY3lCMGFHVWdaR1Z3Wlc1a1pXNWplU0J6WlhRdVhHNGdLaTljYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVJSDBnWm5KdmJTQmNJaTR1TDNCc1lXNXVhVzVuTDBkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYmx3aU8xeHVhVzF3YjNKMElIc2dSM0poY0doVWIzQnZiRzluZVNCOUlHWnliMjBnWENJdUxpOXdiR0Z1Ym1sdVp5OUhjbUZ3YUZSdmNHOXNiMmQ1WENJN1hHNWNiaThxS2x4dUlDb2dVbVZ6YjJ4MlpYTWdkR2hsSUhWd2MzUnlaV0Z0SUdSbGNHVnVaR1Z1WTNrZ2MzVmlkSEpsWlNCdlppQmhJRzV2WkdVZ1ptOXlJSEJwYm01cGJtY2diM0JsY21GMGFXOXVjeTVjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUVkeVlYQm9VR2x1Ym1sdVowUmxjR1Z1WkdWdVkzbFNaWE52YkhabGNpQjdYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUhSb1pTQnpaWFFnYjJZZ2RYQnpkSEpsWVcwZ2JtOWtaU0JwWkhNZ2RHaGhkQ0IwYUdVZ1oybDJaVzRnYm05a1pTQmtaWEJsYm1SeklHOXVMRnh1SUNBZ0tpQmxlR05zZFdScGJtY2dkR2hsSUhkdmNtdG1iRzkzSUdKdmRXNWtZWEo1TGx4dUlDQWdLaTljYmlBZ1oyVjBSR1Z3Wlc1a1pXNWphV1Z6S0hCc1lXNDZJRWR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiaXdnYm05a1pVbGtPaUJ6ZEhKcGJtY3BPaUJUWlhROGMzUnlhVzVuUGlCN1hHNGdJQ0FnY21WMGRYSnVJRWR5WVhCb1ZHOXdiMnh2WjNrdWRYQnpkSEpsWVcxT2IyUmxjeWhjYmlBZ0lDQWdJRzV2WkdWSlpDeGNiaUFnSUNBZ0lIQnNZVzR1YVc1amIyMXBibWRDZVU1dlpHVXNYRzRnSUNBZ0lDQm1ZV3h6WlZ4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1Y3lCMGFHVWdablZzYkNCelpYUWdiMllnYm05a1pTQnBaSE1nZEc4Z2NHbHVPaUIwYUdVZ2JtOWtaU0JwZEhObGJHWWdjR3gxY3lCaGJHd2dhWFJ6WEc0Z0lDQXFJSFZ3YzNSeVpXRnRJR1JsY0dWdVpHVnVZMmxsY3k1Y2JpQWdJQ292WEc0Z0lHZGxkRkJwYmxObGRDaHdiR0Z1T2lCSGNtRndhRVY0WldOMWRHbHZibEJzWVc0c0lHNXZaR1ZKWkRvZ2MzUnlhVzVuS1RvZ1UyVjBQSE4wY21sdVp6NGdlMXh1SUNBZ0lHTnZibk4wSUdSbGNITWdQU0IwYUdsekxtZGxkRVJsY0dWdVpHVnVZMmxsY3lod2JHRnVMQ0J1YjJSbFNXUXBPMXh1SUNBZ0lHUmxjSE11WVdSa0tHNXZaR1ZKWkNrN1hHNGdJQ0FnY21WMGRYSnVJR1JsY0hNN1hHNGdJSDFjYm4xY2JpSmRmUT09Il19
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PINNING_METADATA = void 0;
4
+ exports.isPinnable = isPinnable;
5
+ /**
6
+ * Default pinning metadata applied when `@pinnable()` is used without options.
7
+ */
8
+ exports.DEFAULT_PINNING_METADATA = {
9
+ enabled: true,
10
+ strategy: "manual",
11
+ includeDependencies: true,
12
+ };
13
+ /**
14
+ * Returns `true` when the given metadata allows pinning.
15
+ */
16
+ function isPinnable(metadata) {
17
+ return metadata?.enabled === true && metadata.strategy !== "disabled";
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL3Bpbm5pbmcvR3JhcGhQaW5uaW5nTWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0E7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBeUI7SUFDNUQsT0FBTyxFQUFFLElBQUk7SUFDYixRQUFRLEVBQUUsUUFBUTtJQUNsQixtQkFBbUIsRUFBRSxJQUFJO0NBQzFCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBMEM7SUFDbkUsT0FBTyxRQUFRLEVBQUUsT0FBTyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9waW5uaW5nL0dyYXBoUGlubmluZ01ldGFkYXRhXG4gKiBAc3VtbWFyeSBQaW5uaW5nIG1ldGFkYXRhIGRlZmF1bHRzIGFuZCBoZWxwZXJzLlxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGRlZmF1bHQgcGlubmluZyBtZXRhZGF0YSB2YWx1ZXMgYW5kIGEgaGVscGVyIHRvIGNoZWNrIHBpbm5hYmlsaXR5LiBUaGUgYEdyYXBoUGlubmluZ01ldGFkYXRhYCB0eXBlIGl0c2VsZiBpcyBkZWZpbmVkIGluIGAuLi90eXBlc2AgYW5kIHJlLWV4cG9ydGVkIGZyb20gdGhlIHBhY2thZ2Ugcm9vdC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaFBpbm5pbmdNZXRhZGF0YSB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIERlZmF1bHQgcGlubmluZyBtZXRhZGF0YSBhcHBsaWVkIHdoZW4gYEBwaW5uYWJsZSgpYCBpcyB1c2VkIHdpdGhvdXQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUElOTklOR19NRVRBREFUQTogR3JhcGhQaW5uaW5nTWV0YWRhdGEgPSB7XG4gIGVuYWJsZWQ6IHRydWUsXG4gIHN0cmF0ZWd5OiBcIm1hbnVhbFwiLFxuICBpbmNsdWRlRGVwZW5kZW5jaWVzOiB0cnVlLFxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBnaXZlbiBtZXRhZGF0YSBhbGxvd3MgcGlubmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGlubmFibGUobWV0YWRhdGE6IEdyYXBoUGlubmluZ01ldGFkYXRhIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBtZXRhZGF0YT8uZW5hYmxlZCA9PT0gdHJ1ZSAmJiBtZXRhZGF0YS5zdHJhdGVneSAhPT0gXCJkaXNhYmxlZFwiO1xufVxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHcmFwaFBpbm5pbmdNZXRhZGF0YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSxnQ0FFQztBQWJEOztHQUVHO0FBQ1UsUUFBQSx3QkFBd0IsR0FBRztJQUNwQyxPQUFPLEVBQUUsSUFBSTtJQUNiLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLG1CQUFtQixFQUFFLElBQUk7Q0FDNUIsQ0FBQztBQUNGOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLFFBQVE7SUFDL0IsT0FBTyxRQUFRLEVBQUUsT0FBTyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztBQUMxRSxDQUFDO0FBQ0Qsa3REQUFrdEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmF1bHQgcGlubmluZyBtZXRhZGF0YSBhcHBsaWVkIHdoZW4gYEBwaW5uYWJsZSgpYCBpcyB1c2VkIHdpdGhvdXQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUElOTklOR19NRVRBREFUQSA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHN0cmF0ZWd5OiBcIm1hbnVhbFwiLFxuICAgIGluY2x1ZGVEZXBlbmRlbmNpZXM6IHRydWUsXG59O1xuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBnaXZlbiBtZXRhZGF0YSBhbGxvd3MgcGlubmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGlubmFibGUobWV0YWRhdGEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGE/LmVuYWJsZWQgPT09IHRydWUgJiYgbWV0YWRhdGEuc3RyYXRlZ3kgIT09IFwiZGlzYWJsZWRcIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hRYVc1dWFXNW5UV1YwWVdSaGRHRXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk4dUxpOHVMaTl6Y21NdlozSmhjR2d2Wlc1bmFXNWxMM0JwYm01cGJtY3ZSM0poY0doUWFXNXVhVzVuVFdWMFlXUmhkR0V1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlQwRTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeDNRa0ZCZDBJc1IwRkJlVUk3U1VGRE5VUXNUMEZCVHl4RlFVRkZMRWxCUVVrN1NVRkRZaXhSUVVGUkxFVkJRVVVzVVVGQlVUdEpRVU5zUWl4dFFrRkJiVUlzUlVGQlJTeEpRVUZKTzBOQlF6RkNMRU5CUVVNN1FVRkZSanM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4VlFVRlZMRU5CUVVNc1VVRkJNRU03U1VGRGJrVXNUMEZCVHl4UlFVRlJMRVZCUVVVc1QwRkJUeXhMUVVGTExFbEJRVWtzU1VGQlNTeFJRVUZSTEVOQlFVTXNVVUZCVVN4TFFVRkxMRlZCUVZVc1EwRkJRenRCUVVONFJTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OW5jbUZ3YUM5d2FXNXVhVzVuTDBkeVlYQm9VR2x1Ym1sdVowMWxkR0ZrWVhSaFhHNGdLaUJBYzNWdGJXRnllU0JRYVc1dWFXNW5JRzFsZEdGa1lYUmhJR1JsWm1GMWJIUnpJR0Z1WkNCb1pXeHdaWEp6TGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZCeWIzWnBaR1Z6SUdSbFptRjFiSFFnY0dsdWJtbHVaeUJ0WlhSaFpHRjBZU0IyWVd4MVpYTWdZVzVrSUdFZ2FHVnNjR1Z5SUhSdklHTm9aV05ySUhCcGJtNWhZbWxzYVhSNUxpQlVhR1VnWUVkeVlYQm9VR2x1Ym1sdVowMWxkR0ZrWVhSaFlDQjBlWEJsSUdsMGMyVnNaaUJwY3lCa1pXWnBibVZrSUdsdUlHQXVMaTkwZVhCbGMyQWdZVzVrSUhKbExXVjRjRzl5ZEdWa0lHWnliMjBnZEdobElIQmhZMnRoWjJVZ2NtOXZkQzVjYmlBcUwxeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRkJwYm01cGJtZE5aWFJoWkdGMFlTQjlJR1p5YjIwZ1hDSXVMaTkwZVhCbGMxd2lPMXh1WEc0dktpcGNiaUFxSUVSbFptRjFiSFFnY0dsdWJtbHVaeUJ0WlhSaFpHRjBZU0JoY0hCc2FXVmtJSGRvWlc0Z1lFQndhVzV1WVdKc1pTZ3BZQ0JwY3lCMWMyVmtJSGRwZEdodmRYUWdiM0IwYVc5dWN5NWNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJRVJGUmtGVlRGUmZVRWxPVGtsT1IxOU5SVlJCUkVGVVFUb2dSM0poY0doUWFXNXVhVzVuVFdWMFlXUmhkR0VnUFNCN1hHNGdJR1Z1WVdKc1pXUTZJSFJ5ZFdVc1hHNGdJSE4wY21GMFpXZDVPaUJjSW0xaGJuVmhiRndpTEZ4dUlDQnBibU5zZFdSbFJHVndaVzVrWlc1amFXVnpPaUIwY25WbExGeHVmVHRjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUdCMGNuVmxZQ0IzYUdWdUlIUm9aU0JuYVhabGJpQnRaWFJoWkdGMFlTQmhiR3h2ZDNNZ2NHbHVibWx1Wnk1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x6VUdsdWJtRmliR1VvYldWMFlXUmhkR0U2SUVkeVlYQm9VR2x1Ym1sdVowMWxkR0ZrWVhSaElId2dkVzVrWldacGJtVmtLVG9nWW05dmJHVmhiaUI3WEc0Z0lISmxkSFZ5YmlCdFpYUmhaR0YwWVQ4dVpXNWhZbXhsWkNBOVBUMGdkSEoxWlNBbUppQnRaWFJoWkdGMFlTNXpkSEpoZEdWbmVTQWhQVDBnWENKa2FYTmhZbXhsWkZ3aU8xeHVmVnh1SWwxOSJdfQ==
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphPinningPolicy = void 0;
4
+ const GraphPinningMetadata_js_1 = require("./GraphPinningMetadata.cjs");
5
+ /**
6
+ * Policy that decides pinning behaviour for a plan node.
7
+ */
8
+ class GraphPinningPolicy {
9
+ /** Returns whether the node is allowed to be pinned. */
10
+ canPin(node) {
11
+ return (0, GraphPinningMetadata_js_1.isPinnable)(this.getPinningMetadata(node));
12
+ }
13
+ /** Returns whether the engine should attempt to use a pinned value for the node. */
14
+ shouldUsePinnedValue(node) {
15
+ const metadata = this.getPinningMetadata(node);
16
+ return metadata.enabled === true && metadata.strategy !== "disabled";
17
+ }
18
+ /** Returns whether automatic pinning should occur after execution. */
19
+ shouldAutoPin(node) {
20
+ const metadata = this.getPinningMetadata(node);
21
+ return metadata.enabled === true && metadata.strategy === "automatic";
22
+ }
23
+ /** Extracts pinning metadata from a plan node. */
24
+ getPinningMetadata(node) {
25
+ const raw = node.definition?.graph?.metadata?.pinnable ??
26
+ node.metadata?.pinnable;
27
+ return raw
28
+ ? { ...GraphPinningMetadata_js_1.DEFAULT_PINNING_METADATA, ...raw }
29
+ : { ...GraphPinningMetadata_js_1.DEFAULT_PINNING_METADATA, enabled: false };
30
+ }
31
+ }
32
+ exports.GraphPinningPolicy = GraphPinningPolicy;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL2VuZ2luZS9waW5uaW5nL0dyYXBoUGlubmluZ1BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLGtDQUErQjtBQUU5RTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFDN0Isd0RBQXdEO0lBQ3hELE1BQU0sQ0FBQyxJQUE0QjtRQUNqQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLG9CQUFvQixDQUFDLElBQTRCO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsYUFBYSxDQUFDLElBQTRCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsa0JBQWtCLENBQUMsSUFBNEI7UUFDN0MsTUFBTSxHQUFHLEdBQ04sSUFBSSxDQUFDLFVBQWtCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRO1lBQ2xELElBQUksQ0FBQyxRQUFnQixFQUFFLFFBQVEsQ0FBQztRQUNuQyxPQUFPLEdBQUc7WUFDUixDQUFDLENBQUMsRUFBRSxHQUFHLHdCQUF3QixFQUFFLEdBQUcsR0FBRyxFQUFFO1lBQ3pDLENBQUMsQ0FBQyxFQUFFLEdBQUcsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3RELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGlubmluZy9HcmFwaFBpbm5pbmdQb2xpY3lcbiAqIEBzdW1tYXJ5IERlY2lkZXMgd2hldGhlciBhIG5vZGUgY2FuIGJlIHBpbm5lZCBhbmQgd2hldGhlciBwaW5uZWQgdmFsdWVzIHNob3VsZCBiZSB1c2VkLlxuICogQGRlc2NyaXB0aW9uIFJlYWRzIHBpbm5pbmcgbWV0YWRhdGEgZnJvbSBwbGFuIG5vZGVzIGFuZCBlbmZvcmNlcyB0aGUgcGlubmluZyBzdHJhdGVneS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlIH0gZnJvbSBcIi4uL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbk5vZGVcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhQaW5uaW5nTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERFRkFVTFRfUElOTklOR19NRVRBREFUQSwgaXNQaW5uYWJsZSB9IGZyb20gXCIuL0dyYXBoUGlubmluZ01ldGFkYXRhXCI7XG5cbi8qKlxuICogUG9saWN5IHRoYXQgZGVjaWRlcyBwaW5uaW5nIGJlaGF2aW91ciBmb3IgYSBwbGFuIG5vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFBpbm5pbmdQb2xpY3kge1xuICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBub2RlIGlzIGFsbG93ZWQgdG8gYmUgcGlubmVkLiAqL1xuICBjYW5QaW4obm9kZTogR3JhcGhFeGVjdXRpb25QbGFuTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1Bpbm5hYmxlKHRoaXMuZ2V0UGlubmluZ01ldGFkYXRhKG5vZGUpKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGVuZ2luZSBzaG91bGQgYXR0ZW1wdCB0byB1c2UgYSBwaW5uZWQgdmFsdWUgZm9yIHRoZSBub2RlLiAqL1xuICBzaG91bGRVc2VQaW5uZWRWYWx1ZShub2RlOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmdldFBpbm5pbmdNZXRhZGF0YShub2RlKTtcbiAgICByZXR1cm4gbWV0YWRhdGEuZW5hYmxlZCA9PT0gdHJ1ZSAmJiBtZXRhZGF0YS5zdHJhdGVneSAhPT0gXCJkaXNhYmxlZFwiO1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciBhdXRvbWF0aWMgcGlubmluZyBzaG91bGQgb2NjdXIgYWZ0ZXIgZXhlY3V0aW9uLiAqL1xuICBzaG91bGRBdXRvUGluKG5vZGU6IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZ2V0UGlubmluZ01ldGFkYXRhKG5vZGUpO1xuICAgIHJldHVybiBtZXRhZGF0YS5lbmFibGVkID09PSB0cnVlICYmIG1ldGFkYXRhLnN0cmF0ZWd5ID09PSBcImF1dG9tYXRpY1wiO1xuICB9XG5cbiAgLyoqIEV4dHJhY3RzIHBpbm5pbmcgbWV0YWRhdGEgZnJvbSBhIHBsYW4gbm9kZS4gKi9cbiAgZ2V0UGlubmluZ01ldGFkYXRhKG5vZGU6IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUpOiBHcmFwaFBpbm5pbmdNZXRhZGF0YSB7XG4gICAgY29uc3QgcmF3ID1cbiAgICAgIChub2RlLmRlZmluaXRpb24gYXMgYW55KT8uZ3JhcGg/Lm1ldGFkYXRhPy5waW5uYWJsZSA/P1xuICAgICAgKG5vZGUubWV0YWRhdGEgYXMgYW55KT8ucGlubmFibGU7XG4gICAgcmV0dXJuIHJhd1xuICAgICAgPyB7IC4uLkRFRkFVTFRfUElOTklOR19NRVRBREFUQSwgLi4ucmF3IH1cbiAgICAgIDogeyAuLi5ERUZBVUxUX1BJTk5JTkdfTUVUQURBVEEsIGVuYWJsZWQ6IGZhbHNlIH07XG4gIH1cbn1cbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhQaW5uaW5nUG9saWN5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVFQUFpRjtBQUNqRjs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBQzNCLHdEQUF3RDtJQUN4RCxNQUFNLENBQUMsSUFBSTtRQUNQLE9BQU8sSUFBQSxvQ0FBVSxFQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxvRkFBb0Y7SUFDcEYsb0JBQW9CLENBQUMsSUFBSTtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQztJQUN6RSxDQUFDO0lBQ0Qsc0VBQXNFO0lBQ3RFLGFBQWEsQ0FBQyxJQUFJO1FBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE9BQU8sUUFBUSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUM7SUFDMUUsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxrQkFBa0IsQ0FBQyxJQUFJO1FBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRO1lBQ2xELElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO1FBQzVCLE9BQU8sR0FBRztZQUNOLENBQUMsQ0FBQyxFQUFFLEdBQUcsa0RBQXdCLEVBQUUsR0FBRyxHQUFHLEVBQUU7WUFDekMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxrREFBd0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDMUQsQ0FBQztDQUNKO0FBdkJELGdEQXVCQztBQUNELHNrSEFBc2tIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9QSU5OSU5HX01FVEFEQVRBLCBpc1Bpbm5hYmxlIH0gZnJvbSBcIi4vR3JhcGhQaW5uaW5nTWV0YWRhdGEuanNcIjtcbi8qKlxuICogUG9saWN5IHRoYXQgZGVjaWRlcyBwaW5uaW5nIGJlaGF2aW91ciBmb3IgYSBwbGFuIG5vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFBpbm5pbmdQb2xpY3kge1xuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG5vZGUgaXMgYWxsb3dlZCB0byBiZSBwaW5uZWQuICovXG4gICAgY2FuUGluKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGlzUGlubmFibGUodGhpcy5nZXRQaW5uaW5nTWV0YWRhdGEobm9kZSkpO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBlbmdpbmUgc2hvdWxkIGF0dGVtcHQgdG8gdXNlIGEgcGlubmVkIHZhbHVlIGZvciB0aGUgbm9kZS4gKi9cbiAgICBzaG91bGRVc2VQaW5uZWRWYWx1ZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5nZXRQaW5uaW5nTWV0YWRhdGEobm9kZSk7XG4gICAgICAgIHJldHVybiBtZXRhZGF0YS5lbmFibGVkID09PSB0cnVlICYmIG1ldGFkYXRhLnN0cmF0ZWd5ICE9PSBcImRpc2FibGVkXCI7XG4gICAgfVxuICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgYXV0b21hdGljIHBpbm5pbmcgc2hvdWxkIG9jY3VyIGFmdGVyIGV4ZWN1dGlvbi4gKi9cbiAgICBzaG91bGRBdXRvUGluKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmdldFBpbm5pbmdNZXRhZGF0YShub2RlKTtcbiAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmVuYWJsZWQgPT09IHRydWUgJiYgbWV0YWRhdGEuc3RyYXRlZ3kgPT09IFwiYXV0b21hdGljXCI7XG4gICAgfVxuICAgIC8qKiBFeHRyYWN0cyBwaW5uaW5nIG1ldGFkYXRhIGZyb20gYSBwbGFuIG5vZGUuICovXG4gICAgZ2V0UGlubmluZ01ldGFkYXRhKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gbm9kZS5kZWZpbml0aW9uPy5ncmFwaD8ubWV0YWRhdGE/LnBpbm5hYmxlID8/XG4gICAgICAgICAgICBub2RlLm1ldGFkYXRhPy5waW5uYWJsZTtcbiAgICAgICAgcmV0dXJuIHJhd1xuICAgICAgICAgICAgPyB7IC4uLkRFRkFVTFRfUElOTklOR19NRVRBREFUQSwgLi4ucmF3IH1cbiAgICAgICAgICAgIDogeyAuLi5ERUZBVUxUX1BJTk5JTkdfTUVUQURBVEEsIGVuYWJsZWQ6IGZhbHNlIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaFFhVzV1YVc1blVHOXNhV041TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZMaTR2TGk0dmMzSmpMMmR5WVhCb0wyVnVaMmx1WlM5d2FXNXVhVzVuTDBkeVlYQm9VR2x1Ym1sdVoxQnZiR2xqZVM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRlBRU3hQUVVGUExFVkJRVVVzZDBKQlFYZENMRVZCUVVVc1ZVRkJWU3hGUVVGRkxHdERRVUVyUWp0QlFVVTVSVHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNUMEZCVHl4clFrRkJhMEk3U1VGRE4wSXNkMFJCUVhkRU8wbEJRM2hFTEUxQlFVMHNRMEZCUXl4SlFVRTBRanRSUVVOcVF5eFBRVUZQTEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOdVJDeERRVUZETzBsQlJVUXNiMFpCUVc5R08wbEJRM0JHTEc5Q1FVRnZRaXhEUVVGRExFbEJRVFJDTzFGQlF5OURMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU12UXl4UFFVRlBMRkZCUVZFc1EwRkJReXhQUVVGUExFdEJRVXNzU1VGQlNTeEpRVUZKTEZGQlFWRXNRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hEUVVGRE8wbEJRM1pGTEVOQlFVTTdTVUZGUkN4elJVRkJjMFU3U1VGRGRFVXNZVUZCWVN4RFFVRkRMRWxCUVRSQ08xRkJRM2hETEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNdlF5eFBRVUZQTEZGQlFWRXNRMEZCUXl4UFFVRlBMRXRCUVVzc1NVRkJTU3hKUVVGSkxGRkJRVkVzUTBGQlF5eFJRVUZSTEV0QlFVc3NWMEZCVnl4RFFVRkRPMGxCUTNoRkxFTkJRVU03U1VGRlJDeHJSRUZCYTBRN1NVRkRiRVFzYTBKQlFXdENMRU5CUVVNc1NVRkJORUk3VVVGRE4wTXNUVUZCVFN4SFFVRkhMRWRCUTA0c1NVRkJTU3hEUVVGRExGVkJRV3RDTEVWQlFVVXNTMEZCU3l4RlFVRkZMRkZCUVZFc1JVRkJSU3hSUVVGUk8xbEJRMnhFTEVsQlFVa3NRMEZCUXl4UlFVRm5RaXhGUVVGRkxGRkJRVkVzUTBGQlF6dFJRVU51UXl4UFFVRlBMRWRCUVVjN1dVRkRVaXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEhkQ1FVRjNRaXhGUVVGRkxFZEJRVWNzUjBGQlJ5eEZRVUZGTzFsQlEzcERMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzZDBKQlFYZENMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETzBsQlEzUkVMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUUcxdlpIVnNaU0JwYm5SbFozSmhkR2x2Ym5NdlozSmhjR2d2Y0dsdWJtbHVaeTlIY21Gd2FGQnBibTVwYm1kUWIyeHBZM2xjYmlBcUlFQnpkVzF0WVhKNUlFUmxZMmxrWlhNZ2QyaGxkR2hsY2lCaElHNXZaR1VnWTJGdUlHSmxJSEJwYm01bFpDQmhibVFnZDJobGRHaGxjaUJ3YVc1dVpXUWdkbUZzZFdWeklITm9iM1ZzWkNCaVpTQjFjMlZrTGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbFlXUnpJSEJwYm01cGJtY2diV1YwWVdSaGRHRWdabkp2YlNCd2JHRnVJRzV2WkdWeklHRnVaQ0JsYm1admNtTmxjeUIwYUdVZ2NHbHVibWx1WnlCemRISmhkR1ZuZVM1Y2JpQXFMMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNU9iMlJsSUgwZ1puSnZiU0JjSWk0dUwzQnNZVzV1YVc1bkwwZHlZWEJvUlhobFkzVjBhVzl1VUd4aGJrNXZaR1ZjSWp0Y2JtbHRjRzl5ZENCMGVYQmxJSHNnUjNKaGNHaFFhVzV1YVc1blRXVjBZV1JoZEdFZ2ZTQm1jbTl0SUZ3aUxpNHZkSGx3WlhOY0lqdGNibWx0Y0c5eWRDQjdJRVJGUmtGVlRGUmZVRWxPVGtsT1IxOU5SVlJCUkVGVVFTd2dhWE5RYVc1dVlXSnNaU0I5SUdaeWIyMGdYQ0l1TDBkeVlYQm9VR2x1Ym1sdVowMWxkR0ZrWVhSaFhDSTdYRzVjYmk4cUtseHVJQ29nVUc5c2FXTjVJSFJvWVhRZ1pHVmphV1JsY3lCd2FXNXVhVzVuSUdKbGFHRjJhVzkxY2lCbWIzSWdZU0J3YkdGdUlHNXZaR1V1WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCSGNtRndhRkJwYm01cGJtZFFiMnhwWTNrZ2UxeHVJQ0F2S2lvZ1VtVjBkWEp1Y3lCM2FHVjBhR1Z5SUhSb1pTQnViMlJsSUdseklHRnNiRzkzWldRZ2RHOGdZbVVnY0dsdWJtVmtMaUFxTDF4dUlDQmpZVzVRYVc0b2JtOWtaVG9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VG05a1pTazZJR0p2YjJ4bFlXNGdlMXh1SUNBZ0lISmxkSFZ5YmlCcGMxQnBibTVoWW14bEtIUm9hWE11WjJWMFVHbHVibWx1WjAxbGRHRmtZWFJoS0c1dlpHVXBLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQlNaWFIxY201eklIZG9aWFJvWlhJZ2RHaGxJR1Z1WjJsdVpTQnphRzkxYkdRZ1lYUjBaVzF3ZENCMGJ5QjFjMlVnWVNCd2FXNXVaV1FnZG1Gc2RXVWdabTl5SUhSb1pTQnViMlJsTGlBcUwxeHVJQ0J6YUc5MWJHUlZjMlZRYVc1dVpXUldZV3gxWlNodWIyUmxPaUJIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVPYjJSbEtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ1kyOXVjM1FnYldWMFlXUmhkR0VnUFNCMGFHbHpMbWRsZEZCcGJtNXBibWROWlhSaFpHRjBZU2h1YjJSbEtUdGNiaUFnSUNCeVpYUjFjbTRnYldWMFlXUmhkR0V1Wlc1aFlteGxaQ0E5UFQwZ2RISjFaU0FtSmlCdFpYUmhaR0YwWVM1emRISmhkR1ZuZVNBaFBUMGdYQ0prYVhOaFlteGxaRndpTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRkpsZEhWeWJuTWdkMmhsZEdobGNpQmhkWFJ2YldGMGFXTWdjR2x1Ym1sdVp5QnphRzkxYkdRZ2IyTmpkWElnWVdaMFpYSWdaWGhsWTNWMGFXOXVMaUFxTDF4dUlDQnphRzkxYkdSQmRYUnZVR2x1S0c1dlpHVTZJRWR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiazV2WkdVcE9pQmliMjlzWldGdUlIdGNiaUFnSUNCamIyNXpkQ0J0WlhSaFpHRjBZU0E5SUhSb2FYTXVaMlYwVUdsdWJtbHVaMDFsZEdGa1lYUmhLRzV2WkdVcE8xeHVJQ0FnSUhKbGRIVnliaUJ0WlhSaFpHRjBZUzVsYm1GaWJHVmtJRDA5UFNCMGNuVmxJQ1ltSUcxbGRHRmtZWFJoTG5OMGNtRjBaV2Q1SUQwOVBTQmNJbUYxZEc5dFlYUnBZMXdpTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRVY0ZEhKaFkzUnpJSEJwYm01cGJtY2diV1YwWVdSaGRHRWdabkp2YlNCaElIQnNZVzRnYm05a1pTNGdLaTljYmlBZ1oyVjBVR2x1Ym1sdVowMWxkR0ZrWVhSaEtHNXZaR1U2SUVkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYms1dlpHVXBPaUJIY21Gd2FGQnBibTVwYm1kTlpYUmhaR0YwWVNCN1hHNGdJQ0FnWTI5dWMzUWdjbUYzSUQxY2JpQWdJQ0FnSUNodWIyUmxMbVJsWm1sdWFYUnBiMjRnWVhNZ1lXNTVLVDh1WjNKaGNHZy9MbTFsZEdGa1lYUmhQeTV3YVc1dVlXSnNaU0EvUDF4dUlDQWdJQ0FnS0c1dlpHVXViV1YwWVdSaGRHRWdZWE1nWVc1NUtUOHVjR2x1Ym1GaWJHVTdYRzRnSUNBZ2NtVjBkWEp1SUhKaGQxeHVJQ0FnSUNBZ1B5QjdJQzR1TGtSRlJrRlZURlJmVUVsT1RrbE9SMTlOUlZSQlJFRlVRU3dnTGk0dWNtRjNJSDFjYmlBZ0lDQWdJRG9nZXlBdUxpNUVSVVpCVlV4VVgxQkpUazVKVGtkZlRVVlVRVVJCVkVFc0lHVnVZV0pzWldRNklHWmhiSE5sSUgwN1hHNGdJSDFjYm4xY2JpSmRmUT09Il19
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphPinningService = void 0;
4
+ /**
5
+ * @module integrations/graph/pinning/GraphPinningService
6
+ * @summary Service for pinning and unpinning graph node values.
7
+ * @description Computes stable fingerprints, pins/unpins nodes and their upstream dependencies, reads pinned values, and emits pinning events. Pinning is all-or-nothing: if any upstream dependency is not pinnable, the operation fails.
8
+ */
9
+ const constants_js_1 = require("./../constants.cjs");
10
+ const GraphPinningError_js_1 = require("./../errors/GraphPinningError.cjs");
11
+ const GraphTopology_js_1 = require("./../planning/GraphTopology.cjs");
12
+ /**
13
+ * Service that manages pinning and unpinning of graph node values.
14
+ */
15
+ class GraphPinningService {
16
+ constructor(store, policy, dependencyResolver) {
17
+ this.store = store;
18
+ this.policy = policy;
19
+ this.dependencyResolver = dependencyResolver;
20
+ }
21
+ /**
22
+ * Pins a node and all its upstream dependencies.
23
+ *
24
+ * @throws {GraphPinningError} when the node or any dependency is not pinnable.
25
+ */
26
+ async pinNode(options) {
27
+ const plan = options.plan;
28
+ const includeDependencies = options.includeDependencies ?? true;
29
+ const pinSet = includeDependencies
30
+ ? this.dependencyResolver.getPinSet(plan, options.nodeId)
31
+ : new Set([options.nodeId]);
32
+ // Validate all-or-nothing
33
+ for (const nodeId of pinSet) {
34
+ const node = plan.nodes.find((n) => n.id === nodeId);
35
+ if (!node) {
36
+ throw new GraphPinningError_js_1.GraphPinningError(`Node '${nodeId}' not found in plan`);
37
+ }
38
+ if (!this.policy.canPin(node)) {
39
+ throw new GraphPinningError_js_1.GraphPinningError(`Node '${nodeId}' is not pinnable`, { nodeId });
40
+ }
41
+ }
42
+ // Pin dependencies first, then the selected node
43
+ const ordered = this.topologicalOrder(plan, pinSet);
44
+ for (const nodeId of ordered) {
45
+ const node = plan.nodes.find((n) => n.id === nodeId);
46
+ const result = options.result.nodeResults[nodeId];
47
+ if (!result || !result.outputs) {
48
+ throw new GraphPinningError_js_1.GraphPinningError(`Node '${nodeId}' has no completed output to pin`);
49
+ }
50
+ const inputs = result.inputs ?? {};
51
+ const depFingerprints = this.dependencyFingerprints(plan, nodeId, options.result);
52
+ const key = this.createValueKey(options.workflow, node, inputs, depFingerprints, options.namespace);
53
+ const now = new Date().toISOString();
54
+ const cached = {
55
+ key,
56
+ outputs: result.outputs,
57
+ pinned: true,
58
+ createdAt: now,
59
+ updatedAt: now,
60
+ metadata: { ...options.result.metadata, nodeId },
61
+ };
62
+ await this.store.writeCached(key, cached);
63
+ }
64
+ }
65
+ /**
66
+ * Unpins a single node (does not unpin dependents in v1).
67
+ */
68
+ async unpinNode(options) {
69
+ const key = {
70
+ workflowId: options.workflow.name,
71
+ nodeId: options.nodeId,
72
+ fingerprint: options.fingerprint,
73
+ namespace: options.namespace,
74
+ };
75
+ await this.store.deleteCached(key);
76
+ }
77
+ /**
78
+ * Reads a pinned value for a node, returning `undefined` when no valid
79
+ * pinned value exists.
80
+ */
81
+ async readPinnedValue(workflow, node, inputs, dependencyFingerprints, namespace) {
82
+ const key = this.createValueKey(workflow, node, inputs, dependencyFingerprints, namespace);
83
+ const cached = await this.store.readCached(key);
84
+ if (cached && cached.pinned) {
85
+ if (cached.expiresAt && new Date(cached.expiresAt) < new Date()) {
86
+ return undefined;
87
+ }
88
+ return cached;
89
+ }
90
+ return undefined;
91
+ }
92
+ /**
93
+ * Creates a stable value key for a node.
94
+ */
95
+ createValueKey(workflow, node, inputs, dependencyFingerprints, namespace) {
96
+ return {
97
+ workflowId: workflow.name,
98
+ nodeId: node.id,
99
+ fingerprint: this.computeFingerprint(workflow, node, inputs, dependencyFingerprints),
100
+ namespace,
101
+ };
102
+ }
103
+ /**
104
+ * Computes a stable fingerprint for a node's inputs and dependencies.
105
+ */
106
+ computeFingerprint(workflow, node, inputs, dependencyFingerprints) {
107
+ const data = {
108
+ workflowId: workflow.name,
109
+ nodeId: node.id,
110
+ nodeKind: node.kind,
111
+ nodeDefinitionVersion: node.definition?.graph?.metadata?.version,
112
+ inputs: this.stableSerialize(inputs),
113
+ dependencyFingerprints: this.stableSerialize(dependencyFingerprints),
114
+ };
115
+ const json = this.stableSerialize(data);
116
+ // Use a deterministic non-cryptographic hash that works in both browser
117
+ // and Node environments without requiring `node:crypto`.
118
+ return this.simpleHash(json);
119
+ }
120
+ /**
121
+ * Returns a topological ordering of the given node set.
122
+ */
123
+ topologicalOrder(plan, nodeSet) {
124
+ const result = [];
125
+ const visited = new Set();
126
+ const visit = (nodeId) => {
127
+ if (visited.has(nodeId))
128
+ return;
129
+ visited.add(nodeId);
130
+ const deps = GraphTopology_js_1.GraphTopology.upstreamNodes(nodeId, plan.incomingByNode, false);
131
+ for (const dep of deps) {
132
+ if (nodeSet.has(dep))
133
+ visit(dep);
134
+ }
135
+ result.push(nodeId);
136
+ };
137
+ for (const nodeId of nodeSet)
138
+ visit(nodeId);
139
+ return result;
140
+ }
141
+ /**
142
+ * Computes fingerprints for all upstream dependencies of a node.
143
+ */
144
+ dependencyFingerprints(plan, nodeId, result) {
145
+ const deps = this.dependencyResolver.getDependencies(plan, nodeId);
146
+ const fingerprints = {};
147
+ for (const dep of deps) {
148
+ const node = plan.nodes.find((n) => n.id === dep);
149
+ if (node) {
150
+ const depResult = result.nodeResults[dep];
151
+ const inputs = depResult?.inputs ?? {};
152
+ const nestedDeps = this.dependencyFingerprints(plan, dep, result);
153
+ fingerprints[dep] = this.computeFingerprint(plan.workflow, node, inputs, nestedDeps);
154
+ }
155
+ }
156
+ return fingerprints;
157
+ }
158
+ /**
159
+ * Serializes a value with recursively sorted keys for stable hashing.
160
+ */
161
+ stableSerialize(value) {
162
+ if (value === null || typeof value !== "object") {
163
+ return JSON.stringify(value);
164
+ }
165
+ if (Array.isArray(value)) {
166
+ return `[${value.map((v) => this.stableSerialize(v)).join(",")}]`;
167
+ }
168
+ const keys = Object.keys(value).sort();
169
+ const pairs = keys.map((k) => `${JSON.stringify(k)}:${this.stableSerialize(value[k])}`);
170
+ return `{${pairs.join(",")}}`;
171
+ }
172
+ /**
173
+ * Simple non-cryptographic hash for browser environments where
174
+ * `node:crypto` is unavailable. Produces a deterministic hex-like string
175
+ * from the input. This is NOT cryptographically secure but is sufficient
176
+ * for fingerprint-based cache keys.
177
+ */
178
+ simpleHash(str) {
179
+ let hash = 0;
180
+ for (let i = 0; i < str.length; i++) {
181
+ const char = str.charCodeAt(i);
182
+ hash = (hash << 5) - hash + char;
183
+ hash |= 0;
184
+ }
185
+ return `fp_${Math.abs(hash).toString(16).padStart(8, "0")}_${str.length}`;
186
+ }
187
+ }
188
+ exports.GraphPinningService = GraphPinningService;
189
+ void constants_js_1.GRAPH_PINNING_METADATA_KEY;
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvcGlubmluZy9HcmFwaFBpbm5pbmdTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsMEJBQXFCO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx5Q0FBb0M7QUFHaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSx1Q0FBa0M7QUFlMUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ21CLEtBQXNCLEVBQ3RCLE1BQTBCLEVBQzFCLGtCQUFrRDtRQUZsRCxVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWdDO0lBQ2xFLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUE0QjtRQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBMEIsQ0FBQztRQUNoRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFFaEUsTUFBTSxNQUFNLEdBQUcsbUJBQW1CO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3pELENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTlCLDBCQUEwQjtRQUMxQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENB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QUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3BCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBRSxLQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN6RSxDQUFDO1FBQ0YsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxVQUFVLENBQUMsR0FBVztRQUM1QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUUsQ0FBQztDQUNGO0FBRUQsS0FBSywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGlubmluZy9HcmFwaFBpbm5pbmdTZXJ2aWNlXG4gKiBAc3VtbWFyeSBTZXJ2aWNlIGZvciBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgZ3JhcGggbm9kZSB2YWx1ZXMuXG4gKiBAZGVzY3JpcHRpb24gQ29tcHV0ZXMgc3RhYmxlIGZpbmdlcnByaW50cywgcGlucy91bnBpbnMgbm9kZXMgYW5kIHRoZWlyIHVwc3RyZWFtIGRlcGVuZGVuY2llcywgcmVhZHMgcGlubmVkIHZhbHVlcywgYW5kIGVtaXRzIHBpbm5pbmcgZXZlbnRzLiBQaW5uaW5nIGlzIGFsbC1vci1ub3RoaW5nOiBpZiBhbnkgdXBzdHJlYW0gZGVwZW5kZW5jeSBpcyBub3QgcGlubmFibGUsIHRoZSBvcGVyYXRpb24gZmFpbHMuXG4gKi9cbmltcG9ydCB7IEdSQVBIX1BJTk5JTkdfTUVUQURBVEFfS0VZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhQaW5uaW5nRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoUGlubmluZ0Vycm9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbiB9IGZyb20gXCIuLi9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5cIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuTm9kZSB9IGZyb20gXCIuLi9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlXCI7XG5pbXBvcnQgeyBHcmFwaFRvcG9sb2d5IH0gZnJvbSBcIi4uL3BsYW5uaW5nL0dyYXBoVG9wb2xvZ3lcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhWYWx1ZVN0b3JlIH0gZnJvbSBcIi4uL3N0b3JlL0dyYXBoVmFsdWVTdG9yZVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaFZhbHVlS2V5IH0gZnJvbSBcIi4uL3N0b3JlL0dyYXBoVmFsdWVLZXlcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhDYWNoZWRWYWx1ZSB9IGZyb20gXCIuLi9zdG9yZS9HcmFwaENhY2hlZFZhbHVlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoRXhlY3V0aW9uUmVzdWx0LFxuICBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgR3JhcGhQaW5Ob2RlT3B0aW9ucyxcbiAgR3JhcGhVbnBpbk5vZGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHR5cGUgeyBHcmFwaFBpbm5pbmdQb2xpY3kgfSBmcm9tIFwiLi9HcmFwaFBpbm5pbmdQb2xpY3lcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyIH0gZnJvbSBcIi4vR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyXCI7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IG1hbmFnZXMgcGlubmluZyBhbmQgdW5waW5uaW5nIG9mIGdyYXBoIG5vZGUgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhQaW5uaW5nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IEdyYXBoVmFsdWVTdG9yZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvbGljeTogR3JhcGhQaW5uaW5nUG9saWN5LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kZW5jeVJlc29sdmVyOiBHcmFwaFBpbm5pbmdEZXBlbmRlbmN5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBQaW5zIGEgbm9kZSBhbmQgYWxsIGl0cyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEB0aHJvd3Mge0dyYXBoUGlubmluZ0Vycm9yfSB3aGVuIHRoZSBub2RlIG9yIGFueSBkZXBlbmRlbmN5IGlzIG5vdCBwaW5uYWJsZS5cbiAgICovXG4gIGFzeW5jIHBpbk5vZGUob3B0aW9uczogR3JhcGhQaW5Ob2RlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBsYW4gPSBvcHRpb25zLnBsYW4gYXMgR3JhcGhFeGVjdXRpb25QbGFuO1xuICAgIGNvbnN0IGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBvcHRpb25zLmluY2x1ZGVEZXBlbmRlbmNpZXMgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IHBpblNldCA9IGluY2x1ZGVEZXBlbmRlbmNpZXNcbiAgICAgID8gdGhpcy5kZXBlbmRlbmN5UmVzb2x2ZXIuZ2V0UGluU2V0KHBsYW4sIG9wdGlvbnMubm9kZUlkKVxuICAgICAgOiBuZXcgU2V0KFtvcHRpb25zLm5vZGVJZF0pO1xuXG4gICAgLy8gVmFsaWRhdGUgYWxsLW9yLW5vdGhpbmdcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBvZiBwaW5TZXQpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwbGFuLm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IG5vZGVJZCk7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEdyYXBoUGlubmluZ0Vycm9yKGBOb2RlICcke25vZGVJZH0nIG5vdCBmb3VuZCBpbiBwbGFuYCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucG9saWN5LmNhblBpbihub2RlKSkge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhQaW5uaW5nRXJyb3IoXG4gICAgICAgICAgYE5vZGUgJyR7bm9kZUlkfScgaXMgbm90IHBpbm5hYmxlYCxcbiAgICAgICAgICB7IG5vZGVJZCB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGluIGRlcGVuZGVuY2llcyBmaXJzdCwgdGhlbiB0aGUgc2VsZWN0ZWQgbm9kZVxuICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLnRvcG9sb2dpY2FsT3JkZXIocGxhbiwgcGluU2V0KTtcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBvZiBvcmRlcmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gcGxhbi5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBub2RlSWQpITtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMucmVzdWx0Lm5vZGVSZXN1bHRzW25vZGVJZF07XG4gICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm91dHB1dHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEdyYXBoUGlubmluZ0Vycm9yKFxuICAgICAgICAgIGBOb2RlICcke25vZGVJZH0nIGhhcyBubyBjb21wbGV0ZWQgb3V0cHV0IHRvIHBpbmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlucHV0cyA9IHJlc3VsdC5pbnB1dHMgPz8ge307XG4gICAgICBjb25zdCBkZXBGaW5nZXJwcmludHMgPSB0aGlzLmRlcGVuZGVuY3lGaW5nZXJwcmludHMocGxhbiwgbm9kZUlkLCBvcHRpb25zLnJlc3VsdCk7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZVZhbHVlS2V5KG9wdGlvbnMud29ya2Zsb3csIG5vZGUsIGlucHV0cywgZGVwRmluZ2VycHJpbnRzLCBvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBjYWNoZWQ6IEdyYXBoQ2FjaGVkVmFsdWUgPSB7XG4gICAgICAgIGtleSxcbiAgICAgICAgb3V0cHV0czogcmVzdWx0Lm91dHB1dHMsXG4gICAgICAgIHBpbm5lZDogdHJ1ZSxcbiAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgICBtZXRhZGF0YTogeyAuLi5vcHRpb25zLnJlc3VsdC5tZXRhZGF0YSwgbm9kZUlkIH0sXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5zdG9yZS53cml0ZUNhY2hlZChrZXksIGNhY2hlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVucGlucyBhIHNpbmdsZSBub2RlIChkb2VzIG5vdCB1bnBpbiBkZXBlbmRlbnRzIGluIHYxKS5cbiAgICovXG4gIGFzeW5jIHVucGluTm9kZShvcHRpb25zOiBHcmFwaFVucGluTm9kZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBrZXk6IEdyYXBoVmFsdWVLZXkgPSB7XG4gICAgICB3b3JrZmxvd0lkOiBvcHRpb25zLndvcmtmbG93Lm5hbWUsXG4gICAgICBub2RlSWQ6IG9wdGlvbnMubm9kZUlkLFxuICAgICAgZmluZ2VycHJpbnQ6IG9wdGlvbnMuZmluZ2VycHJpbnQsXG4gICAgICBuYW1lc3BhY2U6IG9wdGlvbnMubmFtZXNwYWNlLFxuICAgIH07XG4gICAgYXdhaXQgdGhpcy5zdG9yZS5kZWxldGVDYWNoZWQoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHBpbm5lZCB2YWx1ZSBmb3IgYSBub2RlLCByZXR1cm5pbmcgYHVuZGVmaW5lZGAgd2hlbiBubyB2YWxpZFxuICAgKiBwaW5uZWQgdmFsdWUgZXhpc3RzLlxuICAgKi9cbiAgYXN5bmMgcmVhZFBpbm5lZFZhbHVlKFxuICAgIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbixcbiAgICBub2RlOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlLFxuICAgIGlucHV0czogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgZGVwZW5kZW5jeUZpbmdlcnByaW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBuYW1lc3BhY2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxHcmFwaENhY2hlZFZhbHVlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGVWYWx1ZUtleSh3b3JrZmxvdywgbm9kZSwgaW5wdXRzLCBkZXBlbmRlbmN5RmluZ2VycHJpbnRzLCBuYW1lc3BhY2UpO1xuICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMuc3RvcmUucmVhZENhY2hlZChrZXkpO1xuICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnBpbm5lZCkge1xuICAgICAgaWYgKGNhY2hlZC5leHBpcmVzQXQgJiYgbmV3IERhdGUoY2FjaGVkLmV4cGlyZXNBdCkgPCBuZXcgRGF0ZSgpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdGFibGUgdmFsdWUga2V5IGZvciBhIG5vZGUuXG4gICAqL1xuICBjcmVhdGVWYWx1ZUtleShcbiAgICB3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb24sXG4gICAgbm9kZTogR3JhcGhFeGVjdXRpb25QbGFuTm9kZSxcbiAgICBpbnB1dHM6IEdyYXBoRXhlY3V0aW9uVmFsdWVzLFxuICAgIGRlcGVuZGVuY3lGaW5nZXJwcmludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nXG4gICk6IEdyYXBoVmFsdWVLZXkge1xuICAgIHJldHVybiB7XG4gICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgZmluZ2VycHJpbnQ6IHRoaXMuY29tcHV0ZUZpbmdlcnByaW50KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMpLFxuICAgICAgbmFtZXNwYWNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgYSBzdGFibGUgZmluZ2VycHJpbnQgZm9yIGEgbm9kZSdzIGlucHV0cyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgY29tcHV0ZUZpbmdlcnByaW50KFxuICAgIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbixcbiAgICBub2RlOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlLFxuICAgIGlucHV0czogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgZGVwZW5kZW5jeUZpbmdlcnByaW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgbm9kZUtpbmQ6IG5vZGUua2luZCxcbiAgICAgIG5vZGVEZWZpbml0aW9uVmVyc2lvbjogKG5vZGUuZGVmaW5pdGlvbiBhcyBhbnkpPy5ncmFwaD8ubWV0YWRhdGE/LnZlcnNpb24sXG4gICAgICBpbnB1dHM6IHRoaXMuc3RhYmxlU2VyaWFsaXplKGlucHV0cyksXG4gICAgICBkZXBlbmRlbmN5RmluZ2VycHJpbnRzOiB0aGlzLnN0YWJsZVNlcmlhbGl6ZShkZXBlbmRlbmN5RmluZ2VycHJpbnRzKSxcbiAgICB9O1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLnN0YWJsZVNlcmlhbGl6ZShkYXRhKTtcbiAgICAvLyBVc2UgYSBkZXRlcm1pbmlzdGljIG5vbi1jcnlwdG9ncmFwaGljIGhhc2ggdGhhdCB3b3JrcyBpbiBib3RoIGJyb3dzZXJcbiAgICAvLyBhbmQgTm9kZSBlbnZpcm9ubWVudHMgd2l0aG91dCByZXF1aXJpbmcgYG5vZGU6Y3J5cHRvYC5cbiAgICByZXR1cm4gdGhpcy5zaW1wbGVIYXNoKGpzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b3BvbG9naWNhbCBvcmRlcmluZyBvZiB0aGUgZ2l2ZW4gbm9kZSBzZXQuXG4gICAqL1xuICBwcml2YXRlIHRvcG9sb2dpY2FsT3JkZXIoXG4gICAgcGxhbjogR3JhcGhFeGVjdXRpb25QbGFuLFxuICAgIG5vZGVTZXQ6IFNldDxzdHJpbmc+XG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHZpc2l0ID0gKG5vZGVJZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmlzaXRlZC5oYXMobm9kZUlkKSkgcmV0dXJuO1xuICAgICAgdmlzaXRlZC5hZGQobm9kZUlkKTtcbiAgICAgIGNvbnN0IGRlcHMgPSBHcmFwaFRvcG9sb2d5LnVwc3RyZWFtTm9kZXMobm9kZUlkLCBwbGFuLmluY29taW5nQnlOb2RlLCBmYWxzZSk7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgICAgIGlmIChub2RlU2V0LmhhcyhkZXApKSB2aXNpdChkZXApO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2gobm9kZUlkKTtcbiAgICB9O1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIG5vZGVTZXQpIHZpc2l0KG5vZGVJZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBmaW5nZXJwcmludHMgZm9yIGFsbCB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgb2YgYSBub2RlLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXBlbmRlbmN5RmluZ2VycHJpbnRzKFxuICAgIHBsYW46IEdyYXBoRXhlY3V0aW9uUGxhbixcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICByZXN1bHQ6IEdyYXBoRXhlY3V0aW9uUmVzdWx0XG4gICk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGRlcHMgPSB0aGlzLmRlcGVuZGVuY3lSZXNvbHZlci5nZXREZXBlbmRlbmNpZXMocGxhbiwgbm9kZUlkKTtcbiAgICBjb25zdCBmaW5nZXJwcmludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgICBjb25zdCBub2RlID0gcGxhbi5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBkZXApO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgZGVwUmVzdWx0ID0gcmVzdWx0Lm5vZGVSZXN1bHRzW2RlcF07XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IGRlcFJlc3VsdD8uaW5wdXRzID8/IHt9O1xuICAgICAgICBjb25zdCBuZXN0ZWREZXBzID0gdGhpcy5kZXBlbmRlbmN5RmluZ2VycHJpbnRzKHBsYW4sIGRlcCwgcmVzdWx0KTtcbiAgICAgICAgZmluZ2VycHJpbnRzW2RlcF0gPSB0aGlzLmNvbXB1dGVGaW5nZXJwcmludChwbGFuLndvcmtmbG93LCBub2RlLCBpbnB1dHMsIG5lc3RlZERlcHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluZ2VycHJpbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSB2YWx1ZSB3aXRoIHJlY3Vyc2l2ZWx5IHNvcnRlZCBrZXlzIGZvciBzdGFibGUgaGFzaGluZy5cbiAgICovXG4gIHByaXZhdGUgc3RhYmxlU2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgWyR7dmFsdWUubWFwKCh2KSA9PiB0aGlzLnN0YWJsZVNlcmlhbGl6ZSh2KSkuam9pbihcIixcIil9XWA7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgIGNvbnN0IHBhaXJzID0ga2V5cy5tYXAoXG4gICAgICAoaykgPT4gYCR7SlNPTi5zdHJpbmdpZnkoayl9OiR7dGhpcy5zdGFibGVTZXJpYWxpemUoKHZhbHVlIGFzIGFueSlba10pfWBcbiAgICApO1xuICAgIHJldHVybiBgeyR7cGFpcnMuam9pbihcIixcIil9fWA7XG4gIH1cblxuICAvKipcbiAgICogU2ltcGxlIG5vbi1jcnlwdG9ncmFwaGljIGhhc2ggZm9yIGJyb3dzZXIgZW52aXJvbm1lbnRzIHdoZXJlXG4gICAqIGBub2RlOmNyeXB0b2AgaXMgdW5hdmFpbGFibGUuIFByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBoZXgtbGlrZSBzdHJpbmdcbiAgICogZnJvbSB0aGUgaW5wdXQuIFRoaXMgaXMgTk9UIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBidXQgaXMgc3VmZmljaWVudFxuICAgKiBmb3IgZmluZ2VycHJpbnQtYmFzZWQgY2FjaGUga2V5cy5cbiAgICovXG4gIHByaXZhdGUgc2ltcGxlSGFzaChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcbiAgICAgIGhhc2ggfD0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGBmcF8ke01hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIil9XyR7c3RyLmxlbmd0aH1gO1xuICB9XG59XG5cbnZvaWQgR1JBUEhfUElOTklOR19NRVRBREFUQV9LRVk7XG4iXX0=
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQaW5uaW5nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoUGlubmluZ1NlcnZpY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILG9EQUErRDtBQUMvRCwyRUFBcUU7QUFDckUscUVBQStEO0FBQy9EOztHQUVHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDNUIsWUFBWSxLQUFLLEVBQUUsTUFBTSxFQUFFLGtCQUFrQjtRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFDakQsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMxQixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsbUJBQW1CO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3pELENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLDBCQUEwQjtRQUMxQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDUixNQUFNLElBQUksd0NBQWlCLENBQUMs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QUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNsQyxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsR0FBRztRQUNWLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0NBQ0o7QUE1S0Qsa0RBNEtDO0FBQ0QsS0FBSyx5Q0FBMEIsQ0FBQztBQUNoQywweW1CQUEweW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9waW5uaW5nL0dyYXBoUGlubmluZ1NlcnZpY2VcbiAqIEBzdW1tYXJ5IFNlcnZpY2UgZm9yIHBpbm5pbmcgYW5kIHVucGlubmluZyBncmFwaCBub2RlIHZhbHVlcy5cbiAqIEBkZXNjcmlwdGlvbiBDb21wdXRlcyBzdGFibGUgZmluZ2VycHJpbnRzLCBwaW5zL3VucGlucyBub2RlcyBhbmQgdGhlaXIgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLCByZWFkcyBwaW5uZWQgdmFsdWVzLCBhbmQgZW1pdHMgcGlubmluZyBldmVudHMuIFBpbm5pbmcgaXMgYWxsLW9yLW5vdGhpbmc6IGlmIGFueSB1cHN0cmVhbSBkZXBlbmRlbmN5IGlzIG5vdCBwaW5uYWJsZSwgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAqL1xuaW1wb3J0IHsgR1JBUEhfUElOTklOR19NRVRBREFUQV9LRVkgfSBmcm9tIFwiLi8uLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEdyYXBoUGlubmluZ0Vycm9yIH0gZnJvbSBcIi4vLi4vZXJyb3JzL0dyYXBoUGlubmluZ0Vycm9yLmpzXCI7XG5pbXBvcnQgeyBHcmFwaFRvcG9sb2d5IH0gZnJvbSBcIi4vLi4vcGxhbm5pbmcvR3JhcGhUb3BvbG9neS5qc1wiO1xuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgbWFuYWdlcyBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgZ3JhcGggbm9kZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaFBpbm5pbmdTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihzdG9yZSwgcG9saWN5LCBkZXBlbmRlbmN5UmVzb2x2ZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgICAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5UmVzb2x2ZXIgPSBkZXBlbmRlbmN5UmVzb2x2ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBpbnMgYSBub2RlIGFuZCBhbGwgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0dyYXBoUGlubmluZ0Vycm9yfSB3aGVuIHRoZSBub2RlIG9yIGFueSBkZXBlbmRlbmN5IGlzIG5vdCBwaW5uYWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBwaW5Ob2RlKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IG9wdGlvbnMucGxhbjtcbiAgICAgICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IG9wdGlvbnMuaW5jbHVkZURlcGVuZGVuY2llcyA/PyB0cnVlO1xuICAgICAgICBjb25zdCBwaW5TZXQgPSBpbmNsdWRlRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICA/IHRoaXMuZGVwZW5kZW5jeVJlc29sdmVyLmdldFBpblNldChwbGFuLCBvcHRpb25zLm5vZGVJZClcbiAgICAgICAgICAgIDogbmV3IFNldChbb3B0aW9ucy5ub2RlSWRdKTtcbiAgICAgICAgLy8gVmFsaWRhdGUgYWxsLW9yLW5vdGhpbmdcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2YgcGluU2V0KSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcGxhbi5ub2Rlcy5maW5kKChuKSA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUGlubmluZ0Vycm9yKGBOb2RlICcke25vZGVJZH0nIG5vdCBmb3VuZCBpbiBwbGFuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9saWN5LmNhblBpbihub2RlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaFBpbm5pbmdFcnJvcihgTm9kZSAnJHtub2RlSWR9JyBpcyBub3QgcGlubmFibGVgLCB7IG5vZGVJZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBQaW4gZGVwZW5kZW5jaWVzIGZpcnN0LCB0aGVuIHRoZSBzZWxlY3RlZCBub2RlXG4gICAgICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLnRvcG9sb2dpY2FsT3JkZXIocGxhbiwgcGluU2V0KTtcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2Ygb3JkZXJlZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHBsYW4ubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gbm9kZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMucmVzdWx0Lm5vZGVSZXN1bHRzW25vZGVJZF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhQaW5uaW5nRXJyb3IoYE5vZGUgJyR7bm9kZUlkfScgaGFzIG5vIGNvbXBsZXRlZCBvdXRwdXQgdG8gcGluYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnB1dHMgPSByZXN1bHQuaW5wdXRzID8/IHt9O1xuICAgICAgICAgICAgY29uc3QgZGVwRmluZ2VycHJpbnRzID0gdGhpcy5kZXBlbmRlbmN5RmluZ2VycHJpbnRzKHBsYW4sIG5vZGVJZCwgb3B0aW9ucy5yZXN1bHQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGVWYWx1ZUtleShvcHRpb25zLndvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcEZpbmdlcnByaW50cywgb3B0aW9ucy5uYW1lc3BhY2UpO1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0ge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiByZXN1bHQub3V0cHV0cyxcbiAgICAgICAgICAgICAgICBwaW5uZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgLi4ub3B0aW9ucy5yZXN1bHQubWV0YWRhdGEsIG5vZGVJZCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmUud3JpdGVDYWNoZWQoa2V5LCBjYWNoZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVucGlucyBhIHNpbmdsZSBub2RlIChkb2VzIG5vdCB1bnBpbiBkZXBlbmRlbnRzIGluIHYxKS5cbiAgICAgKi9cbiAgICBhc3luYyB1bnBpbk5vZGUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgICB3b3JrZmxvd0lkOiBvcHRpb25zLndvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICBub2RlSWQ6IG9wdGlvbnMubm9kZUlkLFxuICAgICAgICAgICAgZmluZ2VycHJpbnQ6IG9wdGlvbnMuZmluZ2VycHJpbnQsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IG9wdGlvbnMubmFtZXNwYWNlLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JlLmRlbGV0ZUNhY2hlZChrZXkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIHBpbm5lZCB2YWx1ZSBmb3IgYSBub2RlLCByZXR1cm5pbmcgYHVuZGVmaW5lZGAgd2hlbiBubyB2YWxpZFxuICAgICAqIHBpbm5lZCB2YWx1ZSBleGlzdHMuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZFBpbm5lZFZhbHVlKHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMsIG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZVZhbHVlS2V5KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMsIG5hbWVzcGFjZSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMuc3RvcmUucmVhZENhY2hlZChrZXkpO1xuICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5waW5uZWQpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZWQuZXhwaXJlc0F0ICYmIG5ldyBEYXRlKGNhY2hlZC5leHBpcmVzQXQpIDwgbmV3IERhdGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzdGFibGUgdmFsdWUga2V5IGZvciBhIG5vZGUuXG4gICAgICovXG4gICAgY3JlYXRlVmFsdWVLZXkod29ya2Zsb3csIG5vZGUsIGlucHV0cywgZGVwZW5kZW5jeUZpbmdlcnByaW50cywgbmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgZmluZ2VycHJpbnQ6IHRoaXMuY29tcHV0ZUZpbmdlcnByaW50KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMpLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBhIHN0YWJsZSBmaW5nZXJwcmludCBmb3IgYSBub2RlJ3MgaW5wdXRzIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgY29tcHV0ZUZpbmdlcnByaW50KHdvcmtmbG93LCBub2RlLCBpbnB1dHMsIGRlcGVuZGVuY3lGaW5nZXJwcmludHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHdvcmtmbG93SWQ6IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICBub2RlS2luZDogbm9kZS5raW5kLFxuICAgICAgICAgICAgbm9kZURlZmluaXRpb25WZXJzaW9uOiBub2RlLmRlZmluaXRpb24/LmdyYXBoPy5tZXRhZGF0YT8udmVyc2lvbixcbiAgICAgICAgICAgIGlucHV0czogdGhpcy5zdGFibGVTZXJpYWxpemUoaW5wdXRzKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lGaW5nZXJwcmludHM6IHRoaXMuc3RhYmxlU2VyaWFsaXplKGRlcGVuZGVuY3lGaW5nZXJwcmludHMpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy5zdGFibGVTZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIC8vIFVzZSBhIGRldGVybWluaXN0aWMgbm9uLWNyeXB0b2dyYXBoaWMgaGFzaCB0aGF0IHdvcmtzIGluIGJvdGggYnJvd3NlclxuICAgICAgICAvLyBhbmQgTm9kZSBlbnZpcm9ubWVudHMgd2l0aG91dCByZXF1aXJpbmcgYG5vZGU6Y3J5cHRvYC5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlSGFzaChqc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRvcG9sb2dpY2FsIG9yZGVyaW5nIG9mIHRoZSBnaXZlbiBub2RlIHNldC5cbiAgICAgKi9cbiAgICB0b3BvbG9naWNhbE9yZGVyKHBsYW4sIG5vZGVTZXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHZpc2l0ID0gKG5vZGVJZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKG5vZGVJZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQobm9kZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcHMgPSBHcmFwaFRvcG9sb2d5LnVwc3RyZWFtTm9kZXMobm9kZUlkLCBwbGFuLmluY29taW5nQnlOb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVTZXQuaGFzKGRlcCkpXG4gICAgICAgICAgICAgICAgICAgIHZpc2l0KGRlcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlSWQpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGVJZCBvZiBub2RlU2V0KVxuICAgICAgICAgICAgdmlzaXQobm9kZUlkKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgZmluZ2VycHJpbnRzIGZvciBhbGwgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIGEgbm9kZS5cbiAgICAgKi9cbiAgICBkZXBlbmRlbmN5RmluZ2VycHJpbnRzKHBsYW4sIG5vZGVJZCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSB0aGlzLmRlcGVuZGVuY3lSZXNvbHZlci5nZXREZXBlbmRlbmNpZXMocGxhbiwgbm9kZUlkKTtcbiAgICAgICAgY29uc3QgZmluZ2VycHJpbnRzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwbGFuLm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IGRlcCk7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcFJlc3VsdCA9IHJlc3VsdC5ub2RlUmVzdWx0c1tkZXBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0cyA9IGRlcFJlc3VsdD8uaW5wdXRzID8/IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZERlcHMgPSB0aGlzLmRlcGVuZGVuY3lGaW5nZXJwcmludHMocGxhbiwgZGVwLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50c1tkZXBdID0gdGhpcy5jb21wdXRlRmluZ2VycHJpbnQocGxhbi53b3JrZmxvdywgbm9kZSwgaW5wdXRzLCBuZXN0ZWREZXBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluZ2VycHJpbnRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgdmFsdWUgd2l0aCByZWN1cnNpdmVseSBzb3J0ZWQga2V5cyBmb3Igc3RhYmxlIGhhc2hpbmcuXG4gICAgICovXG4gICAgc3RhYmxlU2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFske3ZhbHVlLm1hcCgodikgPT4gdGhpcy5zdGFibGVTZXJpYWxpemUodikpLmpvaW4oXCIsXCIpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgICAgICBjb25zdCBwYWlycyA9IGtleXMubWFwKChrKSA9PiBgJHtKU09OLnN0cmluZ2lmeShrKX06JHt0aGlzLnN0YWJsZVNlcmlhbGl6ZSh2YWx1ZVtrXSl9YCk7XG4gICAgICAgIHJldHVybiBgeyR7cGFpcnMuam9pbihcIixcIil9fWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBsZSBub24tY3J5cHRvZ3JhcGhpYyBoYXNoIGZvciBicm93c2VyIGVudmlyb25tZW50cyB3aGVyZVxuICAgICAqIGBub2RlOmNyeXB0b2AgaXMgdW5hdmFpbGFibGUuIFByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBoZXgtbGlrZSBzdHJpbmdcbiAgICAgKiBmcm9tIHRoZSBpbnB1dC4gVGhpcyBpcyBOT1QgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGJ1dCBpcyBzdWZmaWNpZW50XG4gICAgICogZm9yIGZpbmdlcnByaW50LWJhc2VkIGNhY2hlIGtleXMuXG4gICAgICovXG4gICAgc2ltcGxlSGFzaChzdHIpIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIGNoYXI7XG4gICAgICAgICAgICBoYXNoIHw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBmcF8ke01hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIil9XyR7c3RyLmxlbmd0aH1gO1xuICAgIH1cbn1cbnZvaWQgR1JBUEhfUElOTklOR19NRVRBREFUQV9LRVk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0doUWFXNXVhVzVuVTJWeWRtbGpaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMeTR1TDNOeVl5OW5jbUZ3YUM5bGJtZHBibVV2Y0dsdWJtbHVaeTlIY21Gd2FGQnBibTVwYm1kVFpYSjJhV05sTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJPenM3TzBkQlNVYzdRVUZEU0N4UFFVRlBMRVZCUVVVc01FSkJRVEJDTEVWQlFVVXNNRUpCUVhGQ08wRkJRekZFTEU5QlFVOHNSVUZCUlN4cFFrRkJhVUlzUlVGQlJTeDVRMEZCYjBNN1FVRkhhRVVzVDBGQlR5eEZRVUZGTEdGQlFXRXNSVUZCUlN4MVEwRkJhME03UVVGbE1VUTdPMGRCUlVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzYlVKQlFXMUNPMGxCUXpsQ0xGbEJRMjFDTEV0QlFYTkNMRVZCUTNSQ0xFMUJRVEJDTEVWQlF6RkNMR3RDUVVGclJEdFJRVVpzUkN4VlFVRkxMRWRCUVV3c1MwRkJTeXhEUVVGcFFqdFJRVU4wUWl4WFFVRk5MRWRCUVU0c1RVRkJUU3hEUVVGdlFqdFJRVU14UWl4MVFrRkJhMElzUjBGQmJFSXNhMEpCUVd0Q0xFTkJRV2RETzBsQlEyeEZMRU5CUVVNN1NVRkZTanM3T3p0UFFVbEhPMGxCUTBnc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eFBRVUUwUWp0UlFVTjRReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCTUVJc1EwRkJRenRSUVVOb1JDeE5RVUZOTEcxQ1FVRnRRaXhIUVVGSExFOUJRVThzUTBGQlF5eHRRa0ZCYlVJc1NVRkJTU3hKUVVGSkxFTkJRVU03VVVGRmFFVXNUVUZCVFN4TlFVRk5MRWRCUVVjc2JVSkJRVzFDTzFsQlEyaERMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUTNwRUxFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJUbENMREJDUVVFd1FqdFJRVU14UWl4TFFVRkxMRTFCUVUwc1RVRkJUU3hKUVVGSkxFMUJRVTBzUlVGQlJTeERRVUZETzFsQlF6VkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRM0pFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFZpeE5RVUZOTEVsQlFVa3NhVUpCUVdsQ0xFTkJRVU1zVTBGQlV5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRExFTkJRVU03V1VGRGNFVXNRMEZCUXp0WlFVTkVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRE8yZENRVU01UWl4TlFVRk5MRWxCUVVrc2FVSkJRV2xDTEVOQlEzcENMRk5CUVZNc1RVRkJUU3h0UWtGQmJVSXNSVUZEYkVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzUTBGRFdDeERRVUZETzFsQlEwb3NRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hwUkVGQmFVUTdVVUZEYWtRc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTndSQ3hMUVVGTExFMUJRVTBzVFVGQlRTeEpRVUZKTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUXpkQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFMUJRVTBzUTBGQlJTeERRVUZETzFsQlEzUkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMnhFTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUXk5Q0xFMUJRVTBzU1VGQlNTeHBRa0ZCYVVJc1EwRkRla0lzVTBGQlV5eE5RVUZOTEd0RFFVRnJReXhEUVVOc1JDeERRVUZETzFsQlEwb3NRMEZCUXp0WlFVTkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUTI1RExFMUJRVTBzWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU5zUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeGxRVUZsTEVWQlFVVXNUMEZCVHl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRM0JITEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdXVUZEY2tNc1RVRkJUU3hOUVVGTkxFZEJRWEZDTzJkQ1FVTXZRaXhIUVVGSE8yZENRVU5JTEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1QwRkJUenRuUWtGRGRrSXNUVUZCVFN4RlFVRkZMRWxCUVVrN1owSkJRMW9zVTBGQlV5eEZRVUZGTEVkQlFVYzdaMEpCUTJRc1UwRkJVeXhGUVVGRkxFZEJRVWM3WjBKQlEyUXNVVUZCVVN4RlFVRkZMRVZCUVVVc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVVN1lVRkRha1FzUTBGQlF6dFpRVU5HTEUxQlFVMHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpWRExFTkJRVU03U1VGRFNDeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTQ3hMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEU5QlFUaENPMUZCUXpWRExFMUJRVTBzUjBGQlJ5eEhRVUZyUWp0WlFVTjZRaXhWUVVGVkxFVkJRVVVzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpPMWxCUTJwRExFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNUVUZCVFR0WlFVTjBRaXhYUVVGWExFVkJRVVVzVDBGQlR5eERRVUZETEZkQlFWYzdXVUZEYUVNc1UwRkJVeXhGUVVGRkxFOUJRVThzUTBGQlF5eFRRVUZUTzFOQlF6ZENMRU5CUVVNN1VVRkRSaXhOUVVGTkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM0pETEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFNDeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVTnVRaXhSUVVGcFF5eEZRVU5xUXl4SlFVRTBRaXhGUVVNMVFpeE5RVUUwUWl4RlFVTTFRaXh6UWtGQk9FTXNSVUZET1VNc1UwRkJhMEk3VVVGRmJFSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RlFVRkZMRTFCUVUwc1JVRkJSU3h6UWtGQmMwSXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVNelJpeE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJoRUxFbEJRVWtzVFVGQlRTeEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRaUVVNMVFpeEpRVUZKTEUxQlFVMHNRMEZCUXl4VFFVRlRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFVkJRVVVzUTBGQlF6dG5Ra0ZEYUVVc1QwRkJUeXhUUVVGVExFTkJRVU03V1VGRGJrSXNRMEZCUXp0WlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8xRkJRMmhDTEVOQlFVTTdVVUZEUkN4UFFVRlBMRk5CUVZNc1EwRkJRenRKUVVOdVFpeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTQ3hqUVVGakxFTkJRMW9zVVVGQmFVTXNSVUZEYWtNc1NVRkJORUlzUlVGRE5VSXNUVUZCTkVJc1JVRkROVUlzYzBKQlFUaERMRVZCUXpsRExGTkJRV3RDTzFGQlJXeENMRTlCUVU4N1dVRkRUQ3hWUVVGVkxFVkJRVVVzVVVGQlVTeERRVUZETEVsQlFVazdXVUZEZWtJc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTzFsQlEyWXNWMEZCVnl4RlFVRkZMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeHpRa0ZCYzBJc1EwRkJRenRaUVVOd1JpeFRRVUZUTzFOQlExWXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3VDBGRlJ6dEpRVU5JTEd0Q1FVRnJRaXhEUVVOb1FpeFJRVUZwUXl4RlFVTnFReXhKUVVFMFFpeEZRVU0xUWl4TlFVRTBRaXhGUVVNMVFpeHpRa0ZCT0VNN1VVRkZPVU1zVFVGQlRTeEpRVUZKTEVkQlFVYzdXVUZEV0N4VlFVRlZMRVZCUVVVc1VVRkJVU3hEUVVGRExFbEJRVWs3V1VGRGVrSXNUVUZCVFN4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJRMllzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpPMWxCUTI1Q0xIRkNRVUZ4UWl4RlFVRkhMRWxCUVVrc1EwRkJReXhWUVVGclFpeEZRVUZGTEV0QlFVc3NSVUZCUlN4UlFVRlJMRVZCUVVVc1QwRkJUenRaUVVONlJTeE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGNFTXNjMEpCUVhOQ0xFVkJRVVVzU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4elFrRkJjMElzUTBGQlF6dFRRVU55UlN4RFFVRkRPMUZCUTBZc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVONFF5eDNSVUZCZDBVN1VVRkRlRVVzZVVSQlFYbEVPMUZCUTNwRUxFOUJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNdlFpeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTeXhuUWtGQlowSXNRMEZEZEVJc1NVRkJkMElzUlVGRGVFSXNUMEZCYjBJN1VVRkZjRUlzVFVGQlRTeE5RVUZOTEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUXpWQ0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NSMEZCUnl4RlFVRlZMRU5CUVVNN1VVRkRiRU1zVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4TlFVRmpMRVZCUVVVc1JVRkJSVHRaUVVNdlFpeEpRVUZKTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRE8yZENRVUZGTEU5QlFVODdXVUZEYUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTndRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eGhRVUZoTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUXpkRkxFdEJRVXNzVFVGQlRTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVsQlFVa3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU03YjBKQlFVVXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMjVETEVOQlFVTTdXVUZEUkN4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEzUkNMRU5CUVVNc1EwRkJRenRSUVVOR0xFdEJRVXNzVFVGQlRTeE5RVUZOTEVsQlFVa3NUMEZCVHp0WlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU0xUXl4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTeXh6UWtGQmMwSXNRMEZETlVJc1NVRkJkMElzUlVGRGVFSXNUVUZCWXl4RlFVTmtMRTFCUVRSQ08xRkJSVFZDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4bFFVRmxMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEyNUZMRTFCUVUwc1dVRkJXU3hIUVVFeVFpeEZRVUZGTEVOQlFVTTdVVUZEYUVRc1MwRkJTeXhOUVVGTkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXp0WlFVTjJRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5zUkN4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRE8yZENRVU5VTEUxQlFVMHNVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUXpGRExFMUJRVTBzVFVGQlRTeEhRVUZITEZOQlFWTXNSVUZCUlN4TlFVRk5MRWxCUVVrc1JVRkJSU3hEUVVGRE8yZENRVU4yUXl4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFZEJRVWNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkRiRVVzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1dVRkRka1lzUTBGQlF6dFJRVU5JTEVOQlFVTTdVVUZEUkN4UFFVRlBMRmxCUVZrc1EwRkJRenRKUVVOMFFpeERRVUZETzBsQlJVUTdPMDlCUlVjN1NVRkRTeXhsUVVGbExFTkJRVU1zUzBGQll6dFJRVU53UXl4SlFVRkpMRXRCUVVzc1MwRkJTeXhKUVVGSkxFbEJRVWtzVDBGQlR5eExRVUZMTEV0QlFVc3NVVUZCVVN4RlFVRkZMRU5CUVVNN1dVRkRhRVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJReTlDTEVOQlFVTTdVVUZEUkN4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0WlFVTjZRaXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNCRkxFTkJRVU03VVVGRFJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTNaRExFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUTNCQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJSU3hMUVVGaExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVTjZSU3hEUVVGRE8xRkJRMFlzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF6dEpRVU5vUXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTeXhWUVVGVkxFTkJRVU1zUjBGQlZ6dFJRVU0xUWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRFlpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRE8xbEJRM0JETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETDBJc1NVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03V1VGRGFrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOYUxFTkJRVU03VVVGRFJDeFBRVUZQTEUxQlFVMHNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03U1VGRE5VVXNRMEZCUXp0RFFVTkdPMEZCUlVRc1MwRkJTeXd3UWtGQk1FSXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1FHMXZaSFZzWlNCcGJuUmxaM0poZEdsdmJuTXZaM0poY0dndmNHbHVibWx1Wnk5SGNtRndhRkJwYm01cGJtZFRaWEoyYVdObFhHNGdLaUJBYzNWdGJXRnllU0JUWlhKMmFXTmxJR1p2Y2lCd2FXNXVhVzVuSUdGdVpDQjFibkJwYm01cGJtY2daM0poY0dnZ2JtOWtaU0IyWVd4MVpYTXVYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdRMjl0Y0hWMFpYTWdjM1JoWW14bElHWnBibWRsY25CeWFXNTBjeXdnY0dsdWN5OTFibkJwYm5NZ2JtOWtaWE1nWVc1a0lIUm9aV2x5SUhWd2MzUnlaV0Z0SUdSbGNHVnVaR1Z1WTJsbGN5d2djbVZoWkhNZ2NHbHVibVZrSUhaaGJIVmxjeXdnWVc1a0lHVnRhWFJ6SUhCcGJtNXBibWNnWlhabGJuUnpMaUJRYVc1dWFXNW5JR2x6SUdGc2JDMXZjaTF1YjNSb2FXNW5PaUJwWmlCaGJua2dkWEJ6ZEhKbFlXMGdaR1Z3Wlc1a1pXNWplU0JwY3lCdWIzUWdjR2x1Ym1GaWJHVXNJSFJvWlNCdmNHVnlZWFJwYjI0Z1ptRnBiSE11WEc0Z0tpOWNibWx0Y0c5eWRDQjdJRWRTUVZCSVgxQkpUazVKVGtkZlRVVlVRVVJCVkVGZlMwVlpJSDBnWm5KdmJTQmNJaTR1TDJOdmJuTjBZVzUwYzF3aU8xeHVhVzF3YjNKMElIc2dSM0poY0doUWFXNXVhVzVuUlhKeWIzSWdmU0JtY205dElGd2lMaTR2WlhKeWIzSnpMMGR5WVhCb1VHbHVibWx1WjBWeWNtOXlYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiaUI5SUdaeWIyMGdYQ0l1TGk5d2JHRnVibWx1Wnk5SGNtRndhRVY0WldOMWRHbHZibEJzWVc1Y0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVRtOWtaU0I5SUdaeWIyMGdYQ0l1TGk5d2JHRnVibWx1Wnk5SGNtRndhRVY0WldOMWRHbHZibEJzWVc1T2IyUmxYQ0k3WEc1cGJYQnZjblFnZXlCSGNtRndhRlJ2Y0c5c2IyZDVJSDBnWm5KdmJTQmNJaTR1TDNCc1lXNXVhVzVuTDBkeVlYQm9WRzl3YjJ4dlozbGNJanRjYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doV1lXeDFaVk4wYjNKbElIMGdabkp2YlNCY0lpNHVMM04wYjNKbEwwZHlZWEJvVm1Gc2RXVlRkRzl5WlZ3aU8xeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRlpoYkhWbFMyVjVJSDBnWm5KdmJTQmNJaTR1TDNOMGIzSmxMMGR5WVhCb1ZtRnNkV1ZMWlhsY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hEWVdOb1pXUldZV3gxWlNCOUlHWnliMjBnWENJdUxpOXpkRzl5WlM5SGNtRndhRU5oWTJobFpGWmhiSFZsWENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3WEc0Z0lFZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBMRnh1SUNCSGNtRndhRVY0WldOMWRHbHZibFpoYkhWbGN5eGNiaUFnUjNKaGNHaFFhVzVPYjJSbFQzQjBhVzl1Y3l4Y2JpQWdSM0poY0doVmJuQnBiazV2WkdWUGNIUnBiMjV6TEZ4dWZTQm1jbTl0SUZ3aUxpNHZkSGx3WlhOY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hYYjNKclpteHZkMFJsWm1sdWFYUnBiMjRnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDNWcExXUmxZMjl5WVhSdmNuTXZaM0poY0doY0lqdGNibHh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkhjbUZ3YUZCcGJtNXBibWRRYjJ4cFkza2dmU0JtY205dElGd2lMaTlIY21Gd2FGQnBibTVwYm1kUWIyeHBZM2xjSWp0Y2JtbHRjRzl5ZENCMGVYQmxJSHNnUjNKaGNHaFFhVzV1YVc1blJHVndaVzVrWlc1amVWSmxjMjlzZG1WeUlIMGdabkp2YlNCY0lpNHZSM0poY0doUWFXNXVhVzVuUkdWd1pXNWtaVzVqZVZKbGMyOXNkbVZ5WENJN1hHNWNiaThxS2x4dUlDb2dVMlZ5ZG1salpTQjBhR0YwSUcxaGJtRm5aWE1nY0dsdWJtbHVaeUJoYm1RZ2RXNXdhVzV1YVc1bklHOW1JR2R5WVhCb0lHNXZaR1VnZG1Gc2RXVnpMbHh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUjNKaGNHaFFhVzV1YVc1blUyVnlkbWxqWlNCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0Z4dUlDQWdJSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2djM1J2Y21VNklFZHlZWEJvVm1Gc2RXVlRkRzl5WlN4Y2JpQWdJQ0J3Y21sMllYUmxJSEpsWVdSdmJteDVJSEJ2YkdsamVUb2dSM0poY0doUWFXNXVhVzVuVUc5c2FXTjVMRnh1SUNBZ0lIQnlhWFpoZEdVZ2NtVmhaRzl1YkhrZ1pHVndaVzVrWlc1amVWSmxjMjlzZG1WeU9pQkhjbUZ3YUZCcGJtNXBibWRFWlhCbGJtUmxibU41VW1WemIyeDJaWEpjYmlBZ0tTQjdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlFhVzV6SUdFZ2JtOWtaU0JoYm1RZ1lXeHNJR2wwY3lCMWNITjBjbVZoYlNCa1pYQmxibVJsYm1OcFpYTXVYRzRnSUNBcVhHNGdJQ0FxSUVCMGFISnZkM01nZTBkeVlYQm9VR2x1Ym1sdVowVnljbTl5ZlNCM2FHVnVJSFJvWlNCdWIyUmxJRzl5SUdGdWVTQmtaWEJsYm1SbGJtTjVJR2x6SUc1dmRDQndhVzV1WVdKc1pTNWNiaUFnSUNvdlhHNGdJR0Z6ZVc1aklIQnBiazV2WkdVb2IzQjBhVzl1Y3pvZ1IzSmhjR2hRYVc1T2IyUmxUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThkbTlwWkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJSEJzWVc0Z1BTQnZjSFJwYjI1ekxuQnNZVzRnWVhNZ1IzSmhjR2hGZUdWamRYUnBiMjVRYkdGdU8xeHVJQ0FnSUdOdmJuTjBJR2x1WTJ4MVpHVkVaWEJsYm1SbGJtTnBaWE1nUFNCdmNIUnBiMjV6TG1sdVkyeDFaR1ZFWlhCbGJtUmxibU5wWlhNZ1B6OGdkSEoxWlR0Y2JseHVJQ0FnSUdOdmJuTjBJSEJwYmxObGRDQTlJR2x1WTJ4MVpHVkVaWEJsYm1SbGJtTnBaWE5jYmlBZ0lDQWdJRDhnZEdocGN5NWtaWEJsYm1SbGJtTjVVbVZ6YjJ4MlpYSXVaMlYwVUdsdVUyVjBLSEJzWVc0c0lHOXdkR2x2Ym5NdWJtOWtaVWxrS1Z4dUlDQWdJQ0FnT2lCdVpYY2dVMlYwS0Z0dmNIUnBiMjV6TG01dlpHVkpaRjBwTzF4dVhHNGdJQ0FnTHk4Z1ZtRnNhV1JoZEdVZ1lXeHNMVzl5TFc1dmRHaHBibWRjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJRzV2WkdWSlpDQnZaaUJ3YVc1VFpYUXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHNXZaR1VnUFNCd2JHRnVMbTV2WkdWekxtWnBibVFvS0c0cElEMCtJRzR1YVdRZ1BUMDlJRzV2WkdWSlpDazdYRzRnSUNBZ0lDQnBaaUFvSVc1dlpHVXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVkeVlYQm9VR2x1Ym1sdVowVnljbTl5S0dCT2IyUmxJQ2NrZTI1dlpHVkpaSDBuSUc1dmRDQm1iM1Z1WkNCcGJpQndiR0Z1WUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9JWFJvYVhNdWNHOXNhV041TG1OaGJsQnBiaWh1YjJSbEtTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUjNKaGNHaFFhVzV1YVc1blJYSnliM0lvWEc0Z0lDQWdJQ0FnSUNBZ1lFNXZaR1VnSnlSN2JtOWtaVWxrZlNjZ2FYTWdibTkwSUhCcGJtNWhZbXhsWUN4Y2JpQWdJQ0FnSUNBZ0lDQjdJRzV2WkdWSlpDQjlYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVUdsdUlHUmxjR1Z1WkdWdVkybGxjeUJtYVhKemRDd2dkR2hsYmlCMGFHVWdjMlZzWldOMFpXUWdibTlrWlZ4dUlDQWdJR052Ym5OMElHOXlaR1Z5WldRZ1BTQjBhR2x6TG5SdmNHOXNiMmRwWTJGc1QzSmtaWElvY0d4aGJpd2djR2x1VTJWMEtUdGNiaUFnSUNCbWIzSWdLR052Ym5OMElHNXZaR1ZKWkNCdlppQnZjbVJsY21Wa0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCdWIyUmxJRDBnY0d4aGJpNXViMlJsY3k1bWFXNWtLQ2h1S1NBOVBpQnVMbWxrSUQwOVBTQnViMlJsU1dRcElUdGNiaUFnSUNBZ0lHTnZibk4wSUhKbGMzVnNkQ0E5SUc5d2RHbHZibk11Y21WemRXeDBMbTV2WkdWU1pYTjFiSFJ6VzI1dlpHVkpaRjA3WEc0Z0lDQWdJQ0JwWmlBb0lYSmxjM1ZzZENCOGZDQWhjbVZ6ZFd4MExtOTFkSEIxZEhNcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRWR5WVhCb1VHbHVibWx1WjBWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FnSUdCT2IyUmxJQ2NrZTI1dlpHVkpaSDBuSUdoaGN5QnVieUJqYjIxd2JHVjBaV1FnYjNWMGNIVjBJSFJ2SUhCcGJtQmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR052Ym5OMElHbHVjSFYwY3lBOUlISmxjM1ZzZEM1cGJuQjFkSE1nUHo4Z2UzMDdYRzRnSUNBZ0lDQmpiMjV6ZENCa1pYQkdhVzVuWlhKd2NtbHVkSE1nUFNCMGFHbHpMbVJsY0dWdVpHVnVZM2xHYVc1blpYSndjbWx1ZEhNb2NHeGhiaXdnYm05a1pVbGtMQ0J2Y0hScGIyNXpMbkpsYzNWc2RDazdYRzRnSUNBZ0lDQmpiMjV6ZENCclpYa2dQU0IwYUdsekxtTnlaV0YwWlZaaGJIVmxTMlY1S0c5d2RHbHZibk11ZDI5eWEyWnNiM2NzSUc1dlpHVXNJR2x1Y0hWMGN5d2daR1Z3Um1sdVoyVnljSEpwYm5SekxDQnZjSFJwYjI1ekxtNWhiV1Z6Y0dGalpTazdYRzRnSUNBZ0lDQmpiMjV6ZENCdWIzY2dQU0J1WlhjZ1JHRjBaU2dwTG5SdlNWTlBVM1J5YVc1bktDazdYRzRnSUNBZ0lDQmpiMjV6ZENCallXTm9aV1E2SUVkeVlYQm9RMkZqYUdWa1ZtRnNkV1VnUFNCN1hHNGdJQ0FnSUNBZ0lHdGxlU3hjYmlBZ0lDQWdJQ0FnYjNWMGNIVjBjem9nY21WemRXeDBMbTkxZEhCMWRITXNYRzRnSUNBZ0lDQWdJSEJwYm01bFpEb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1kzSmxZWFJsWkVGME9pQnViM2NzWEc0Z0lDQWdJQ0FnSUhWd1pHRjBaV1JCZERvZ2JtOTNMRnh1SUNBZ0lDQWdJQ0J0WlhSaFpHRjBZVG9nZXlBdUxpNXZjSFJwYjI1ekxuSmxjM1ZzZEM1dFpYUmhaR0YwWVN3Z2JtOWtaVWxrSUgwc1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXpkRzl5WlM1M2NtbDBaVU5oWTJobFpDaHJaWGtzSUdOaFkyaGxaQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWdWNHbHVjeUJoSUhOcGJtZHNaU0J1YjJSbElDaGtiMlZ6SUc1dmRDQjFibkJwYmlCa1pYQmxibVJsYm5SeklHbHVJSFl4S1M1Y2JpQWdJQ292WEc0Z0lHRnplVzVqSUhWdWNHbHVUbTlrWlNodmNIUnBiMjV6T2lCSGNtRndhRlZ1Y0dsdVRtOWtaVTl3ZEdsdmJuTXBPaUJRY205dGFYTmxQSFp2YVdRK0lIdGNiaUFnSUNCamIyNXpkQ0JyWlhrNklFZHlZWEJvVm1Gc2RXVkxaWGtnUFNCN1hHNGdJQ0FnSUNCM2IzSnJabXh2ZDBsa09pQnZjSFJwYjI1ekxuZHZjbXRtYkc5M0xtNWhiV1VzWEc0Z0lDQWdJQ0J1YjJSbFNXUTZJRzl3ZEdsdmJuTXVibTlrWlVsa0xGeHVJQ0FnSUNBZ1ptbHVaMlZ5Y0hKcGJuUTZJRzl3ZEdsdmJuTXVabWx1WjJWeWNISnBiblFzWEc0Z0lDQWdJQ0J1WVcxbGMzQmhZMlU2SUc5d2RHbHZibk11Ym1GdFpYTndZV05sTEZ4dUlDQWdJSDA3WEc0Z0lDQWdZWGRoYVhRZ2RHaHBjeTV6ZEc5eVpTNWtaV3hsZEdWRFlXTm9aV1FvYTJWNUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWldGa2N5QmhJSEJwYm01bFpDQjJZV3gxWlNCbWIzSWdZU0J1YjJSbExDQnlaWFIxY201cGJtY2dZSFZ1WkdWbWFXNWxaR0FnZDJobGJpQnVieUIyWVd4cFpGeHVJQ0FnS2lCd2FXNXVaV1FnZG1Gc2RXVWdaWGhwYzNSekxseHVJQ0FnS2k5Y2JpQWdZWE41Ym1NZ2NtVmhaRkJwYm01bFpGWmhiSFZsS0Z4dUlDQWdJSGR2Y210bWJHOTNPaUJIY21Gd2FGZHZjbXRtYkc5M1JHVm1hVzVwZEdsdmJpeGNiaUFnSUNCdWIyUmxPaUJIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVPYjJSbExGeHVJQ0FnSUdsdWNIVjBjem9nUjNKaGNHaEZlR1ZqZFhScGIyNVdZV3gxWlhNc1hHNGdJQ0FnWkdWd1pXNWtaVzVqZVVacGJtZGxjbkJ5YVc1MGN6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2MzUnlhVzVuUGl4Y2JpQWdJQ0J1WVcxbGMzQmhZMlUvT2lCemRISnBibWRjYmlBZ0tUb2dVSEp2YldselpUeEhjbUZ3YUVOaFkyaGxaRlpoYkhWbElId2dkVzVrWldacGJtVmtQaUI3WEc0Z0lDQWdZMjl1YzNRZ2EyVjVJRDBnZEdocGN5NWpjbVZoZEdWV1lXeDFaVXRsZVNoM2IzSnJabXh2ZHl3Z2JtOWtaU3dnYVc1d2RYUnpMQ0JrWlhCbGJtUmxibU41Um1sdVoyVnljSEpwYm5SekxDQnVZVzFsYzNCaFkyVXBPMXh1SUNBZ0lHTnZibk4wSUdOaFkyaGxaQ0E5SUdGM1lXbDBJSFJvYVhNdWMzUnZjbVV1Y21WaFpFTmhZMmhsWkNoclpYa3BPMXh1SUNBZ0lHbG1JQ2hqWVdOb1pXUWdKaVlnWTJGamFHVmtMbkJwYm01bFpDa2dlMXh1SUNBZ0lDQWdhV1lnS0dOaFkyaGxaQzVsZUhCcGNtVnpRWFFnSmlZZ2JtVjNJRVJoZEdVb1kyRmphR1ZrTG1WNGNHbHlaWE5CZENrZ1BDQnVaWGNnUkdGMFpTZ3BLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZMkZqYUdWa08xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaWE1nWVNCemRHRmliR1VnZG1Gc2RXVWdhMlY1SUdadmNpQmhJRzV2WkdVdVhHNGdJQ0FxTDF4dUlDQmpjbVZoZEdWV1lXeDFaVXRsZVNoY2JpQWdJQ0IzYjNKclpteHZkem9nUjNKaGNHaFhiM0pyWm14dmQwUmxabWx1YVhScGIyNHNYRzRnSUNBZ2JtOWtaVG9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VG05a1pTeGNiaUFnSUNCcGJuQjFkSE02SUVkeVlYQm9SWGhsWTNWMGFXOXVWbUZzZFdWekxGeHVJQ0FnSUdSbGNHVnVaR1Z1WTNsR2FXNW5aWEp3Y21sdWRITTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lITjBjbWx1Wno0c1hHNGdJQ0FnYm1GdFpYTndZV05sUHpvZ2MzUnlhVzVuWEc0Z0lDazZJRWR5WVhCb1ZtRnNkV1ZMWlhrZ2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0IzYjNKclpteHZkMGxrT2lCM2IzSnJabXh2ZHk1dVlXMWxMRnh1SUNBZ0lDQWdibTlrWlVsa09pQnViMlJsTG1sa0xGeHVJQ0FnSUNBZ1ptbHVaMlZ5Y0hKcGJuUTZJSFJvYVhNdVkyOXRjSFYwWlVacGJtZGxjbkJ5YVc1MEtIZHZjbXRtYkc5M0xDQnViMlJsTENCcGJuQjFkSE1zSUdSbGNHVnVaR1Z1WTNsR2FXNW5aWEp3Y21sdWRITXBMRnh1SUNBZ0lDQWdibUZ0WlhOd1lXTmxMRnh1SUNBZ0lIMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dGNIVjBaWE1nWVNCemRHRmliR1VnWm1sdVoyVnljSEpwYm5RZ1ptOXlJR0VnYm05a1pTZHpJR2x1Y0hWMGN5QmhibVFnWkdWd1pXNWtaVzVqYVdWekxseHVJQ0FnS2k5Y2JpQWdZMjl0Y0hWMFpVWnBibWRsY25CeWFXNTBLRnh1SUNBZ0lIZHZjbXRtYkc5M09pQkhjbUZ3YUZkdmNtdG1iRzkzUkdWbWFXNXBkR2x2Yml4Y2JpQWdJQ0J1YjJSbE9pQkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNU9iMlJsTEZ4dUlDQWdJR2x1Y0hWMGN6b2dSM0poY0doRmVHVmpkWFJwYjI1V1lXeDFaWE1zWEc0Z0lDQWdaR1Z3Wlc1a1pXNWplVVpwYm1kbGNuQnlhVzUwY3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnYzNSeWFXNW5QbHh1SUNBcE9pQnpkSEpwYm1jZ2UxeHVJQ0FnSUdOdmJuTjBJR1JoZEdFZ1BTQjdYRzRnSUNBZ0lDQjNiM0pyWm14dmQwbGtPaUIzYjNKclpteHZkeTV1WVcxbExGeHVJQ0FnSUNBZ2JtOWtaVWxrT2lCdWIyUmxMbWxrTEZ4dUlDQWdJQ0FnYm05a1pVdHBibVE2SUc1dlpHVXVhMmx1WkN4Y2JpQWdJQ0FnSUc1dlpHVkVaV1pwYm1sMGFXOXVWbVZ5YzJsdmJqb2dLRzV2WkdVdVpHVm1hVzVwZEdsdmJpQmhjeUJoYm5rcFB5NW5jbUZ3YUQ4dWJXVjBZV1JoZEdFL0xuWmxjbk5wYjI0c1hHNGdJQ0FnSUNCcGJuQjFkSE02SUhSb2FYTXVjM1JoWW14bFUyVnlhV0ZzYVhwbEtHbHVjSFYwY3lrc1hHNGdJQ0FnSUNCa1pYQmxibVJsYm1ONVJtbHVaMlZ5Y0hKcGJuUnpPaUIwYUdsekxuTjBZV0pzWlZObGNtbGhiR2w2WlNoa1pYQmxibVJsYm1ONVJtbHVaMlZ5Y0hKcGJuUnpLU3hjYmlBZ0lDQjlPMXh1SUNBZ0lHTnZibk4wSUdwemIyNGdQU0IwYUdsekxuTjBZV0pzWlZObGNtbGhiR2w2WlNoa1lYUmhLVHRjYmlBZ0lDQXZMeUJWYzJVZ1lTQmtaWFJsY20xcGJtbHpkR2xqSUc1dmJpMWpjbmx3ZEc5bmNtRndhR2xqSUdoaGMyZ2dkR2hoZENCM2IzSnJjeUJwYmlCaWIzUm9JR0p5YjNkelpYSmNiaUFnSUNBdkx5QmhibVFnVG05a1pTQmxiblpwY205dWJXVnVkSE1nZDJsMGFHOTFkQ0J5WlhGMWFYSnBibWNnWUc1dlpHVTZZM0o1Y0hSdllDNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXphVzF3YkdWSVlYTm9LR3B6YjI0cE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdZU0IwYjNCdmJHOW5hV05oYkNCdmNtUmxjbWx1WnlCdlppQjBhR1VnWjJsMlpXNGdibTlrWlNCelpYUXVYRzRnSUNBcUwxeHVJQ0J3Y21sMllYUmxJSFJ2Y0c5c2IyZHBZMkZzVDNKa1pYSW9YRzRnSUNBZ2NHeGhiam9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1TEZ4dUlDQWdJRzV2WkdWVFpYUTZJRk5sZER4emRISnBibWMrWEc0Z0lDazZJSE4wY21sdVoxdGRJSHRjYmlBZ0lDQmpiMjV6ZENCeVpYTjFiSFE2SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1FnZG1semFYUmxaQ0E5SUc1bGR5QlRaWFE4YzNSeWFXNW5QaWdwTzF4dUlDQWdJR052Ym5OMElIWnBjMmwwSUQwZ0tHNXZaR1ZKWkRvZ2MzUnlhVzVuS1NBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvZG1semFYUmxaQzVvWVhNb2JtOWtaVWxrS1NrZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZG1semFYUmxaQzVoWkdRb2JtOWtaVWxrS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JsY0hNZ1BTQkhjbUZ3YUZSdmNHOXNiMmQ1TG5Wd2MzUnlaV0Z0VG05a1pYTW9ibTlrWlVsa0xDQndiR0Z1TG1sdVkyOXRhVzVuUW5sT2IyUmxMQ0JtWVd4elpTazdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR1JsY0NCdlppQmtaWEJ6S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1YjJSbFUyVjBMbWhoY3loa1pYQXBLU0IyYVhOcGRDaGtaWEFwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WemRXeDBMbkIxYzJnb2JtOWtaVWxrS1R0Y2JpQWdJQ0I5TzF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYm05a1pVbGtJRzltSUc1dlpHVlRaWFFwSUhacGMybDBLRzV2WkdWSlpDazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGIyMXdkWFJsY3lCbWFXNW5aWEp3Y21sdWRITWdabTl5SUdGc2JDQjFjSE4wY21WaGJTQmtaWEJsYm1SbGJtTnBaWE1nYjJZZ1lTQnViMlJsTGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCa1pYQmxibVJsYm1ONVJtbHVaMlZ5Y0hKcGJuUnpLRnh1SUNBZ0lIQnNZVzQ2SUVkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYml4Y2JpQWdJQ0J1YjJSbFNXUTZJSE4wY21sdVp5eGNiaUFnSUNCeVpYTjFiSFE2SUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFhHNGdJQ2s2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSE4wY21sdVp6NGdlMXh1SUNBZ0lHTnZibk4wSUdSbGNITWdQU0IwYUdsekxtUmxjR1Z1WkdWdVkzbFNaWE52YkhabGNpNW5aWFJFWlhCbGJtUmxibU5wWlhNb2NHeGhiaXdnYm05a1pVbGtLVHRjYmlBZ0lDQmpiMjV6ZENCbWFXNW5aWEp3Y21sdWRITTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lITjBjbWx1Wno0Z1BTQjdmVHRjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJR1JsY0NCdlppQmtaWEJ6S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0J1YjJSbElEMGdjR3hoYmk1dWIyUmxjeTVtYVc1a0tDaHVLU0E5UGlCdUxtbGtJRDA5UFNCa1pYQXBPMXh1SUNBZ0lDQWdhV1lnS0c1dlpHVXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR1Z3VW1WemRXeDBJRDBnY21WemRXeDBMbTV2WkdWU1pYTjFiSFJ6VzJSbGNGMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVjSFYwY3lBOUlHUmxjRkpsYzNWc2REOHVhVzV3ZFhSeklEOC9JSHQ5TzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J1WlhOMFpXUkVaWEJ6SUQwZ2RHaHBjeTVrWlhCbGJtUmxibU41Um1sdVoyVnljSEpwYm5SektIQnNZVzRzSUdSbGNDd2djbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lDQWdabWx1WjJWeWNISnBiblJ6VzJSbGNGMGdQU0IwYUdsekxtTnZiWEIxZEdWR2FXNW5aWEp3Y21sdWRDaHdiR0Z1TG5kdmNtdG1iRzkzTENCdWIyUmxMQ0JwYm5CMWRITXNJRzVsYzNSbFpFUmxjSE1wTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1ptbHVaMlZ5Y0hKcGJuUnpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZObGNtbGhiR2w2WlhNZ1lTQjJZV3gxWlNCM2FYUm9JSEpsWTNWeWMybDJaV3g1SUhOdmNuUmxaQ0JyWlhseklHWnZjaUJ6ZEdGaWJHVWdhR0Z6YUdsdVp5NWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdjM1JoWW14bFUyVnlhV0ZzYVhwbEtIWmhiSFZsT2lCMWJtdHViM2R1S1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0JwWmlBb2RtRnNkV1VnUFQwOUlHNTFiR3dnZkh3Z2RIbHdaVzltSUhaaGJIVmxJQ0U5UFNCY0ltOWlhbVZqZEZ3aUtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1NsTlBUaTV6ZEhKcGJtZHBabmtvZG1Gc2RXVXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJnV3lSN2RtRnNkV1V1YldGd0tDaDJLU0E5UGlCMGFHbHpMbk4wWVdKc1pWTmxjbWxoYkdsNlpTaDJLU2t1YW05cGJpaGNJaXhjSWlsOVhXQTdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJR3RsZVhNZ1BTQlBZbXBsWTNRdWEyVjVjeWgyWVd4MVpTa3VjMjl5ZENncE8xeHVJQ0FnSUdOdmJuTjBJSEJoYVhKeklEMGdhMlY1Y3k1dFlYQW9YRzRnSUNBZ0lDQW9heWtnUFQ0Z1lDUjdTbE5QVGk1emRISnBibWRwWm5rb2F5bDlPaVI3ZEdocGN5NXpkR0ZpYkdWVFpYSnBZV3hwZW1Vb0tIWmhiSFZsSUdGeklHRnVlU2xiYTEwcGZXQmNiaUFnSUNBcE8xeHVJQ0FnSUhKbGRIVnliaUJnZXlSN2NHRnBjbk11YW05cGJpaGNJaXhjSWlsOWZXQTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJsdGNHeGxJRzV2YmkxamNubHdkRzluY21Gd2FHbGpJR2hoYzJnZ1ptOXlJR0p5YjNkelpYSWdaVzUyYVhKdmJtMWxiblJ6SUhkb1pYSmxYRzRnSUNBcUlHQnViMlJsT21OeWVYQjBiMkFnYVhNZ2RXNWhkbUZwYkdGaWJHVXVJRkJ5YjJSMVkyVnpJR0VnWkdWMFpYSnRhVzVwYzNScFl5Qm9aWGd0YkdsclpTQnpkSEpwYm1kY2JpQWdJQ29nWm5KdmJTQjBhR1VnYVc1d2RYUXVJRlJvYVhNZ2FYTWdUazlVSUdOeWVYQjBiMmR5WVhCb2FXTmhiR3g1SUhObFkzVnlaU0JpZFhRZ2FYTWdjM1ZtWm1samFXVnVkRnh1SUNBZ0tpQm1iM0lnWm1sdVoyVnljSEpwYm5RdFltRnpaV1FnWTJGamFHVWdhMlY1Y3k1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2MybHRjR3hsU0dGemFDaHpkSEk2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdiR1YwSUdoaGMyZ2dQU0F3TzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYzNSeUxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmphR0Z5SUQwZ2MzUnlMbU5vWVhKRGIyUmxRWFFvYVNrN1hHNGdJQ0FnSUNCb1lYTm9JRDBnS0doaGMyZ2dQRHdnTlNrZ0xTQm9ZWE5vSUNzZ1kyaGhjanRjYmlBZ0lDQWdJR2hoYzJnZ2ZEMGdNRHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdCbWNGOGtlMDFoZEdndVlXSnpLR2hoYzJncExuUnZVM1J5YVc1bktERTJLUzV3WVdSVGRHRnlkQ2c0TENCY0lqQmNJaWw5WHlSN2MzUnlMbXhsYm1kMGFIMWdPMXh1SUNCOVhHNTlYRzVjYm5admFXUWdSMUpCVUVoZlVFbE9Ua2xPUjE5TlJWUkJSRUZVUVY5TFJWazdYRzRpWFgwPSJdfQ==
@@ -23,5 +23,5 @@ __exportStar(require("./GraphPinningMetadata.cjs"), exports);
23
23
  __exportStar(require("./GraphPinningPolicy.cjs"), exports);
24
24
  __exportStar(require("./GraphPinningDependencyResolver.cjs"), exports);
25
25
  __exportStar(require("./GraphPinningService.cjs"), exports);
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvcGlubmluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsMENBQXVDO0FBQ3ZDLHdDQUFxQztBQUNyQyxvREFBaUQ7QUFDakQseUNBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9waW5uaW5nXG4gKiBAc3VtbWFyeSBHcmFwaCBwaW5uaW5nIHN1YnN5c3RlbS5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIHRoZSBwaW5uaW5nIG1ldGFkYXRhLCBwb2xpY3ksIGRlcGVuZGVuY3kgcmVzb2x2ZXIsIGFuZCBzZXJ2aWNlLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFBpbm5pbmdNZXRhZGF0YVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nUG9saWN5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFBpbm5pbmdEZXBlbmRlbmN5UmVzb2x2ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoUGlubmluZ1NlcnZpY2VcIjtcbiJdfQ==
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsc0VBQW9EO0FBQ3BELDJEQUF5QztBQUN6QywweUJBQTB5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGlubmluZ1xuICogQHN1bW1hcnkgR3JhcGggcGlubmluZyBzdWJzeXN0ZW0uXG4gKiBAZGVzY3JpcHRpb24gUmUtZXhwb3J0cyB0aGUgcGlubmluZyBtZXRhZGF0YSwgcG9saWN5LCBkZXBlbmRlbmN5IHJlc29sdmVyLCBhbmQgc2VydmljZS5cbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nTWV0YWRhdGEuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoUGlubmluZ1BvbGljeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFBpbm5pbmdTZXJ2aWNlLmpzXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk5emNtTXZaM0poY0dndmNHbHVibWx1Wnk5cGJtUmxlQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenRIUVVsSE8wRkJRMGdzTUVOQlFYVkRPMEZCUTNaRExIZERRVUZ4UXp0QlFVTnlReXh2UkVGQmFVUTdRVUZEYWtRc2VVTkJRWE5ESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OW5jbUZ3YUM5d2FXNXVhVzVuWEc0Z0tpQkFjM1Z0YldGeWVTQkhjbUZ3YUNCd2FXNXVhVzVuSUhOMVluTjVjM1JsYlM1Y2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCU1pTMWxlSEJ2Y25SeklIUm9aU0J3YVc1dWFXNW5JRzFsZEdGa1lYUmhMQ0J3YjJ4cFkza3NJR1JsY0dWdVpHVnVZM2tnY21WemIyeDJaWElzSUdGdVpDQnpaWEoyYVdObExseHVJQ292WEc1bGVIQnZjblFnS2lCbWNtOXRJRndpTGk5SGNtRndhRkJwYm01cGJtZE5aWFJoWkdGMFlWd2lPMXh1Wlhod2IzSjBJQ29nWm5KdmJTQmNJaTR2UjNKaGNHaFFhVzV1YVc1blVHOXNhV041WENJN1hHNWxlSEJ2Y25RZ0tpQm1jbTl0SUZ3aUxpOUhjbUZ3YUZCcGJtNXBibWRFWlhCbGJtUmxibU41VW1WemIyeDJaWEpjSWp0Y2JtVjRjRzl5ZENBcUlHWnliMjBnWENJdUwwZHlZWEJvVUdsdWJtbHVaMU5sY25acFkyVmNJanRjYmlKZGZRPT0iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL3Bpbm5pbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILDBDQUF1QztBQUN2Qyx3Q0FBcUM7QUFDckMsb0RBQWlEO0FBQ2pELHlDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGlubmluZ1xuICogQHN1bW1hcnkgR3JhcGggcGlubmluZyBzdWJzeXN0ZW0uXG4gKiBAZGVzY3JpcHRpb24gUmUtZXhwb3J0cyB0aGUgcGlubmluZyBtZXRhZGF0YSwgcG9saWN5LCBkZXBlbmRlbmN5IHJlc29sdmVyLCBhbmQgc2VydmljZS5cbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nTWV0YWRhdGFcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoUGlubmluZ1BvbGljeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFBpbm5pbmdTZXJ2aWNlXCI7XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsc0VBQW9EO0FBQ3BELDJEQUF5QztBQUN6QyxzekJBQXN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGlubmluZ1xuICogQHN1bW1hcnkgR3JhcGggcGlubmluZyBzdWJzeXN0ZW0uXG4gKiBAZGVzY3JpcHRpb24gUmUtZXhwb3J0cyB0aGUgcGlubmluZyBtZXRhZGF0YSwgcG9saWN5LCBkZXBlbmRlbmN5IHJlc29sdmVyLCBhbmQgc2VydmljZS5cbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nTWV0YWRhdGEuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoUGlubmluZ1BvbGljeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFBpbm5pbmdTZXJ2aWNlLmpzXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk4dUxpOXpjbU12WjNKaGNHZ3ZaVzVuYVc1bEwzQnBibTVwYm1jdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3UjBGSlJ6dEJRVU5JTERCRFFVRjFRenRCUVVOMlF5eDNRMEZCY1VNN1FVRkRja01zYjBSQlFXbEVPMEZCUTJwRUxIbERRVUZ6UXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1FHMXZaSFZzWlNCcGJuUmxaM0poZEdsdmJuTXZaM0poY0dndmNHbHVibWx1WjF4dUlDb2dRSE4xYlcxaGNua2dSM0poY0dnZ2NHbHVibWx1WnlCemRXSnplWE4wWlcwdVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1VtVXRaWGh3YjNKMGN5QjBhR1VnY0dsdWJtbHVaeUJ0WlhSaFpHRjBZU3dnY0c5c2FXTjVMQ0JrWlhCbGJtUmxibU41SUhKbGMyOXNkbVZ5TENCaGJtUWdjMlZ5ZG1salpTNWNiaUFxTDF4dVpYaHdiM0owSUNvZ1puSnZiU0JjSWk0dlIzSmhjR2hRYVc1dWFXNW5UV1YwWVdSaGRHRmNJanRjYm1WNGNHOXlkQ0FxSUdaeWIyMGdYQ0l1TDBkeVlYQm9VR2x1Ym1sdVoxQnZiR2xqZVZ3aU8xeHVaWGh3YjNKMElDb2dabkp2YlNCY0lpNHZSM0poY0doUWFXNXVhVzVuUkdWd1pXNWtaVzVqZVZKbGMyOXNkbVZ5WENJN1hHNWxlSEJ2Y25RZ0tpQm1jbTl0SUZ3aUxpOUhjbUZ3YUZCcGJtNXBibWRUWlhKMmFXTmxYQ0k3WEc0aVhYMD0iXX0=
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL2VuZ2luZS9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuXG4gKiBAc3VtbWFyeSBUaGUgY29tcGxldGUgZXhlY3V0aW9uIHBsYW4gZm9yIGEgd29ya2Zsb3cuXG4gKiBAZGVzY3JpcHRpb24gQ29udGFpbnMgcmVzb2x2ZWQgbm9kZXMsIGVkZ2VzLCB0b3BvbG9naWNhbCBsYXllcnMsIGFuZCBpbmNvbWluZy9vdXRnb2luZyBtYXBzLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbkVkZ2UgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5FZGdlXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbkxheWVyIH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXJcIjtcblxuLyoqXG4gKiBUaGUgcmVzb2x2ZWQgZXhlY3V0aW9uIHBsYW4gZm9yIGEgc2luZ2xlIHdvcmtmbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRXhlY3V0aW9uUGxhbiB7XG4gIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICBub2RlczogR3JhcGhFeGVjdXRpb25QbGFuTm9kZVtdO1xuICBlZGdlczogR3JhcGhFeGVjdXRpb25QbGFuRWRnZVtdO1xuICBsYXllcnM6IEdyYXBoRXhlY3V0aW9uUGxhbkxheWVyW107XG4gIGluY29taW5nQnlOb2RlOiBNYXA8c3RyaW5nLCBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW10+O1xuICBvdXRnb2luZ0J5Tm9kZTogTWFwPHN0cmluZywgR3JhcGhFeGVjdXRpb25QbGFuRWRnZVtdPjtcbn1cbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhFeGVjdXRpb25QbGFuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOC9DQUE4L0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZMaTR2YzNKakwyZHlZWEJvTDJWdVoybHVaUzl3YkdGdWJtbHVaeTlIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzR1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1FHMXZaSFZzWlNCcGJuUmxaM0poZEdsdmJuTXZaM0poY0dndmNHeGhibTVwYm1jdlIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVhHNGdLaUJBYzNWdGJXRnllU0JVYUdVZ1kyOXRjR3hsZEdVZ1pYaGxZM1YwYVc5dUlIQnNZVzRnWm05eUlHRWdkMjl5YTJac2IzY3VYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdRMjl1ZEdGcGJuTWdjbVZ6YjJ4MlpXUWdibTlrWlhNc0lHVmtaMlZ6TENCMGIzQnZiRzluYVdOaGJDQnNZWGxsY25Nc0lHRnVaQ0JwYm1OdmJXbHVaeTl2ZFhSbmIybHVaeUJ0WVhCekxseHVJQ292WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1YyOXlhMlpzYjNkRVpXWnBibWwwYVc5dUlIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OTFhUzFrWldOdmNtRjBiM0p6TDJkeVlYQm9YQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiazV2WkdVZ2ZTQm1jbTl0SUZ3aUxpOUhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNU9iMlJsWENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYmtWa1oyVWdmU0JtY205dElGd2lMaTlIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVGWkdkbFhDSTdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFZHlZWEJvUlhobFkzVjBhVzl1VUd4aGJreGhlV1Z5SUgwZ1puSnZiU0JjSWk0dlIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVRHRjVaWEpjSWp0Y2JseHVMeW9xWEc0Z0tpQlVhR1VnY21WemIyeDJaV1FnWlhobFkzVjBhVzl1SUhCc1lXNGdabTl5SUdFZ2MybHVaMnhsSUhkdmNtdG1iRzkzTGx4dUlDb3ZYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWR5WVhCb1JYaGxZM1YwYVc5dVVHeGhiaUI3WEc0Z0lIZHZjbXRtYkc5M09pQkhjbUZ3YUZkdmNtdG1iRzkzUkdWbWFXNXBkR2x2Ymp0Y2JpQWdkMjl5YTJac2IzZEpaRG9nYzNSeWFXNW5PMXh1SUNCdWIyUmxjem9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VG05a1pWdGRPMXh1SUNCbFpHZGxjem9nUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1UldSblpWdGRPMXh1SUNCc1lYbGxjbk02SUVkeVlYQm9SWGhsWTNWMGFXOXVVR3hoYmt4aGVXVnlXMTA3WEc0Z0lHbHVZMjl0YVc1blFubE9iMlJsT2lCTllYQThjM1J5YVc1bkxDQkhjbUZ3YUVWNFpXTjFkR2x2YmxCc1lXNUZaR2RsVzEwK08xeHVJQ0J2ZFhSbmIybHVaMEo1VG05a1pUb2dUV0Z3UEhOMGNtbHVaeXdnUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1UldSblpWdGRQanRjYm4xY2JpSmRmUT09Il19
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuRWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuRWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5FZGdlXG4gKiBAc3VtbWFyeSBQbGFuIGVkZ2UgdHlwZSBmb3IgdGhlIGV4ZWN1dGlvbiBwbGFuLlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBkaXJlY3RlZCB2YWx1ZSByb3V0ZSBiZXR3ZWVuIHR3byBlbmRwb2ludHMgKG5vZGUtdG8tbm9kZSBvciBub2RlLXRvLXdvcmtmbG93LWJvdW5kYXJ5KS5cbiAqL1xuXG4vKipcbiAqIEFuIGVkZ2UgaW4gdGhlIGV4ZWN1dGlvbiBwbGFuIHJlcHJlc2VudGluZyBhIHZhbHVlIHJvdXRlIGZyb20gYSBzb3VyY2VcbiAqIHBvcnQgdG8gYSB0YXJnZXQgcG9ydC5cbiAqXG4gKiBgc291cmNlTm9kZUlkYCBvciBgdGFyZ2V0Tm9kZUlkYCBtYXkgYmUge0BsaW5rIEdSQVBIX1dPUktGTE9XX0JPVU5EQVJZfSB3aGVuXG4gKiB0aGUgZWRnZSBjb25uZWN0cyB0byB0aGUgd29ya2Zsb3cgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRpb25QbGFuRWRnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZU5vZGVJZDogc3RyaW5nO1xuICBzb3VyY2VQb3J0OiBzdHJpbmc7XG4gIHRhcmdldE5vZGVJZDogc3RyaW5nO1xuICB0YXJnZXRQb3J0OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuRWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoRXhlY3V0aW9uUGxhbkVkZ2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSw4dUNBQTh1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuRWRnZVxuICogQHN1bW1hcnkgUGxhbiBlZGdlIHR5cGUgZm9yIHRoZSBleGVjdXRpb24gcGxhbi5cbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgZGlyZWN0ZWQgdmFsdWUgcm91dGUgYmV0d2VlbiB0d28gZW5kcG9pbnRzIChub2RlLXRvLW5vZGUgb3Igbm9kZS10by13b3JrZmxvdy1ib3VuZGFyeSkuXG4gKi9cbmV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVJXUm5aUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMeTR1TDNOeVl5OW5jbUZ3YUM5bGJtZHBibVV2Y0d4aGJtNXBibWN2UjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1UldSblpTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096dEhRVWxISWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OW5jbUZ3YUM5d2JHRnVibWx1Wnk5SGNtRndhRVY0WldOMWRHbHZibEJzWVc1RlpHZGxYRzRnS2lCQWMzVnRiV0Z5ZVNCUWJHRnVJR1ZrWjJVZ2RIbHdaU0JtYjNJZ2RHaGxJR1Y0WldOMWRHbHZiaUJ3YkdGdUxseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxjSEpsYzJWdWRITWdZU0JrYVhKbFkzUmxaQ0IyWVd4MVpTQnliM1YwWlNCaVpYUjNaV1Z1SUhSM2J5QmxibVJ3YjJsdWRITWdLRzV2WkdVdGRHOHRibTlrWlNCdmNpQnViMlJsTFhSdkxYZHZjbXRtYkc5M0xXSnZkVzVrWVhKNUtTNWNiaUFxTDF4dVhHNHZLaXBjYmlBcUlFRnVJR1ZrWjJVZ2FXNGdkR2hsSUdWNFpXTjFkR2x2YmlCd2JHRnVJSEpsY0hKbGMyVnVkR2x1WnlCaElIWmhiSFZsSUhKdmRYUmxJR1p5YjIwZ1lTQnpiM1Z5WTJWY2JpQXFJSEJ2Y25RZ2RHOGdZU0IwWVhKblpYUWdjRzl5ZEM1Y2JpQXFYRzRnS2lCZ2MyOTFjbU5sVG05a1pVbGtZQ0J2Y2lCZ2RHRnlaMlYwVG05a1pVbGtZQ0J0WVhrZ1ltVWdlMEJzYVc1cklFZFNRVkJJWDFkUFVrdEdURTlYWDBKUFZVNUVRVkpaZlNCM2FHVnVYRzRnS2lCMGFHVWdaV1JuWlNCamIyNXVaV04wY3lCMGJ5QjBhR1VnZDI5eWEyWnNiM2NnWW05MWJtUmhjbmt1WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVSV1JuWlNCN1hHNGdJR2xrT2lCemRISnBibWM3WEc0Z0lITnZkWEpqWlU1dlpHVkpaRG9nYzNSeWFXNW5PMXh1SUNCemIzVnlZMlZRYjNKME9pQnpkSEpwYm1jN1hHNGdJSFJoY21kbGRFNXZaR1ZKWkRvZ2MzUnlhVzVuTzF4dUlDQjBZWEpuWlhSUWIzSjBPaUJ6ZEhKcGJtYzdYRzRnSUd4aFltVnNQem9nYzNSeWFXNW5PMXh1SUNCdFpYUmhaR0YwWVQ4NklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrTzF4dWZWeHVJbDE5Il19
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbkxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbkxheWVyXG4gKiBAc3VtbWFyeSBBIGxheWVyIG9mIG5vZGVzIHRoYXQgY2FuIGV4ZWN1dGUgaW4gcGFyYWxsZWwuXG4gKiBAZGVzY3JpcHRpb24gUHJvZHVjZWQgYnkgdGhlIHRvcG9sb2dpY2FsIHBsYW5uZXI7IGFsbCBub2RlcyBpbiBhIGxheWVyIGhhdmUgbm8gZGVwZW5kZW5jaWVzIG9uIGVhY2ggb3RoZXIuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuTm9kZSB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUGxhbk5vZGVcIjtcblxuLyoqXG4gKiBBIHRvcG9sb2dpY2FsIGxheWVyIG9mIG5vZGVzIHRoYXQgbWF5IGV4ZWN1dGUgaW4gcGFyYWxsZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIge1xuICBpbmRleDogbnVtYmVyO1xuICBub2RlczogR3JhcGhFeGVjdXRpb25QbGFuTm9kZVtdO1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHcmFwaEV4ZWN1dGlvblBsYW5MYXllci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDA4QkFBMDhCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHt9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VEdGNVpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk4dUxpOHVMaTl6Y21NdlozSmhjR2d2Wlc1bmFXNWxMM0JzWVc1dWFXNW5MMGR5WVhCb1JYaGxZM1YwYVc5dVVHeGhia3hoZVdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJ0YjJSMWJHVWdhVzUwWldkeVlYUnBiMjV6TDJkeVlYQm9MM0JzWVc1dWFXNW5MMGR5WVhCb1JYaGxZM1YwYVc5dVVHeGhia3hoZVdWeVhHNGdLaUJBYzNWdGJXRnllU0JCSUd4aGVXVnlJRzltSUc1dlpHVnpJSFJvWVhRZ1kyRnVJR1Y0WldOMWRHVWdhVzRnY0dGeVlXeHNaV3d1WEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnVUhKdlpIVmpaV1FnWW5rZ2RHaGxJSFJ2Y0c5c2IyZHBZMkZzSUhCc1lXNXVaWEk3SUdGc2JDQnViMlJsY3lCcGJpQmhJR3hoZVdWeUlHaGhkbVVnYm04Z1pHVndaVzVrWlc1amFXVnpJRzl1SUdWaFkyZ2diM1JvWlhJdVhHNGdLaTljYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVUbTlrWlNCOUlHWnliMjBnWENJdUwwZHlZWEJvUlhobFkzVjBhVzl1VUd4aGJrNXZaR1ZjSWp0Y2JseHVMeW9xWEc0Z0tpQkJJSFJ2Y0c5c2IyZHBZMkZzSUd4aGVXVnlJRzltSUc1dlpHVnpJSFJvWVhRZ2JXRjVJR1Y0WldOMWRHVWdhVzRnY0dGeVlXeHNaV3d1WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVUR0Y1WlhJZ2UxeHVJQ0JwYm1SbGVEb2diblZ0WW1WeU8xeHVJQ0J1YjJSbGN6b2dSM0poY0doRmVHVmpkWFJwYjI1UWJHRnVUbTlrWlZ0ZE8xeHVmVnh1SWwxOSJdfQ==
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuTm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlXG4gKiBAc3VtbWFyeSBQbGFuIG5vZGUgdHlwZSBmb3IgdGhlIGV4ZWN1dGlvbiBwbGFuLlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBzaW5nbGUgbm9kZSByZXNvbHZlZCBmcm9tIGEgd29ya2Zsb3cgZGVmaW5pdGlvbiwgcmVhZHkgZm9yIGV4ZWN1dGlvbi5cbiAqL1xuaW1wb3J0IHR5cGUge1xuICBHcmFwaE5vZGVEZWZpbml0aW9uLFxuICBHcmFwaFdvcmtmbG93Tm9kZU1ldGFkYXRhLFxufSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuLyoqXG4gKiBBIG5vZGUgaW4gdGhlIGV4ZWN1dGlvbiBwbGFuLCBkZXJpdmVkIGZyb20gYSB3b3JrZmxvdydzIG5vZGUgbWV0YWRhdGEgYW5kXG4gKiBpdHMgcmVzb2x2ZWQgZ3JhcGggZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlIHtcbiAgaWQ6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgc291cmNlOiBHcmFwaFdvcmtmbG93Tm9kZU1ldGFkYXRhO1xuICBkZWZpbml0aW9uOiBHcmFwaE5vZGVEZWZpbml0aW9uO1xuICBpbnB1dFBvcnRzOiBzdHJpbmdbXTtcbiAgb3V0cHV0UG9ydHM6IHN0cmluZ1tdO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFuTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoRXhlY3V0aW9uUGxhbk5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxzdkNBQXN2QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hGZUdWamRYUnBiMjVRYkdGdVRtOWtaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMeTR1TDNOeVl5OW5jbUZ3YUM5bGJtZHBibVV2Y0d4aGJtNXBibWN2UjNKaGNHaEZlR1ZqZFhScGIyNVFiR0Z1VG05a1pTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBYlc5a2RXeGxJR2x1ZEdWbmNtRjBhVzl1Y3k5bmNtRndhQzl3YkdGdWJtbHVaeTlIY21Gd2FFVjRaV04xZEdsdmJsQnNZVzVPYjJSbFhHNGdLaUJBYzNWdGJXRnllU0JRYkdGdUlHNXZaR1VnZEhsd1pTQm1iM0lnZEdobElHVjRaV04xZEdsdmJpQndiR0Z1TGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGNISmxjMlZ1ZEhNZ1lTQnphVzVuYkdVZ2JtOWtaU0J5WlhOdmJIWmxaQ0JtY205dElHRWdkMjl5YTJac2IzY2daR1ZtYVc1cGRHbHZiaXdnY21WaFpIa2dabTl5SUdWNFpXTjFkR2x2Ymk1Y2JpQXFMMXh1YVcxd2IzSjBJSFI1Y0dVZ2UxeHVJQ0JIY21Gd2FFNXZaR1ZFWldacGJtbDBhVzl1TEZ4dUlDQkhjbUZ3YUZkdmNtdG1iRzkzVG05a1pVMWxkR0ZrWVhSaExGeHVmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMM1ZwTFdSbFkyOXlZWFJ2Y25NdlozSmhjR2hjSWp0Y2JseHVMeW9xWEc0Z0tpQkJJRzV2WkdVZ2FXNGdkR2hsSUdWNFpXTjFkR2x2YmlCd2JHRnVMQ0JrWlhKcGRtVmtJR1p5YjIwZ1lTQjNiM0pyWm14dmR5ZHpJRzV2WkdVZ2JXVjBZV1JoZEdFZ1lXNWtYRzRnS2lCcGRITWdjbVZ6YjJ4MlpXUWdaM0poY0dnZ1pHVm1hVzVwZEdsdmJpNWNiaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSGNtRndhRVY0WldOMWRHbHZibEJzWVc1T2IyUmxJSHRjYmlBZ2FXUTZJSE4wY21sdVp6dGNiaUFnYTJsdVpEb2djM1J5YVc1bk8xeHVJQ0JzWVdKbGJEODZJSE4wY21sdVp6dGNiaUFnYzI5MWNtTmxPaUJIY21Gd2FGZHZjbXRtYkc5M1RtOWtaVTFsZEdGa1lYUmhPMXh1SUNCa1pXWnBibWwwYVc5dU9pQkhjbUZ3YUU1dlpHVkVaV1pwYm1sMGFXOXVPMXh1SUNCcGJuQjFkRkJ2Y25Sek9pQnpkSEpwYm1kYlhUdGNiaUFnYjNWMGNIVjBVRzl5ZEhNNklITjBjbWx1WjF0ZE8xeHVJQ0J0WlhSaFpHRjBZVDg2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtPMXh1ZlZ4dUlsMTkiXX0=