@nlabs/reaktor 1.6.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +74 -201
  2. package/README.md +48 -16
  3. package/lib/actions/analytics.d.ts +10 -0
  4. package/lib/actions/analytics.js +539 -0
  5. package/lib/actions/apps.js +2 -2
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +2 -2
  8. package/lib/actions/conversations.js +2 -2
  9. package/lib/actions/crm.d.ts +11 -1
  10. package/lib/actions/crm.js +443 -13
  11. package/lib/actions/crud.js +2 -2
  12. package/lib/actions/dynamodb.d.ts +1 -1
  13. package/lib/actions/dynamodb.js +2 -2
  14. package/lib/actions/email.d.ts +1 -1
  15. package/lib/actions/email.js +2 -2
  16. package/lib/actions/files.js +2 -2
  17. package/lib/actions/flags.d.ts +6 -0
  18. package/lib/actions/flags.js +147 -0
  19. package/lib/actions/groups.js +2 -2
  20. package/lib/actions/images.d.ts +1 -1
  21. package/lib/actions/images.js +2 -2
  22. package/lib/actions/index.d.ts +3 -2
  23. package/lib/actions/index.js +4 -3
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +2 -2
  26. package/lib/actions/messages.js +2 -2
  27. package/lib/actions/notifications.d.ts +1 -1
  28. package/lib/actions/notifications.js +2 -2
  29. package/lib/actions/payments.d.ts +3 -3
  30. package/lib/actions/payments.js +144 -189
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/posts.d.ts +0 -4
  33. package/lib/actions/posts.js +2 -4
  34. package/lib/actions/query.js +2 -2
  35. package/lib/actions/reactions.js +2 -2
  36. package/lib/actions/rum.js +148 -45
  37. package/lib/actions/s3.d.ts +1 -1
  38. package/lib/actions/s3.js +2 -2
  39. package/lib/actions/search.js +2 -2
  40. package/lib/actions/sms.js +2 -2
  41. package/lib/actions/statistics.js +2 -2
  42. package/lib/actions/subscriptions.js +2 -2
  43. package/lib/actions/tags.js +2 -2
  44. package/lib/actions/users.d.ts +4 -1
  45. package/lib/actions/users.js +85 -11
  46. package/lib/actions/videos.js +2 -2
  47. package/lib/adapters/arangoAdapter.js +1 -1
  48. package/lib/adapters/contentAdapter.js +2 -2
  49. package/lib/adapters/fileAdapter.js +1 -1
  50. package/lib/adapters/imageAdapter.js +1 -1
  51. package/lib/adapters/index.js +1 -1
  52. package/lib/adapters/messageAdapter.js +1 -1
  53. package/lib/adapters/postAdapter.js +1 -1
  54. package/lib/adapters/reaktorAdapter.js +1 -1
  55. package/lib/adapters/tagAdapter.d.ts +0 -1
  56. package/lib/adapters/tagAdapter.js +1 -2
  57. package/lib/adapters/userAdapter.d.ts +0 -1
  58. package/lib/adapters/userAdapter.js +1 -2
  59. package/lib/config.js +8 -2
  60. package/lib/constants/collections.d.ts +17 -1
  61. package/lib/constants/collections.js +18 -2
  62. package/lib/handlers/graphqlHandler.d.ts +2 -2
  63. package/lib/handlers/graphqlHandler.js +2 -19
  64. package/lib/index.d.ts +4 -2
  65. package/lib/index.js +4 -3
  66. package/lib/lambdas/actions/websockets.js +2 -2
  67. package/lib/lambdas/authorizer.js +2 -2
  68. package/lib/lambdas/connection.js +2 -2
  69. package/lib/lambdas/utils/message.js +2 -2
  70. package/lib/lambdas/utils/websocket.d.ts +1 -1
  71. package/lib/lambdas/utils/websocket.js +2 -2
  72. package/lib/mocks/conversation.js +1 -1
  73. package/lib/mocks/file.js +1 -1
  74. package/lib/mocks/group.js +1 -1
  75. package/lib/mocks/image.js +1 -1
  76. package/lib/mocks/post.js +1 -1
  77. package/lib/mocks/tag.js +1 -1
  78. package/lib/mocks/user.js +1 -1
  79. package/lib/mocks/video.js +1 -1
  80. package/lib/mutations/analytics/analytics.d.ts +1 -0
  81. package/lib/mutations/analytics/analytics.js +35 -0
  82. package/lib/mutations/content/content.js +2 -2
  83. package/lib/mutations/crm/crm.js +57 -11
  84. package/lib/mutations/events/events.js +2 -2
  85. package/lib/mutations/flags/flags.d.ts +1 -0
  86. package/lib/mutations/flags/flags.js +33 -0
  87. package/lib/mutations/groups/groups.js +2 -2
  88. package/lib/mutations/images/images.js +2 -2
  89. package/lib/mutations/index.d.ts +3 -1
  90. package/lib/mutations/index.js +13 -3
  91. package/lib/mutations/locations/locations.js +2 -2
  92. package/lib/mutations/messages/messages.js +2 -2
  93. package/lib/mutations/personas/personas.js +2 -2
  94. package/lib/mutations/posts/posts.js +2 -2
  95. package/lib/mutations/reactions/reactions.js +2 -2
  96. package/lib/mutations/rum/rum.js +2 -2
  97. package/lib/mutations/statistics/statistics.js +2 -2
  98. package/lib/mutations/subscriptions/subscriptions.js +2 -2
  99. package/lib/mutations/tags/tags.js +2 -2
  100. package/lib/mutations/users/users.js +30 -17
  101. package/lib/mutations/videos/videos.js +2 -2
  102. package/lib/objectTypes/analytics.d.ts +8 -0
  103. package/lib/objectTypes/analytics.js +147 -0
  104. package/lib/objectTypes/app.js +2 -2
  105. package/lib/objectTypes/bankAccount.js +2 -2
  106. package/lib/objectTypes/connection.js +2 -2
  107. package/lib/objectTypes/content.js +2 -2
  108. package/lib/objectTypes/conversation.js +2 -2
  109. package/lib/objectTypes/creditCard.js +2 -2
  110. package/lib/objectTypes/crm.d.ts +5 -0
  111. package/lib/objectTypes/crm.js +68 -2
  112. package/lib/objectTypes/document.js +1 -1
  113. package/lib/objectTypes/error.js +2 -2
  114. package/lib/objectTypes/event.js +2 -2
  115. package/lib/objectTypes/external.js +2 -2
  116. package/lib/objectTypes/file.js +2 -2
  117. package/lib/objectTypes/filter.js +2 -2
  118. package/lib/objectTypes/flag.d.ts +1 -0
  119. package/lib/objectTypes/flag.js +35 -0
  120. package/lib/objectTypes/group.js +2 -2
  121. package/lib/objectTypes/iapSubscription.js +2 -2
  122. package/lib/objectTypes/image.d.ts +1 -1
  123. package/lib/objectTypes/image.js +2 -2
  124. package/lib/objectTypes/index.d.ts +2 -0
  125. package/lib/objectTypes/index.js +3 -1
  126. package/lib/objectTypes/location.js +2 -2
  127. package/lib/objectTypes/message.js +2 -2
  128. package/lib/objectTypes/passcode.js +2 -2
  129. package/lib/objectTypes/persona.js +2 -2
  130. package/lib/objectTypes/plan.js +2 -2
  131. package/lib/objectTypes/post.js +2 -2
  132. package/lib/objectTypes/query.js +2 -2
  133. package/lib/objectTypes/reaction.js +2 -2
  134. package/lib/objectTypes/relation.js +2 -2
  135. package/lib/objectTypes/rum.js +4 -4
  136. package/lib/objectTypes/search.js +2 -2
  137. package/lib/objectTypes/statistics.js +2 -2
  138. package/lib/objectTypes/subscription.js +2 -2
  139. package/lib/objectTypes/tag.js +2 -2
  140. package/lib/objectTypes/user.js +10 -2
  141. package/lib/objectTypes/video.d.ts +1 -1
  142. package/lib/objectTypes/video.js +2 -2
  143. package/lib/queries/analytics/analytics.d.ts +1 -0
  144. package/lib/queries/analytics/analytics.js +41 -0
  145. package/lib/queries/content/content.js +2 -2
  146. package/lib/queries/crm/crm.js +52 -13
  147. package/lib/queries/events/events.js +2 -2
  148. package/lib/queries/flags/flags.d.ts +1 -0
  149. package/lib/queries/flags/flags.js +16 -0
  150. package/lib/queries/groups/groups.js +2 -2
  151. package/lib/queries/images/images.js +2 -2
  152. package/lib/queries/index.d.ts +3 -1
  153. package/lib/queries/index.js +13 -3
  154. package/lib/queries/locations/locations.js +2 -2
  155. package/lib/queries/messages/messages.js +1 -1
  156. package/lib/queries/personas/personas.js +2 -2
  157. package/lib/queries/posts/posts.js +2 -2
  158. package/lib/queries/query/query.js +2 -2
  159. package/lib/queries/reactions/reactions.js +2 -2
  160. package/lib/queries/statistics/statistics.js +2 -2
  161. package/lib/queries/subscriptions/subscriptions.js +1 -1
  162. package/lib/queries/tags/tags.js +2 -2
  163. package/lib/queries/users/users.js +2 -2
  164. package/lib/queries/videos/videos.js +2 -2
  165. package/lib/templates/email/layout.js +1 -1
  166. package/lib/templates/email/passwordForgot.js +1 -1
  167. package/lib/templates/email/passwordRecovery.js +1 -1
  168. package/lib/templates/email/verifyEmail.js +1 -1
  169. package/lib/templates/email/welcome.js +1 -1
  170. package/lib/templates/sms/passwordForgot.js +1 -1
  171. package/lib/templates/sms/passwordRecovery.js +1 -1
  172. package/lib/templates/sms/verifyEmail.js +1 -1
  173. package/lib/templates/sms/verifyPhone.js +1 -1
  174. package/lib/templates/sms/welcome.js +1 -1
  175. package/lib/types/analytics.types.d.ts +92 -0
  176. package/lib/types/analytics.types.js +6 -0
  177. package/lib/types/apps.types.d.ts +1 -1
  178. package/lib/types/apps.types.js +2 -2
  179. package/lib/types/arangodb.types.d.ts +2 -2
  180. package/lib/types/arangodb.types.js +2 -2
  181. package/lib/types/auth.types.d.ts +4 -1
  182. package/lib/types/auth.types.js +2 -2
  183. package/lib/types/connections.types.d.ts +1 -1
  184. package/lib/types/connections.types.js +2 -2
  185. package/lib/types/content.types.d.ts +1 -1
  186. package/lib/types/content.types.js +2 -2
  187. package/lib/types/conversations.types.d.ts +1 -1
  188. package/lib/types/conversations.types.js +2 -2
  189. package/lib/types/crm.types.d.ts +58 -2
  190. package/lib/types/crm.types.js +2 -2
  191. package/lib/types/email.types.d.ts +1 -1
  192. package/lib/types/email.types.js +2 -2
  193. package/lib/types/error.types.js +1 -1
  194. package/lib/types/files.types.d.ts +1 -1
  195. package/lib/types/files.types.js +2 -2
  196. package/lib/types/flags.types.d.ts +28 -0
  197. package/lib/types/flags.types.js +3 -0
  198. package/lib/types/google.types.d.ts +1 -1
  199. package/lib/types/google.types.js +2 -2
  200. package/lib/types/groups.types.d.ts +1 -1
  201. package/lib/types/groups.types.js +2 -2
  202. package/lib/types/images.types.d.ts +1 -1
  203. package/lib/types/images.types.js +2 -2
  204. package/lib/types/index.d.ts +3 -1
  205. package/lib/types/index.js +4 -2
  206. package/lib/types/locations.types.d.ts +1 -1
  207. package/lib/types/locations.types.js +2 -2
  208. package/lib/types/messages.types.d.ts +1 -1
  209. package/lib/types/messages.types.js +2 -2
  210. package/lib/types/notifications.types.d.ts +1 -1
  211. package/lib/types/notifications.types.js +2 -2
  212. package/lib/types/payments.types.d.ts +4 -1
  213. package/lib/types/payments.types.js +2 -2
  214. package/lib/types/personas.types.js +1 -1
  215. package/lib/types/posts.types.d.ts +1 -1
  216. package/lib/types/posts.types.js +2 -2
  217. package/lib/types/rum.types.d.ts +3 -3
  218. package/lib/types/rum.types.js +2 -2
  219. package/lib/types/statistics.types.js +1 -1
  220. package/lib/types/tags.types.d.ts +1 -1
  221. package/lib/types/tags.types.js +2 -2
  222. package/lib/types/users.types.d.ts +2 -1
  223. package/lib/types/users.types.js +2 -2
  224. package/lib/types/videos.types.d.ts +1 -1
  225. package/lib/types/videos.types.js +2 -2
  226. package/lib/types/websockets.types.d.ts +1 -1
  227. package/lib/types/websockets.types.js +2 -2
  228. package/lib/upload.js +4 -9
  229. package/lib/utils/adapterUtils.d.ts +1 -1
  230. package/lib/utils/adapterUtils.js +2 -2
  231. package/lib/utils/analyticsUtils.d.ts +1 -1
  232. package/lib/utils/analyticsUtils.js +2 -2
  233. package/lib/utils/appContext.d.ts +2 -0
  234. package/lib/utils/appContext.js +10 -0
  235. package/lib/utils/aqlHelpers.d.ts +1 -1
  236. package/lib/utils/aqlHelpers.js +2 -2
  237. package/lib/utils/arangodbUtils.d.ts +9 -1
  238. package/lib/utils/arangodbUtils.js +10 -2
  239. package/lib/utils/authUtils.js +2 -2
  240. package/lib/utils/awsUtils.js +2 -2
  241. package/lib/utils/collectionRegistry.d.ts +1 -1
  242. package/lib/utils/collectionRegistry.js +17 -2
  243. package/lib/utils/contextUtils.d.ts +2 -2
  244. package/lib/utils/contextUtils.js +2 -2
  245. package/lib/utils/dbI18n.example.d.ts +1 -1
  246. package/lib/utils/dbI18n.example.js +2 -2
  247. package/lib/utils/dbI18n.js +2 -2
  248. package/lib/utils/googleTranslate.d.ts +1 -1
  249. package/lib/utils/googleTranslate.js +2 -2
  250. package/lib/utils/graphqlUtils.d.ts +2 -0
  251. package/lib/utils/graphqlUtils.js +1 -1
  252. package/lib/utils/imageUtils.js +1 -1
  253. package/lib/utils/index.d.ts +1 -1
  254. package/lib/utils/index.js +2 -2
  255. package/lib/utils/languageDetection.js +1 -1
  256. package/lib/utils/localeUtils.d.ts +1 -1
  257. package/lib/utils/localeUtils.example.d.ts +1 -1
  258. package/lib/utils/localeUtils.example.js +2 -2
  259. package/lib/utils/localeUtils.js +2 -2
  260. package/lib/utils/middlewareUtils.js +1 -1
  261. package/lib/utils/queryBuilder.d.ts +1 -1
  262. package/lib/utils/queryBuilder.js +2 -2
  263. package/lib/utils/schemaUtils.js +1 -1
  264. package/lib/utils/sessionUtils.d.ts +4 -0
  265. package/lib/utils/sessionUtils.js +2 -2
  266. package/lib/utils/stripeUtils.d.ts +1 -1
  267. package/lib/utils/stripeUtils.js +2 -2
  268. package/lib/utils/templateUtils.js +1 -1
  269. package/lib/utils/testUtils.js +2 -2
  270. package/lib/utils/translationQueue.d.ts +1 -1
  271. package/lib/utils/translationQueue.example.d.ts +1 -1
  272. package/lib/utils/translationQueue.example.js +2 -2
  273. package/lib/utils/translationQueue.js +2 -2
  274. package/lib/videoProcessing.js +1 -1
  275. package/package.json +49 -86
  276. package/lib/actions/websockets.d.ts +0 -20
  277. package/lib/actions/websockets.js +0 -164
  278. package/lib/mocks/nlabs.png +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { flatten } from '@nlabs/utils/arrays/flatten';
5
5
  import { uniqBy } from '@nlabs/utils/arrays/uniq';
6
6
  import { createHash, parseArangoId, parseChar, parseId } from '@nlabs/utils/parsers/strings';
@@ -277,4 +277,4 @@ export const isGrouped = (context, userId, groupId)=>{
277
277
  }).then(()=>null));
278
278
  };
279
279
 
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvZ3JvdXBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIGdldFRhZ0xpc3RCeU5hbWUsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2dyb3Vwcyc7XG5jb25zdCBncm91cHNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5HUk9VUFMpO1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX0NPTk5FQ1RJT04pO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuXG4vKipcbiAqIEdldCBhbGwgZ3JvdXBzIGZvciB0aGUgYXBwIHdpdGggdGhlaXIgdXNlcnNcbiAqIE5vdGU6IFVzZXMgY3VzdG9tIHF1ZXJ5IGZvciBlZGdlIHRyYXZlcnNhbCB0byBpbmNsdWRlIHVzZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeUFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlcik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEdyb3VwTGlzdEJ5QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIC8vIENvbXBsZXggZWRnZSB0cmF2ZXJzYWwgcXVlcnkgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBnIElOICR7Z3JvdXBzQ29sbGVjdGlvbn1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgUkVUVVJOIE1FUkdFKHUsIHt0eXBlOiBsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCA/IGxpdGVyYWwoYExJTUlUICR7ZnJvbX0sICR7dG8gLSBmcm9tfWApIDogbGl0ZXJhbCgnJyl9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyLFxuICB0bzogbnVtYmVyXG4pOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cExpc3RCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCBxdWVyeSB3aXRoIHVzZXIgZmlsdGVyaW5nIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgZywgZSBJTiBJTkJPVU5EICR7YHVzZXJzLyR7dXNlcklkfWB9ICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBNRVJHRSh1LCB7dHlwZTogbC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7ZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQgPyBsaXRlcmFsKGBMSU1JVCAke2Zyb219LCAke3RvIC0gZnJvbX1gKSA6IGxpdGVyYWwoJycpfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzfSlcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgLy8gQ29tcGxleCBtdWx0aS10YWcgcXVlcnkgd2l0aCBlZGdlIHRyYXZlcnNhbCAtIGtlZXAgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICB0YWdOYW1lcy5tYXAoKHRhZ05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0VGFnTmFtZSA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdENsYXVzZSA9IGZyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkID8gYExJTUlUICR7ZnJvbX0sICR7dG8gLSBmcm9tfWAgOiAnJztcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAsIGUgSU4gT1VUQk9VTkQgJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH0gJHtpc1RhZ2dlZENvbGxlY3Rpb259XG4gICAgICAgICAgRk9SIHUgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGl0ZXJhbChsaW1pdENsYXVzZSl9XG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHt1c2VyOnUsIGxpa2VzOkxFTkdUSChsaWtlcyksIGRpc2xpa2VzOkxFTkdUSChkaXNsaWtlcyl9KWA7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KTtcbiAgICB9KVxuICApXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAoaXRlbTogYW55KSA9PiBpdGVtLl9rZXkpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSBzZXNzaW9uPy51c2VySWQgfHwgJyc7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICAvLyBDb21wbGV4IGVkZ2UgdHJhdmVyc2FsIHdpdGggdXNlciBvd25lcnNoaXAgY2hlY2sgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnLCBlIElOIE9VVEJPVU5EICR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9IGhhc0Nvbm5lY3Rpb25cbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBEZXRhaWxzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICByZXR1cm4gZ2V0SXRlbUJ5PEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCB7X2tleTogZm9ybWF0R3JvdXBJZH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckRvY0lkOiBzdHJpbmcsXG4gIGdyb3VwRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxHcm91cEVkZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVHcm91cEVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZURvY0lkID0gcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpO1xuICBjb25zdCBmb3JtYXRHcm91cERvY0lkID0gcGFyc2VBcmFuZ29JZChncm91cERvY0lkKTtcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0Nvbm5lY3Rpb24nKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtmb3JtYXRVc2VEb2NJZH0tJHtmb3JtYXRHcm91cERvY0lkfWApO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IGZvcm1hdFVzZURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEdyb3VwRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnZ3JvdXBzJ1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHtzZXNzaW9uOiB7dXNlcklkOiBmb3JtYXRVc2VEb2NJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmNvbnN0IGJ1aWxkR3JvdXBNdXRhdGlvbiA9ICh7ZGVzY3JpcHRpb24gPSAnJywgbmFtZSA9ICdVbnRpdGxlZCcsIHR5cGV9OiBHcm91cFR5cGUpOiBQYXJ0aWFsPEdyb3VwVHlwZT4gPT4gKHtcbiAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCA2NDApLFxuICBuYW1lLFxuICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBhZGRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiA9ICcnfTogR3JvdXBUeXBlID0gaXRlbTtcbiAgY29uc3QgaWQgPSBjcmVhdGVIYXNoKGBncm91cC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgaW5zZXJ0OiBHcm91cFR5cGUgPSB7XG4gICAgX2tleTogaWQsXG4gICAgLi4uYnVpbGRHcm91cE11dGF0aW9uKGl0ZW0pXG4gIH07XG5cbiAgcmV0dXJuIGFkZEl0ZW08R3JvdXBUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5HUk9VUFMsIGluc2VydClcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfTogR3JvdXBUeXBlID0gZ3JvdXA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHNlc3Npb25Eb2NJZCBhbmQgZ3JvdXBEb2NJZFxuICAgICAgaWYgKCFzZXNzaW9uRG9jSWQgfHwgdHlwZW9mIHNlc3Npb25Eb2NJZCAhPT0gJ3N0cmluZycgfHwgIXNlc3Npb25Eb2NJZC5zdGFydHNXaXRoKCd1c2Vycy8nKSkge1xuICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLklOVkFMSURfSU5QVVRcbiAgICAgICAgfSwgbmV3IEVycm9yKCdJbnZhbGlkIG9yIG1pc3Npbmcgc2Vzc2lvbkRvY0lkIGZvciBlZGdlIGNyZWF0aW9uJyksIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghZ3JvdXBEb2NJZCB8fCB0eXBlb2YgZ3JvdXBEb2NJZCAhPT0gJ3N0cmluZycgfHwgIWdyb3VwRG9jSWQuc3RhcnRzV2l0aCgnZ3JvdXBzLycpKSB7XG4gICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVFxuICAgICAgICB9LCBuZXcgRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBncm91cERvY0lkIGZvciBlZGdlIGNyZWF0aW9uJyksIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnTmFtZXMgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdOYW1lcylcbiAgICAgICAgLnRoZW4oKHJlc29sdmVkVGFncykgPT4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzOiByZXNvbHZlZFRhZ3N9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY3JlYXRlR3JvdXBFZGdlKGNvbnRleHQsIHNlc3Npb25Eb2NJZCwgZ3JvdXBEb2NJZClcbiAgICAgICAgLnRoZW4oKCkgPT4gZ3JvdXApKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IEdyb3VwVHlwZSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGUnO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpZFxuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpdGVtSWQgPSBwYXJzZUlkKGlkKTtcblxuICByZXR1cm4gdXBkYXRlSXRlbTxHcm91cFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkdST1VQUywgaXRlbUlkLCBidWlsZEdyb3VwTXV0YXRpb24oaXRlbSkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGdyb3VwRG9jSWR9ID0gZ3JvdXA7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3QgdGFnTmFtZXMgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdOYW1lcylcbiAgICAgICAgLnRoZW4oKHJlc29sdmVkVGFncykgPT4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzOiByZXNvbHZlZFRhZ3N9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gZ3JvdXApO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIHJldHVybiBkZWxldGVJdGVtPEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCBmb3JtYXRJdGVtSWQpXG4gICAgLnRoZW4oKGdyb3VwKSA9PiBncm91cCB8fCAoe19rZXk6IGZvcm1hdEl0ZW1JZH0gYXMgR3JvdXBUeXBlKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cHNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJlYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cHNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbiA9IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCByIElOIE9VVEJPVU5EICR7dXNlckRvY0lkfSBoYXNSZWFjdGlvblxuICAgICAgRklMVEVSIHIudmFsdWUgPT0gJHtmb3JtYXRSZWFjdGlvbn1cbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7dmFsdWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0dyb3VwZWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBVc2VyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdpc0dyb3VwZWQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgZm9ybWF0R3JvdXBJZCA9IHBhcnNlSWQoZ3JvdXBJZCk7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCB0byBjaGVjayBncm91cCBtZW1iZXJzaGlwIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiAke2dyb3Vwc0NvbGxlY3Rpb259XG4gICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEdyb3VwSWR9XG4gICAgRk9SIHUgSU4gSU5CT1VORCBnLl9pZCAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtmb3JtYXRVc2VySWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXJlc3VsdHMubGVuZ3RoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBncm91cElkLFxuICAgICAgICBpc1ZhbGlkLFxuICAgICAgICB1c2VySWRcbiAgICAgIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7c2Vzc2lvbjoge3VzZXJJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwibmFtZXMiOlsiZmxhdHRlbiIsInVuaXFCeSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsInVwZGF0ZUl0ZW0iLCJleHRyYWN0VGFncyIsImdldFRhZ0xpc3RCeU5hbWUiLCJ1cGRhdGVUYWdzSW5JdGVtIiwiZXZlbnRDYXRlZ29yeSIsImdyb3Vwc0NvbGxlY3Rpb24iLCJHUk9VUFMiLCJ1c2Vyc0NvbGxlY3Rpb24iLCJVU0VSUyIsImhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uIiwiSEFTX0NPTk5FQ1RJT04iLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJnZXRHcm91cExpc3RCeUFwcCIsImNvbnRleHQiLCJmcm9tIiwidG8iLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJhcWxRcnkiLCJ1bmRlZmluZWQiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0R3JvdXBMaXN0QnlVc2VyIiwidXNlcklkIiwiZ2V0R3JvdXBMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJQcm9taXNlIiwibWFwIiwidGFnTmFtZSIsImZvcm1hdFRhZ05hbWUiLCJsaW1pdENsYXVzZSIsInJlc3VsdHMiLCJpdGVtIiwiX2tleSIsImdldEdyb3VwQnlJZCIsIml0ZW1JZCIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJmb3JtYXRJdGVtSWQiLCJuZXh0IiwiZ3JvdXAiLCJnZXRHcm91cERldGFpbHMiLCJncm91cElkIiwiZm9ybWF0R3JvdXBJZCIsImNyZWF0ZUdyb3VwRWRnZSIsInVzZXJEb2NJZCIsImdyb3VwRG9jSWQiLCJmb3JtYXRVc2VEb2NJZCIsImZvcm1hdEdyb3VwRG9jSWQiLCJub3ciLCJEYXRlIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJ0eXBlIiwic2F2ZSIsInJldHVybk5ldyIsImJ1aWxkR3JvdXBNdXRhdGlvbiIsImRlc2NyaXB0aW9uIiwibmFtZSIsInN1YnN0cmluZyIsImFkZEdyb3VwIiwic2Vzc2lvbkRvY0lkIiwiaWQiLCJpbnNlcnQiLCJfaWQiLCJzdGFydHNXaXRoIiwiSU5WQUxJRF9JTlBVVCIsIkVycm9yIiwicmVzb2x2ZWRUYWdzIiwiaXRlbURvY0lkIiwidGFncyIsInVwZGF0ZUdyb3VwIiwiZGVsZXRlR3JvdXAiLCJnZXRHcm91cHNCeVJlYWN0aW9uIiwicmVhY3Rpb24iLCJmb3JtYXRSZWFjdGlvbiIsImlzR3JvdXBlZCIsImZvcm1hdFVzZXJJZCIsImlzVmFsaWQiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLE9BQU8sUUFBTyw4QkFBOEI7QUFDcEQsU0FBUUMsTUFBTSxRQUFPLDJCQUEyQjtBQUNoRCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQzNGLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxRQUFPLFlBQVk7QUFDckUsU0FBUUMsV0FBVyxFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLFFBQU8sWUFBWTtBQU0xRSxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsbUJBQW1CZCxRQUFRQyxZQUFZYyxNQUFNO0FBQ25ELE1BQU1DLGtCQUFrQmhCLFFBQVFDLFlBQVlnQixLQUFLO0FBQ2pELE1BQU1DLDBCQUEwQmxCLFFBQVFFLE1BQU1pQixjQUFjO0FBQzVELE1BQU1DLHFCQUFxQnBCLFFBQVFFLE1BQU1tQixTQUFTO0FB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
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2dyb3Vwcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtmbGF0dGVufSBmcm9tICdAbmxhYnMvdXRpbHMvYXJyYXlzL2ZsYXR0ZW4nO1xuaW1wb3J0IHt1bmlxQnl9IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvdW5pcSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2V4dHJhY3RUYWdzLCBnZXRUYWdMaXN0QnlOYW1lLCB1cGRhdGVUYWdzSW5JdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtHcm91cEVkZ2VUeXBlLCBHcm91cFR5cGUsIEdyb3VwVXNlcn0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdncm91cHMnO1xuY29uc3QgZ3JvdXBzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuR1JPVVBTKTtcbmNvbnN0IHVzZXJzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuVVNFUlMpO1xuY29uc3QgaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19DT05ORUNUSU9OKTtcbmNvbnN0IGlzVGFnZ2VkQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSVNfVEFHR0VEKTtcblxuLyoqXG4gKiBHZXQgYWxsIGdyb3VwcyBmb3IgdGhlIGFwcCB3aXRoIHRoZWlyIHVzZXJzXG4gKiBOb3RlOiBVc2VzIGN1c3RvbSBxdWVyeSBmb3IgZWRnZSB0cmF2ZXJzYWwgdG8gaW5jbHVkZSB1c2Vyc1xuICovXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlBcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbT86IG51bWJlciwgdG8/OiBudW1iZXIpOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cExpc3RCeUFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICAvLyBDb21wbGV4IGVkZ2UgdHJhdmVyc2FsIHF1ZXJ5IC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgZyBJTiAke2dyb3Vwc0NvbGxlY3Rpb259XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBNRVJHRSh1LCB7dHlwZTogbC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7ZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQgPyBsaXRlcmFsKGBMSU1JVCAke2Zyb219LCAke3RvIC0gZnJvbX1gKSA6IGxpdGVyYWwoJycpfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzfSlcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTGlzdEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlcixcbiAgdG86IG51bWJlclxuKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIC8vIENvbXBsZXggZWRnZSB0cmF2ZXJzYWwgcXVlcnkgd2l0aCB1c2VyIGZpbHRlcmluZyAtIGtlZXAgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGcsIGUgSU4gSU5CT1VORCAke2B1c2Vycy8ke3VzZXJJZH1gfSAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgICBSRVRVUk4gTUVSR0UodSwge3R5cGU6IGwudHlwZX0pXG4gICAgICApXG4gICAgICAke2Zyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkID8gbGl0ZXJhbChgTElNSVQgJHtmcm9tfSwgJHt0byAtIGZyb219YCkgOiBsaXRlcmFsKCcnKX1cbiAgICAgIFNPUlQgZy5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyc30pXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ05hbWVzOiBzdHJpbmdbXSxcbiAgZnJvbTogbnVtYmVyLFxuICB0bzogbnVtYmVyXG4pOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRMaXN0QnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIC8vIENvbXBsZXggbXVsdGktdGFnIHF1ZXJ5IHdpdGggZWRnZSB0cmF2ZXJzYWwgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgdGFnTmFtZXMubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdFRhZ05hbWUgPSBwYXJzZUlkKHRhZ05hbWUpO1xuICAgICAgY29uc3QgbGltaXRDbGF1c2UgPSBmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCA/IGBMSU1JVCAke2Zyb219LCAke3RvIC0gZnJvbX1gIDogJyc7XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwLCBlIElOIE9VVEJPVU5EICR7YHRhZ3MvJHtmb3JtYXRUYWdOYW1lfWB9ICR7aXNUYWdnZWRDb2xsZWN0aW9ufVxuICAgICAgICAgIEZPUiB1IElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgICAgIExFVCBsaWtlcyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCBsaWtlIElOIElOQk9VTkQgcC5faWQgbGlrZXNcbiAgICAgICAgICAgIEZJTFRFUiBsaWtlLnZhbHVlID09ICdsaWtlJ1xuICAgICAgICAgICAgUkVUVVJOIGxpa2VcbiAgICAgICAgICApXG4gICAgICAgICAgTEVUIGRpc2xpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2Rpc2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBGSUxURVIgZS50eXBlID09ICdwb3N0JyAmJiBwLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICAke2xpdGVyYWwobGltaXRDbGF1c2UpfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7dXNlcjp1LCBsaWtlczpMRU5HVEgobGlrZXMpLCBkaXNsaWtlczpMRU5HVEgoZGlzbGlrZXMpfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgKVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiB1bmlxQnkoZmxhdHRlbihyZXN1bHRzKSwgKGl0ZW06IGFueSkgPT4gaXRlbS5fa2V5KSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cEJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbklkID0gc2Vzc2lvbj8udXNlcklkIHx8ICcnO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCB3aXRoIHVzZXIgb3duZXJzaGlwIGNoZWNrIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZywgZSBJTiBPVVRCT1VORCAke2B1c2Vycy8ke3Nlc3Npb25JZH1gfSBoYXNDb25uZWN0aW9uXG4gICAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwRGV0YWlscyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRHcm91cElkID0gcGFyc2VJZChncm91cElkKTtcbiAgcmV0dXJuIGdldEl0ZW1CeTxHcm91cFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkdST1VQUywge19rZXk6IGZvcm1hdEdyb3VwSWR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcm91cEVkZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJEb2NJZDogc3RyaW5nLFxuICBncm91cERvY0lkOiBzdHJpbmdcbik6IFByb21pc2U8R3JvdXBFZGdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlR3JvdXBFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRVc2VEb2NJZCA9IHBhcnNlQXJhbmdvSWQodXNlckRvY0lkKTtcbiAgY29uc3QgZm9ybWF0R3JvdXBEb2NJZCA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBEb2NJZCk7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNDb25uZWN0aW9uJyk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGdyb3VwLSR7Zm9ybWF0VXNlRG9jSWR9LSR7Zm9ybWF0R3JvdXBEb2NJZH1gKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgIF9mcm9tOiBmb3JtYXRVc2VEb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmb3JtYXRHcm91cERvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgdHlwZTogJ2dyb3VwcydcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7c2Vzc2lvbjoge3VzZXJJZDogZm9ybWF0VXNlRG9jSWR9fSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5jb25zdCBidWlsZEdyb3VwTXV0YXRpb24gPSAoe2Rlc2NyaXB0aW9uID0gJycsIG5hbWUgPSAnVW50aXRsZWQnLCB0eXBlfTogR3JvdXBUeXBlKTogUGFydGlhbDxHcm91cFR5cGU+ID0+ICh7XG4gIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgNjQwKSxcbiAgbmFtZSxcbiAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDE2KSB8fCAncHJpdmF0ZSdcbn0pO1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCB7ZGVzY3JpcHRpb24gPSAnJ306IEdyb3VwVHlwZSA9IGl0ZW07XG4gIGNvbnN0IGlkID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGluc2VydDogR3JvdXBUeXBlID0ge1xuICAgIF9rZXk6IGlkLFxuICAgIC4uLmJ1aWxkR3JvdXBNdXRhdGlvbihpdGVtKVxuICB9O1xuXG4gIHJldHVybiBhZGRJdGVtPEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCBpbnNlcnQpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3Qge19pZDogZ3JvdXBEb2NJZH06IEdyb3VwVHlwZSA9IGdyb3VwO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBzZXNzaW9uRG9jSWQgYW5kIGdyb3VwRG9jSWRcbiAgICAgIGlmICghc2Vzc2lvbkRvY0lkIHx8IHR5cGVvZiBzZXNzaW9uRG9jSWQgIT09ICdzdHJpbmcnIHx8ICFzZXNzaW9uRG9jSWQuc3RhcnRzV2l0aCgndXNlcnMvJykpIHtcbiAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5JTlZBTElEX0lOUFVUXG4gICAgICAgIH0sIG5ldyBFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIHNlc3Npb25Eb2NJZCBmb3IgZWRnZSBjcmVhdGlvbicpLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIWdyb3VwRG9jSWQgfHwgdHlwZW9mIGdyb3VwRG9jSWQgIT09ICdzdHJpbmcnIHx8ICFncm91cERvY0lkLnN0YXJ0c1dpdGgoJ2dyb3Vwcy8nKSkge1xuICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLklOVkFMSURfSU5QVVRcbiAgICAgICAgfSwgbmV3IEVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgZ3JvdXBEb2NJZCBmb3IgZWRnZSBjcmVhdGlvbicpLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhZ05hbWVzID0gZXh0cmFjdFRhZ3MoZGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgdGFnTmFtZXMpXG4gICAgICAgIC50aGVuKChyZXNvbHZlZFRhZ3MpID0+IHVwZGF0ZVRhZ3NJbkl0ZW0oY29udGV4dCwge2l0ZW1Eb2NJZDogZ3JvdXBEb2NJZCwgdGFnczogcmVzb2x2ZWRUYWdzfSkpXG4gICAgICAgIC50aGVuKCgpID0+IGNyZWF0ZUdyb3VwRWRnZShjb250ZXh0LCBzZXNzaW9uRG9jSWQsIGdyb3VwRG9jSWQpXG4gICAgICAgIC50aGVuKCgpID0+IGdyb3VwKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlJztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgaWRcbiAgfTogR3JvdXBUeXBlID0gaXRlbTtcbiAgY29uc3QgaXRlbUlkID0gcGFyc2VJZChpZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZUl0ZW08R3JvdXBUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5HUk9VUFMsIGl0ZW1JZCwgYnVpbGRHcm91cE11dGF0aW9uKGl0ZW0pKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfSA9IGdyb3VwO1xuXG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIGNvbnN0IHRhZ05hbWVzID0gZXh0cmFjdFRhZ3MoZGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgdGFnTmFtZXMpXG4gICAgICAgIC50aGVuKChyZXNvbHZlZFRhZ3MpID0+IHVwZGF0ZVRhZ3NJbkl0ZW0oY29udGV4dCwge2l0ZW1Eb2NJZDogZ3JvdXBEb2NJZCwgdGFnczogcmVzb2x2ZWRUYWdzfSkpXG4gICAgICAgIC50aGVuKCgpID0+IGdyb3VwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICByZXR1cm4gZGVsZXRlSXRlbTxHcm91cFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkdST1VQUywgZm9ybWF0SXRlbUlkKVxuICAgIC50aGVuKChncm91cCkgPT4gZ3JvdXAgfHwgKHtfa2V5OiBmb3JtYXRJdGVtSWR9IGFzIEdyb3VwVHlwZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBzQnlSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBzQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb24gPSBwYXJzZUNoYXIocmVhY3Rpb24sIDMyKTtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgciBJTiBPVVRCT1VORCAke3VzZXJEb2NJZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLnZhbHVlID09ICR7Zm9ybWF0UmVhY3Rpb259XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4ge3ZhbHVlOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcm91cGVkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVXNlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnaXNHcm91cGVkJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuXG4gIC8vIENvbXBsZXggZWRnZSB0cmF2ZXJzYWwgdG8gY2hlY2sgZ3JvdXAgbWVtYmVyc2hpcCAtIGtlZXAgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcgSU4gJHtncm91cHNDb2xsZWN0aW9ufVxuICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgIEZPUiB1IElOIElOQk9VTkQgZy5faWQgJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICBGSUxURVIgdS5fa2V5ID09ICR7Zm9ybWF0VXNlcklkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IFtdKSA9PiB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gISFyZXN1bHRzLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgaXNWYWxpZCxcbiAgICAgICAgdXNlcklkXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwge3Nlc3Npb246IHt1c2VySWR9fSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sIm5hbWVzIjpbImZsYXR0ZW4iLCJ1bmlxQnkiLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJhcWwiLCJsaXRlcmFsIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsInVzZURiIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJ1cGRhdGVJdGVtIiwiZXh0cmFjdFRhZ3MiLCJnZXRUYWdMaXN0QnlOYW1lIiwidXBkYXRlVGFnc0luSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJncm91cHNDb2xsZWN0aW9uIiwiR1JPVVBTIiwidXNlcnNDb2xsZWN0aW9uIiwiVVNFUlMiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsIkhBU19DT05ORUNUSU9OIiwiaXNUYWdnZWRDb2xsZWN0aW9uIiwiSVNfVEFHR0VEIiwiZ2V0R3JvdXBMaXN0QnlBcHAiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiYXFsUXJ5IiwidW5kZWZpbmVkIiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiYWxsIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldEdyb3VwTGlzdEJ5VXNlciIsInVzZXJJZCIsImdldEdyb3VwTGlzdEJ5VGFncyIsInRhZ05hbWVzIiwiUHJvbWlzZSIsIm1hcCIsInRhZ05hbWUiLCJmb3JtYXRUYWdOYW1lIiwibGltaXRDbGF1c2UiLCJyZXN1bHRzIiwiaXRlbSIsIl9rZXkiLCJnZXRHcm91cEJ5SWQiLCJpdGVtSWQiLCJzZXNzaW9uIiwic2Vzc2lvbklkIiwiZm9ybWF0SXRlbUlkIiwibmV4dCIsImdyb3VwIiwiZ2V0R3JvdXBEZXRhaWxzIiwiZ3JvdXBJZCIsImZvcm1hdEdyb3VwSWQiLCJjcmVhdGVHcm91cEVkZ2UiLCJ1c2VyRG9jSWQiLCJncm91cERvY0lkIiwiZm9ybWF0VXNlRG9jSWQiLCJmb3JtYXRHcm91cERvY0lkIiwibm93IiwiRGF0ZSIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwidHlwZSIsInNhdmUiLCJyZXR1cm5OZXciLCJidWlsZEdyb3VwTXV0YXRpb24iLCJkZXNjcmlwdGlvbiIsIm5hbWUiLCJzdWJzdHJpbmciLCJhZGRHcm91cCIsInNlc3Npb25Eb2NJZCIsImlkIiwiaW5zZXJ0IiwiX2lkIiwic3RhcnRzV2l0aCIsIklOVkFMSURfSU5QVVQiLCJFcnJvciIsInJlc29sdmVkVGFncyIsIml0ZW1Eb2NJZCIsInRhZ3MiLCJ1cGRhdGVHcm91cCIsImRlbGV0ZUdyb3VwIiwiZ2V0R3JvdXBzQnlSZWFjdGlvbiIsInJlYWN0aW9uIiwiZm9ybWF0UmVhY3Rpb24iLCJpc0dyb3VwZWQiLCJmb3JtYXRVc2VySWQiLCJpc1ZhbGlkIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxPQUFPLFFBQU8sOEJBQThCO0FBQ3BELFNBQVFDLE1BQU0sUUFBTywyQkFBMkI7QUFDaEQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUMzRixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsUUFBTyxZQUFZO0FBQ3JFLFNBQVFDLFdBQVcsRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixRQUFPLFlBQVk7QUFNMUUsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLG1CQUFtQmQsUUFBUUMsWUFBWWMsTUFBTTtBQUNuRCxNQUFNQyxrQkFBa0JoQixRQUFRQyxZQUFZZ0IsS0FBSztBQUNqRCxNQUFNQywwQkFBMEJsQixRQUFRRSxNQUFNaUIsY0FBYztBQUM1RCxNQUFNQyxxQkFBcUJwQixRQUFRRSxNQUFNbUIsU0FB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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */
5
5
  import { PutObjectCommandInput } from '@aws-sdk/client-s3';
6
6
  import type { QueryFilter } from '../types/apps.types.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { get as httpGet } from '@nlabs/rip-hunter';
5
5
  import { parseNum } from '@nlabs/utils/parsers/numbers';
6
6
  import { createHash, parseArangoId, parseChar, parseId, parseString } from '@nlabs/utils/parsers/strings';
@@ -870,4 +870,4 @@ export const deleteImage = async (context, imageId)=>{
870
870
  }
871
871
  };
872
872
 
873
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0RlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsIFB1dE9iamVjdENvbW1hbmRJbnB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IGV4aWZSZWFkZXIgZnJvbSAnZXhpZi1yZWFkZXInO1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRJbWFnZUV4dGVuc2lvbn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2VVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRHcm91cERldGFpbHMsIGlzR3JvdXBlZH0gZnJvbSAnLi9ncm91cHMuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtzM0RlbGV0ZUxpc3QsIHMzR2V0U2lnbmVkVXJsLCBzM1B1dH0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge1F1ZXJ5RmlsdGVyfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtHcm91cFR5cGUsIEdyb3VwVXNlcn0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtJbWFnZUVkZ2VUeXBlLCBJbWFnZU9wdGlvbnMsIEltYWdlVHlwZSwgSW1hZ2VVcmxEYXRhfSBmcm9tICcuLi90eXBlcy9pbWFnZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcblxuLy8gRGVmaW5lIGludGVyZmFjZSBmb3IgSFRUUCByZXNwb25zZSB3aXRoIGJ1ZmZlciBtZXRob2RcbmludGVyZmFjZSBIdHRwUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG4gIGJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XG59XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnaW1hZ2VzJztcbmNvbnN0IGhhc1JlYWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKTtcbmNvbnN0IGhhc01lZGlhQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX01FRElBKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgTUVESUFfSVRFTV9DT0xMRUNUSU9OUzogcmVhZG9ubHkgQXJhbmdvRGJDb2xsZWN0aW9uW10gPSBbXG4gIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgQ09MTEVDVElPTlMuUE9TVFMsXG4gIENPTExFQ1RJT05TLkdST1VQU1xuXTtcblxudHlwZSBTaGFycEZvcm1hdCA9IEV4dHJhY3Q8UGFyYW1ldGVyczxSZXR1cm5UeXBlPHR5cGVvZiBzaGFycD5bJ3RvRm9ybWF0J10+WzBdLCBzdHJpbmc+O1xuXG5jb25zdCBnZXRNZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlPzogQXJhbmdvRGJDb2xsZWN0aW9uKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBkb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcblxuICBpZihkb2NJZCkge1xuICAgIHJldHVybiBbZG9jSWRdO1xuICB9XG5cbiAgY29uc3QgaXRlbUtleSA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICBpZighaXRlbUtleSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmKGl0ZW1UeXBlICYmIE1FRElBX0lURU1fQ09MTEVDVElPTlMuaW5jbHVkZXMoaXRlbVR5cGUpKSB7XG4gICAgcmV0dXJuIFtgJHtpdGVtVHlwZX0vJHtpdGVtS2V5fWBdO1xuICB9XG5cbiAgcmV0dXJuIE1FRElBX0lURU1fQ09MTEVDVElPTlMubWFwKChjb2xsZWN0aW9uKSA9PiBgJHtjb2xsZWN0aW9ufS8ke2l0ZW1LZXl9YCk7XG59O1xuXG5jb25zdCBub3JtYWxpemVJbWFnZUZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IFNoYXJwRm9ybWF0ID0+XG4gIChmb3JtYXQgPT09ICdqcGcnID8gJ2pwZWcnIDogZm9ybWF0KSBhcyBTaGFycEZvcm1hdDtcblxuY29uc3QgaW1hZ2VFeGlmTWV0YWRhdGEgPSAoZXhpZj86IEJ1ZmZlcikgPT4ge1xuICBpZighZXhpZikgcmV0dXJuIHt9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBleGlmUmVhZGVyKGV4aWYpO1xuICAgIGNvbnN0IHRha2VuID0gbWV0YWRhdGEuUGhvdG8/LkRhdGVUaW1lT3JpZ2luYWw7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ha2U6IG1ldGFkYXRhLkltYWdlPy5NYWtlLFxuICAgICAgbW9kZWw6IG1ldGFkYXRhLkltYWdlPy5Nb2RlbCxcbiAgICAgIHRha2VuOiB0YWtlbiBpbnN0YW5jZW9mIERhdGUgPyB0YWtlbi5nZXRUaW1lKCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld0ltYWdlID0gKFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKGltYWdlPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VJbWFnZU9wdGlvbnMgPSAob3B0aW9uczogSW1hZ2VPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgcmV0dXJuIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUoJ2ltYWdlcycsICdpJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICBGT1IgaW1hZ2UsIHIgSU4gSU5CT1VORCBpLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhZ3MnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdGFncyA9IChcbiAgICAgICAgICBGT1IgdCwgcGwgSU4gSU5CT1VORCBpLl9pZCBpc1RhZ2dlZFxuICAgICAgICAgIFJFVFVSTiB0XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoXG4gICAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgaS51c2VySWQgPT0gdS5fa2V5XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3VzZXJzOnVzZXJzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywge3VzZXJJZDogZm9ybWF0VXNlcklkfSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgY3VzdG9tUXVlcmllczogW1xuICAgICAgYExFVCB1c2VyID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHUuX2tleSA9PSBkb2MudXNlcklkIExJTUlUIDEgUkVUVVJOIHUpYFxuICAgIF0sXG4gICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2Zyb20sIHRvLCB1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VDb3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUNvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIGkgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBpLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIGkudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aXRlbUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICBvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IG9wdGlvbnM/Lml0ZW1UeXBlID8gcGFyc2VDaGFyKFN0cmluZyhvcHRpb25zLml0ZW1UeXBlIHx8ICcnKSwgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uIDogdW5kZWZpbmVkO1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCwgZm9ybWF0SXRlbVR5cGUpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICBMRVQgaSA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKGkpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgnaScpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSk7XG5cbiAgICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICAgIGNvbnN0IGlzT3duZXIgPSAhIXNlc3Npb25Vc2VySWQgJiYgISFvd25lclVzZXJJZCAmJiBzZXNzaW9uVXNlcklkID09PSBvd25lclVzZXJJZDtcblxuICAgIGlmKGlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGltYWdlKSA9PiBub3JtYWxpemVJbWFnZVByaXZhY3koaW1hZ2U/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gICAgbGV0IGNhblZpZXdWaXAgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZygobGlzdFswXSBhcyBJbWFnZVR5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZ30pPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgICBjb25zdCBtZWRpYUl0ZW1UeXBlID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30pPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgICBpZihtZWRpYUl0ZW1UeXBlID09PSBDT0xMRUNUSU9OUy5QRVJTT05BUyAmJiBtZWRpYUl0ZW1LZXkpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgICBjYW5WaWV3VmlwID0gYXdhaXQgaGFzU3Vic2NyaXB0aW9uVG9JdGVtKGNvbnRleHQsIG1lZGlhSXRlbUtleSwgQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IGNhblZpZXdJbWFnZShpbWFnZSwgc2Vzc2lvblVzZXJJZCwge2NhblZpZXdGcmllbmRzLCBjYW5WaWV3VmlwLCBpc093bmVyfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2l0ZW1JZCwgb3B0aW9uczogey4uLm9wdGlvbnMsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZX19LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlHcm91cCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGFyYW1zOiB7ZmlsdGVyczogUXVlcnlGaWx0ZXJbXSwgZ3JvdXBJZDogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUdyb3VwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZmlsdGVycywgZ3JvdXBJZCwgZnJvbSwgdG99ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtYXRHcm91cElkID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG5cbiAgZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWV9ID0gZmlsdGVyO1xuICAgICAgbGV0IGZvcm1hdENvbmQgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZvcm1hdENvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGBwLmFkZGVkICR7Zm9ybWF0Q29uZH0gJHtwYXJzZU51bSh2YWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIGdldEdyb3VwRGV0YWlscyhjb250ZXh0LCBmb3JtYXRHcm91cElkKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBpZihncm91cC5wcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBmb3JtYXRHcm91cElkfSk7XG4gICAgICAgIGNvbnN0IGZpbHRlclN0ciA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgIEZPUiBpIElOIEZMQVRURU4oXG4gICAgICAgICAgICBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlclN0cil9XG4gICAgICAgICAgICAgIExFVCBpbWFnZXMgPSAoXG4gICAgICAgICAgICAgICAgRk9SIGksIGUgSU4gT1VUQk9VTkQgcC5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgICAgICAgICBGSUxURVIgZS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICBSRVRVUk4gaW1hZ2VzXG4gICAgICAgICAgKVxuICAgICAgICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgYDtcblxuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7ZmlsdGVycywgZnJvbSwgZ3JvdXBJZCwgdG99LFxuICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzR3JvdXBlZChjb250ZXh0LCBzZXNzaW9uSWQsIGdyb3VwSWQpXG4gICAgICAgIC50aGVuKChncm91cGVkOiBHcm91cFVzZXIpID0+IHtcbiAgICAgICAgICBpZihncm91cGVkLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGdyb3VwZWQuZ3JvdXBJZH0pO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgICAgRk9SIHAgSU4gcG9zdFxuICAgICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyTGlzdCl9XG4gICAgICAgICAgICAgICAgRk9SIGYgSU4gcC5maWxlc1xuICAgICAgICAgICAgICAgICAgRklMVEVSIGYudHlwZSA9PSBcImltYWdlL2pwZWdcIiB8fCBmLnR5cGUgPT0gXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICAgICAgUkVUVVJOIGZcbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRJbWFnZU9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3IudHlwZSA9PSBcImltYWdlc1wiJyxcbiAgICBgUE9TSVRJT04oJHtKU09OLnN0cmluZ2lmeShmb3JtYXRSZWFjdGlvbnMpfSwgTE9XRVIoci5uYW1lKSlgXTtcblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9IGhhc1JlYWN0aW9uXG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGwgSU4gSU5CT1VORCBpLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbC50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIG1lZGlhLml0ZW1LZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJCeS5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0UGVyc29uYURvY0lkID0gKHBlcnNvbmFJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gcGFyc2VBcmFuZ29JZChwZXJzb25hSWQpO1xuXG4gIGlmKHBlcnNvbmFEb2NJZCkge1xuICAgIHJldHVybiBwZXJzb25hRG9jSWQ7XG4gIH1cblxuICBjb25zdCBwZXJzb25hS2V5ID0gcGFyc2VJZChwZXJzb25hSWQpO1xuICByZXR1cm4gcGVyc29uYUtleSA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BlcnNvbmFLZXl9YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJyxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogSW1hZ2VPcHRpb25zXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMnO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJyk7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGdldFBlcnNvbmFEb2NJZChwZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCk7XG4gIGNvbnN0IHJlYWN0aW9uTmFtZXMgPSBBcnJheS5pc0FycmF5KHJlYWN0aW9ucylcbiAgICA/IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29sZWFuKVxuICAgIDogW107XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcblxuICBpZighcGVyc29uYURvY0lkIHx8ICFyZWFjdGlvbk5hbWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGltYWdlLCByZWFjdGlvbiBJTiBPVVRCT1VORCAke3BlcnNvbmFEb2NJZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGxpbmsgSU4gSU5CT1VORCBpbWFnZS5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGxpbmsudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobGluay5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGxpbmsuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7cGVyc29uYXNDb2xsZWN0aW9ufSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICBGSUxURVIgTE9XRVIocmVhY3Rpb24udHlwZSB8fCBcIlwiKSBJTiBbXCJpbWFnZVwiLCBcImltYWdlc1wiXVxuICAgICAgRklMVEVSIFBPU0lUSU9OKCR7cmVhY3Rpb25OYW1lc30sIExPV0VSKHJlYWN0aW9uLm5hbWUgfHwgcmVhY3Rpb24udmFsdWUgfHwgXCJcIikpXG4gICAgICBTT1JUIHJlYWN0aW9uLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKGltYWdlLCB7XG4gICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgIH0pXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcGVyc29uYUlkLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIG9wZXJhdG9yOiAnQU5EJyxcbiAgICBmaWx0ZXJzOiBbe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0SW1hZ2VJZH1dXG4gIH0gYXMgYW55O1xuXG4gIHJldHVybiBnZXRJdGVtQnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckltYWdlUGF0aCA9ICh1c2VySWQ6IHN0cmluZywgaW1hZ2VJZDogc3RyaW5nLCBpbWFnZVR5cGU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAnaW1hZ2VzJyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZpbGVuYW1lID0gYCR7aW1hZ2VJZH0uJHtnZXRJbWFnZUV4dGVuc2lvbihpbWFnZVR5cGUpfWA7XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBJbWFnZVVybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZFxufTogSW1hZ2VVcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighaW1hZ2VJZCkge1xuICAgIGlmKGltYWdlVHlwZSA9PT0gJ3BlcnNvbmEnKSB7XG4gICAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc19iay5qcGdgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc193aC5qcGdgO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBpbWFnZU5hbWUgPSBpc1RodW1iID8gYCR7aW1hZ2VJZH0tdGguJHtpbWFnZVR5cGV9YCA6IGAke2ltYWdlSWR9LiR7aW1hZ2VUeXBlID09PSAncGVyc29uYScgfHwgaW1hZ2VUeXBlID09PSAnb3RoZXInID8gJ2pwZycgOiBpbWFnZVR5cGV9YDtcbiAgY29uc3QgaW1hZ2VVcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7aW1hZ2VOYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VVcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGltYWdlRGlyID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBJbWFnZVVybERhdGEpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighaW1hZ2VJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgY29uZmlndXJlZEltYWdlVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8ICcnKTtcbiAgY29uc3QgY29uZmlndXJlZEFwcFVybCA9IFN0cmluZyhDb25maWcuZ2V0KCdhcHAudXJsJykgfHwgJycpO1xuICBjb25zdCBwdWJsaWNCYXNlVXJsID0gY29uZmlndXJlZEFwcFVybFxuICAgID8gYGh0dHBzOi8vYm94LiR7Y29uZmlndXJlZEFwcFVybH1gXG4gICAgOiAoY29uZmlndXJlZEltYWdlVXJsIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWApO1xuICBjb25zdCBkZXZCYXNlVXJsID0gY29uZmlndXJlZEFwcFVybFxuICAgID8gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG5cbiAgLy8gQWx3YXlzIHVzZSBzaWduZWQgVVJMcyBmb3IgdGh1bWJuYWlsc1xuICBpZihpc1RodW1iKSB7XG4gICAgdXJsVHlwZSA9ICdzaWduZWQnO1xuICB9XG5cbiAgY29uc3QgdGh1bWJTdWZmaXggPSBpc1RodW1iID8gJy10aCcgOiAnJztcbiAgY29uc3QgaW1hZ2VLZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtpbWFnZURpcn0vJHtpbWFnZUlkfSR7dGh1bWJTdWZmaXh9LiR7aW1hZ2VUeXBlfWA7XG5cbiAgc3dpdGNoKHVybFR5cGUpIHtcbiAgICBjYXNlICdzaWduZWQnOiB7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0TmFtZSwgRXhwaXJlczogNjAgKiA2MCwgS2V5OiBpbWFnZUtleX0pO1xuICAgIH1cbiAgICBjYXNlICdwdWJsaWMnOiB7XG4gICAgICByZXR1cm4gYCR7cHVibGljQmFzZVVybH0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYCR7ZGV2QmFzZVVybH0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzaXplQW5kU2F2ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnLCBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNpemVTYXZlSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBpbWdXID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nU2l6ZScpO1xuICBjb25zdCBpbWdRID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nUXVhbGl0eScpO1xuICBjb25zdCBmb3JtYXQgPSAoZmlsZVR5cGUuc3BsaXQoJy8nKSlbMV0gfHwgJ2pwZWcnO1xuICBjb25zdCBzaGFycEZvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRm9ybWF0KGZvcm1hdCk7XG4gIGxldCBpbWFnZU9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgdGh1bWJPcHRpbWl6ZWRCdWZmZXI6IEJ1ZmZlciA9IGJ1ZmZlcjtcbiAgbGV0IGltYWdlSWRlbnRpdHk6IEltYWdlVHlwZSA9IHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgIGltYWdlSWRcbiAgfTtcblxuICB0cnkge1xuICAgIGltYWdlT3B0aW1pemVkQnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxuICAgICAgLnJvdGF0ZSgpXG4gICAgICAucmVzaXplKHtcbiAgICAgICAgZml0OiAnaW5zaWRlJyxcbiAgICAgICAgaGVpZ2h0OiBpbWdXLFxuICAgICAgICB3aWR0aDogaW1nVyxcbiAgICAgICAgd2l0aG91dEVubGFyZ2VtZW50OiB0cnVlXG4gICAgICB9KVxuICAgICAgLnRvRm9ybWF0KHNoYXJwRm9ybWF0LCB7cXVhbGl0eTogaW1nUX0pXG4gICAgICAudG9CdWZmZXIoKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGltYWdlT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCb2R5OiBpbWFnZU9wdGltaXplZEJ1ZmZlcixcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgICAgS2V5OiBnZXRVc2VySW1hZ2VQYXRoKHNlc3Npb25JZCwgaW1hZ2VJZCwgZmlsZVR5cGUsICdpbWFnZXMnKVxuICAgIH07XG4gICAgYXdhaXQgczNQdXQoaW1hZ2VPYmopO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgW2ltYWdlTWV0YWRhdGEsIGltYWdlU3RhdHMsIHNvdXJjZU1ldGFkYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHNoYXJwKGltYWdlT3B0aW1pemVkQnVmZmVyKS5tZXRhZGF0YSgpLFxuICAgICAgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpLnN0YXRzKCksXG4gICAgICBzaGFycChidWZmZXIpLm1ldGFkYXRhKClcbiAgICBdKTtcbiAgICBjb25zdCB7YiwgZywgcn0gPSBpbWFnZVN0YXRzLmRvbWluYW50O1xuICAgIGNvbnN0IGNvbG9yID0gW3IsIGcsIGJdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICBjb25zdCBleGlmTWV0YWRhdGEgPSBpbWFnZUV4aWZNZXRhZGF0YShzb3VyY2VNZXRhZGF0YS5leGlmKTtcblxuICAgIGltYWdlSWRlbnRpdHkgPSB7XG4gICAgICBjb2xvcixcbiAgICAgIGZpbGVTaXplOiBpbWFnZU9wdGltaXplZEJ1ZmZlci5sZW5ndGgsXG4gICAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgICAgaGVpZ2h0OiBpbWFnZU1ldGFkYXRhLmhlaWdodCB8fCAwLFxuICAgICAgaW1hZ2VJZCxcbiAgICAgIC4uLmV4aWZNZXRhZGF0YSxcbiAgICAgIG9yaWVudGF0aW9uOiBpbWFnZU1ldGFkYXRhLm9yaWVudGF0aW9uID8gU3RyaW5nKGltYWdlTWV0YWRhdGEub3JpZW50YXRpb24pIDogdW5kZWZpbmVkLFxuICAgICAgcXVhbGl0eTogaW1nUSxcbiAgICAgIHJlc29sdXRpb246IGltYWdlTWV0YWRhdGEuZGVuc2l0eSA/IGAke2ltYWdlTWV0YWRhdGEuZGVuc2l0eX0gcHBpYCA6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiBpbWFnZU1ldGFkYXRhLndpZHRoIHx8IDBcbiAgICB9O1xuXG4gICAgY29uc3QgdGhtVyA9IENvbmZpZy5nZXQoJ2ltYWdlLnRobVNpemUnKTtcbiAgICBjb25zdCB0aG1RID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtUXVhbGl0eScpO1xuICAgIHRodW1iT3B0aW1pemVkQnVmZmVyID0gYXdhaXQgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpXG4gICAgICAucmVzaXplKHtcbiAgICAgICAgZml0OiAnY292ZXInLFxuICAgICAgICBoZWlnaHQ6IHRobVcsXG4gICAgICAgIHBvc2l0aW9uOiAnY2VudHJlJyxcbiAgICAgICAgd2lkdGg6IHRobVdcbiAgICAgIH0pXG4gICAgICAudG9Gb3JtYXQoc2hhcnBGb3JtYXQsIHtxdWFsaXR5OiB0aG1RfSlcbiAgICAgIC50b0J1ZmZlcigpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGh1bWJPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IHRodW1iT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ3RodW1icycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dCh0aHVtYk9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGltYWdlSWRlbnRpdHk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEltYWdlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ltYWdlSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBpdGVtSWQsIGl0ZW1UeXBlLCBwcml2YWN5ID0gJ3B1YmxpYyd9ID0gaW1hZ2U7XG5cbiAgcmV0dXJuIHJlc2l6ZUFuZFNhdmVJbWFnZShjb250ZXh0LCBpbWFnZUlkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICBfa2V5OiBpbWFnZUlkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3k6IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShwcml2YWN5KSxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGluc2VydClcbiAgICAgICAgLnRoZW4oKHNhdmVkSW1hZ2U6IEltYWdlVHlwZSkgPT4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIHtcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1JZDogaXRlbUlkIHx8IHNlc3Npb25JZCxcbiAgICAgICAgICBpdGVtVHlwZTogcGFyc2VTdHJpbmcoaXRlbVR5cGUgfHwgJ3VzZXJzJywgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uLFxuICAgICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgfSkudGhlbigoKSA9PiBzYXZlZEltYWdlKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVNJWkVcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEltYWdlRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2VFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSBpbWFnZUVkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLWltYWdlLSR7aW1hZ2VJZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYGltYWdlcy8ke2Zvcm1hdEltYWdlSWR9YDtcblxuICBjb25zdCBlZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ2ltYWdlJ1xuICB9O1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGZpbGVEb2NJZCxcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1Eb2NJZCxcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgaXRlbVR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVJbWFnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgYmFzZTY0ID0gJycsXG4gICAgYnVmZmVyOiBpbWFnZUJ1ZmZlcixcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpbWFnZUlkLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBmaWxlVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHVybCA9ICcnXG4gIH0gPSBpbWFnZTtcblxuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gaW1hZ2VJZCB8fCBjcmVhdGVIYXNoKGBpbWFnZS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGN1c3RvbVBhcmFtczogSW1hZ2VUeXBlID0ge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG5cbiAgaWYoYmFzZTY0IHx8IGltYWdlQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gaW1hZ2VCdWZmZXI7XG5cbiAgICBpZihiYXNlNjQpIHtcbiAgICAgIGNvbnN0IGZvcm1hdEJhc2U2NCA9IGJhc2U2NC5zdWJzdHIoYmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgbGV0IHVwZGF0ZWRGaWxlVHlwZSA9IGZpbGVUeXBlO1xuXG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICBidWZmZXIsXG4gICAgICBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlXG4gICAgfTtcblxuICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgIC50aGVuKChpbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSxcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBhZGRJbWFnZUVkZ2UoY29udGV4dCwgaW1hZ2VFZGdlKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogSHR0cFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUXG4gICAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiAocmVzIGFzIEh0dHBSZXNwb25zZSkuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBmaWxlVHlwZTogY29udGVudFR5cGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYWRkSW1hZ2UoY29udGV4dCwgaW1nUGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7aW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ2ltYWdlJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRJbWFnZUVkZ2UoY29udGV4dCwgaW1hZ2VFZGdlKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiAnZmV0Y2hfZXJyb3InXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYoaW1hZ2VJZCkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8ge2Rlc2NyaXB0aW9ufSA6IHt9KSxcbiAgICAgIC4uLihwcml2YWN5ICE9PSB1bmRlZmluZWQgPyB7cHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpfSA6IHt9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdXBkYXRlSXRlbTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmb3JtYXRJbWFnZUlkLCB1cGRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlSW1hZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBkZWxldGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUFdLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZighaW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIERlbGV0ZSBTMyBmaWxlc1xuICAgIGNvbnN0IHtfa2V5OiBpbWFnZUtleX0gPSBpbWFnZTtcbiAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBEZWxldGU6IHtcbiAgICAgICAgT2JqZWN0czogW1xuICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vaW1hZ2VzLyR7aW1hZ2VLZXl9LmpwZ2B9LFxuICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vdGh1bWJzLyR7aW1hZ2VLZXl9LmpwZ2B9XG4gICAgICAgIF0sXG4gICAgICAgIFF1aWV0OiB0cnVlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IGltYWdlKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZ2V0IiwiaHR0cEdldCIsInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiZXhpZlJlYWRlciIsInNoYXJwIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImdldERvY0lkIiwiZ2V0TGltaXQiLCJzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlIiwidXNlRGIiLCJnZXRJbWFnZUV4dGVuc2lvbiIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldEdyb3VwRGV0YWlscyIsImlzR3JvdXBlZCIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzUmVhY3Rpb25Db2xsZWN0aW9uIiwiSEFTX1JFQUNUSU9OIiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJNRURJQV9JVEVNX0NPTExFQ1RJT05TIiwiVVNFUlMiLCJQT1NUUyIsIkdST1VQUyIsImdldE1lZGlhSXRlbURvY0lkcyIsIml0ZW1JZCIsIml0ZW1UeXBlIiwiZG9jSWQiLCJpdGVtS2V5IiwiaW5jbHVkZXMiLCJtYXAiLCJjb2xsZWN0aW9uIiwibm9ybWFsaXplSW1hZ2VGb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUV4aWZNZXRhZGF0YSIsImV4aWYiLCJtZXRhZGF0YSIsInRha2VuIiwiUGhvdG8iLCJEYXRlVGltZU9yaWdpbmFsIiwibWFrZSIsIkltYWdlIiwiTWFrZSIsIm1vZGVsIiwiTW9kZWwiLCJEYXRlIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZUltYWdlUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3SW1hZ2UiLCJpbWFnZSIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJwYXJzZUltYWdlT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJ0eXBlIiwibGltaXQiLCJnZXRJbWFnZU9wdGlvbmFsRmllbGRzIiwiZmllbGRzIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwiZ2V0SW1hZ2VMaXN0QnlVc2VyIiwiY29udGV4dCIsImFjdGlvbiIsImZvcm1hdFVzZXJJZCIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsInBhcmFtcyIsInZhbHVlIiwiREFUQUJBU0VfRVJST1IiLCJnZXRJbWFnZUNvdW50QnlJdGVtIiwiZGF0YWJhc2VOYW1lIiwiaXRlbURvY0lkcyIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJjb3VudCIsImdldEltYWdlTGlzdEJ5SXRlbSIsInNlc3Npb24iLCJzZXNzaW9uVXNlcklkIiwiZm9ybWF0SXRlbVR5cGUiLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImpvaW4iLCJsZW5ndGgiLCJsaXN0IiwiYWxsIiwib3duZXJVc2VySWQiLCJmaWx0ZXIiLCJtZWRpYUl0ZW1LZXkiLCJfbWVkaWFJdGVtS2V5IiwibWVkaWFJdGVtVHlwZSIsIl9tZWRpYUl0ZW1UeXBlIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJnZXRJbWFnZUxpc3RCeUdyb3VwIiwic2Vzc2lvbklkIiwiZmlsdGVycyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY29uZGl0aW9uYWwiLCJuYW1lIiwiZm9ybWF0Q29uZCIsImdyb3VwIiwiZmlsdGVyU3RyIiwiZ3JvdXBlZCIsImlzVmFsaWQiLCJmaWx0ZXJMaXN0IiwiZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRQZXJzb25hRG9jSWQiLCJwZXJzb25hSWQiLCJwZXJzb25hRG9jSWQiLCJwZXJzb25hS2V5IiwiZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInJlYWN0aW9uTmFtZXMiLCJBcnJheSIsImlzQXJyYXkiLCJCb29sZWFuIiwiZ2V0SW1hZ2VCeUlkIiwiaW1hZ2VJZCIsImZvcm1hdEltYWdlSWQiLCJvcGVyYXRvciIsImdldFVzZXJJbWFnZVBhdGgiLCJpbWFnZVR5cGUiLCJkaXIiLCJmaWxlbmFtZSIsImdldEFwcEltYWdlVXJsIiwiYnVja2V0IiwiZGlyZWN0b3J5IiwiaXNUaHVtYiIsInR5cGVJZCIsImJ1Y2tldE5hbWUiLCJpbWFnZU5hbWUiLCJpbWFnZVVybCIsImdldEltYWdlVXJsIiwiaW1hZ2VEaXIiLCJ1cmxUeXBlIiwiY29uZmlndXJlZEltYWdlVXJsIiwiY29uZmlndXJlZEFwcFVybCIsInB1YmxpY0Jhc2VVcmwiLCJkZXZCYXNlVXJsIiwidGh1bWJTdWZmaXgiLCJpbWFnZUtleSIsIkJ1Y2tldCIsIkV4cGlyZXMiLCJLZXkiLCJyZXNpemVBbmRTYXZlSW1hZ2UiLCJidWZmZXIiLCJmaWxlVHlwZSIsInMzT3B0aW9ucyIsImltZ1ciLCJpbWdRIiwic3BsaXQiLCJzaGFycEZvcm1hdCIsImltYWdlT3B0aW1pemVkQnVmZmVyIiwidGh1bWJPcHRpbWl6ZWRCdWZmZXIiLCJpbWFnZUlkZW50aXR5IiwiZmlsZVNpemUiLCJyb3RhdGUiLCJyZXNpemUiLCJmaXQiLCJoZWlnaHQiLCJ3aWR0aCIsIndpdGhvdXRFbmxhcmdlbWVudCIsInRvRm9ybWF0IiwicXVhbGl0eSIsInRvQnVmZmVyIiwiSU1BR0VfU0FWRSIsImltYWdlT2JqIiwiQm9keSIsIkNvbnRlbnRUeXBlIiwiaW1hZ2VNZXRhZGF0YSIsImltYWdlU3RhdHMiLCJzb3VyY2VNZXRhZGF0YSIsIlByb21pc2UiLCJzdGF0cyIsImIiLCJnIiwiciIsImRvbWluYW50IiwiY29sb3IiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiZXhpZk1ldGFkYXRhIiwib3JpZW50YXRpb24iLCJyZXNvbHV0aW9uIiwiZGVuc2l0eSIsInRobVciLCJ0aG1RIiwicG9zaXRpb24iLCJ0aHVtYk9iaiIsImFkZEltYWdlIiwiZGVzY3JpcHRpb24iLCJyZXNpemVkSW1hZ2UiLCJpbnNlcnQiLCJfa2V5Iiwic2F2ZWRJbWFnZSIsImFkZEltYWdlRWRnZSIsIklNQUdFX1JFU0laRSIsImltYWdlRWRnZSIsIm5vdyIsImVkZ2VJZCIsImZvcm1hdEl0ZW1JZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwic2F2ZSIsInJldHVybk5ldyIsImZpbGVFZGdlIiwiZG9jdW1lbnQiLCJ1cGRhdGVJbWFnZSIsImJhc2U2NCIsImltYWdlQnVmZmVyIiwidXJsIiwiY3VzdG9tUGFyYW1zIiwiZm9ybWF0QmFzZTY0Iiwic3Vic3RyIiwiaW5kZXhPZiIsIkJ1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJpbWdQYXJhbXMiLCJjb250ZW50VHlwZSIsInJlcyIsInN0YXR1cyIsIklNQUdFX1JFUVVFU1QiLCJoZWFkZXJzIiwidXBkYXRlIiwiZGVsZXRlSW1hZ2UiLCJjYXNjYWRlIiwib3duZXJzaGlwIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCxTQUFRQSxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUMvQyxPQUFPQyxnQkFBZ0IsY0FBYztBQUNyQyxPQUFPQyxXQUFXLFFBQVE7QUFFMUIsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZLFFBQU8sNkJBQTZCO0FBQ2xFLFNBQVFDLFFBQVEsRUFBRUMs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
873
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2ltYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBleGlmUmVhZGVyIGZyb20gJ2V4aWYtcmVhZGVyJztcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0SW1hZ2VFeHRlbnNpb259IGZyb20gJy4uL3V0aWxzL2ltYWdlVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0R3JvdXBEZXRhaWxzLCBpc0dyb3VwZWR9IGZyb20gJy4vZ3JvdXBzLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7czNEZWxldGVMaXN0LCBzM0dldFNpZ25lZFVybCwgczNQdXR9IGZyb20gJy4vczMuanMnO1xuaW1wb3J0IHtoYXNTdWJzY3JpcHRpb25Ub0l0ZW19IGZyb20gJy4vc3Vic2NyaXB0aW9ucy5qcyc7XG5cbmltcG9ydCB0eXBlIHtRdWVyeUZpbHRlcn0gZnJvbSAnLi4vdHlwZXMvYXBwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7R3JvdXBUeXBlLCBHcm91cFVzZXJ9IGZyb20gJy4uL3R5cGVzL2dyb3Vwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VFZGdlVHlwZSwgSW1hZ2VPcHRpb25zLCBJbWFnZVR5cGUsIEltYWdlVXJsRGF0YX0gZnJvbSAnLi4vdHlwZXMvaW1hZ2VzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5cbi8vIERlZmluZSBpbnRlcmZhY2UgZm9yIEhUVFAgcmVzcG9uc2Ugd2l0aCBidWZmZXIgbWV0aG9kXG5pbnRlcmZhY2UgSHR0cFJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuICBidWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+O1xufVxuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2ltYWdlcyc7XG5jb25zdCBoYXNSZWFjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTik7XG5jb25zdCBoYXNNZWRpYUNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19NRURJQSk7XG5jb25zdCBwZXJzb25hc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbmNvbnN0IE1FRElBX0lURU1fQ09MTEVDVElPTlM6IHJlYWRvbmx5IEFyYW5nb0RiQ29sbGVjdGlvbltdID0gW1xuICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgQ09MTEVDVElPTlMuVVNFUlMsXG4gIENPTExFQ1RJT05TLlBPU1RTLFxuICBDT0xMRUNUSU9OUy5HUk9VUFNcbl07XG5cbnR5cGUgU2hhcnBGb3JtYXQgPSBFeHRyYWN0PFBhcmFtZXRlcnM8UmV0dXJuVHlwZTx0eXBlb2Ygc2hhcnA+Wyd0b0Zvcm1hdCddPlswXSwgc3RyaW5nPjtcblxuY29uc3QgZ2V0TWVkaWFJdGVtRG9jSWRzID0gKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbik6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgZG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYoZG9jSWQpIHtcbiAgICByZXR1cm4gW2RvY0lkXTtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1LZXkgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgaWYoIWl0ZW1LZXkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZihpdGVtVHlwZSAmJiBNRURJQV9JVEVNX0NPTExFQ1RJT05TLmluY2x1ZGVzKGl0ZW1UeXBlKSkge1xuICAgIHJldHVybiBbYCR7aXRlbVR5cGV9LyR7aXRlbUtleX1gXTtcbiAgfVxuXG4gIHJldHVybiBNRURJQV9JVEVNX0NPTExFQ1RJT05TLm1hcCgoY29sbGVjdGlvbikgPT4gYCR7Y29sbGVjdGlvbn0vJHtpdGVtS2V5fWApO1xufTtcblxuY29uc3Qgbm9ybWFsaXplSW1hZ2VGb3JtYXQgPSAoZm9ybWF0OiBzdHJpbmcpOiBTaGFycEZvcm1hdCA9PlxuICAoZm9ybWF0ID09PSAnanBnJyA/ICdqcGVnJyA6IGZvcm1hdCkgYXMgU2hhcnBGb3JtYXQ7XG5cbmNvbnN0IGltYWdlRXhpZk1ldGFkYXRhID0gKGV4aWY/OiBCdWZmZXIpID0+IHtcbiAgaWYoIWV4aWYpIHJldHVybiB7fTtcblxuICB0cnkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gZXhpZlJlYWRlcihleGlmKTtcbiAgICBjb25zdCB0YWtlbiA9IG1ldGFkYXRhLlBob3RvPy5EYXRlVGltZU9yaWdpbmFsO1xuICAgIHJldHVybiB7XG4gICAgICBtYWtlOiBtZXRhZGF0YS5JbWFnZT8uTWFrZSxcbiAgICAgIG1vZGVsOiBtZXRhZGF0YS5JbWFnZT8uTW9kZWwsXG4gICAgICB0YWtlbjogdGFrZW4gaW5zdGFuY2VvZiBEYXRlID8gdGFrZW4uZ2V0VGltZSgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5jb25zdCBub3JtYWxpemVJbWFnZVByaXZhY3kgPSAocHJpdmFjeTogdW5rbm93bik6ICdmcmllbmRzJyB8ICdwcml2YXRlJyB8ICdwdWJsaWMnIHwgJ3ZpcCcgPT4ge1xuICBzd2l0Y2goU3RyaW5nKHByaXZhY3kgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gJ2ZyaWVuZHMnO1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuICdwcml2YXRlJztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuICd2aXAnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbn07XG5cbmNvbnN0IGNhblZpZXdJbWFnZSA9IChcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgdmlld2VyVXNlcklkOiBzdHJpbmcsXG4gIGFjY2Vzczoge1xuICAgIHJlYWRvbmx5IGNhblZpZXdGcmllbmRzOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhblZpZXdWaXA6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXNPd25lcjogYm9vbGVhbjtcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHByaXZhY3kgPSBub3JtYWxpemVJbWFnZVByaXZhY3koaW1hZ2U/LnByaXZhY3kpO1xuXG4gIGlmKGFjY2Vzcy5pc093bmVyIHx8IFN0cmluZyhpbWFnZT8udXNlcklkIHx8ICcnKSA9PT0gdmlld2VyVXNlcklkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2l0Y2gocHJpdmFjeSkge1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3RnJpZW5kcztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3VmlwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW1hZ2VPcHRpb25zID0gKG9wdGlvbnM6IEltYWdlT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwLFxuICAgIHR5cGUgPSAnZGVmYXVsdCdcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXQsXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlT3B0aW9uYWxGaWVsZHMgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdKSA9PlxuICBmaWVsZHMucmVkdWNlKChzZWxlY3RzLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgaWYoZmllbGQuaW5jbHVkZXMoJ0NvdW50JykpIHtcbiAgICAgIHJldHVybiBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlKCdpbWFnZXMnLCAnaScsIGZpZWxkLCBzZWxlY3RzKTtcbiAgICB9XG5cbiAgICBzd2l0Y2goZmllbGQpIHtcbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgICAgRk9SIGltYWdlLCByIElOIElOQk9VTkQgaS5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd0YWdzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHRhZ3MgPSAoXG4gICAgICAgICAgRk9SIHQsIHBsIElOIElOQk9VTkQgaS5faWQgaXNUYWdnZWRcbiAgICAgICAgICBSRVRVUk4gdFxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd1c2Vycyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB1c2VycyA9IEZJUlNUKFxuICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgRklMVEVSIGkudXNlcklkID09IHUuX2tleVxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4gdVxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd1c2Vyczp1c2VycycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIgPSAwLFxuICB0bzogbnVtYmVyID0gMzBcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlc0J5VXNlcic7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIHt1c2VySWQ6IGZvcm1hdFVzZXJJZH0sIHtcbiAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgIGxpbWl0OiB7ZnJvbSwgdG99LFxuICAgIGN1c3RvbVF1ZXJpZXM6IFtcbiAgICAgIGBMRVQgdXNlciA9IEZJUlNUKEZPUiB1IElOIHVzZXJzIEZJTFRFUiB1Ll9rZXkgPT0gZG9jLnVzZXJJZCBMSU1JVCAxIFJFVFVSTiB1KWBcbiAgICBdLFxuICAgIGN1c3RvbU9iamVjdHM6IFsndXNlcjp1c2VyJ11cbiAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtmcm9tLCB0bywgdXNlcklkfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlQ291bnRCeUl0ZW0gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VDb3VudEJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldE1lZGlhSXRlbURvY0lkcyhpdGVtSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCBtZWRpYSA9IChcbiAgICAgIEZPUiBpIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICBGSUxURVIgaS5fZnJvbSBJTiAke2l0ZW1Eb2NJZHN9XG4gICAgICAgIEZJTFRFUiBpLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgIFJFVFVSTiAxXG4gICAgKVxuICAgIFJFVFVSTiB7Y291bnQ6IExFTkdUSChtZWRpYSl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHtjb3VudH0pID0+IGNvdW50KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2l0ZW1JZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogSW1hZ2VPcHRpb25zID0ge31cbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGUgPSBvcHRpb25zPy5pdGVtVHlwZSA/IHBhcnNlQ2hhcihTdHJpbmcob3B0aW9ucy5pdGVtVHlwZSB8fCAnJyksIDMyKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbiA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldE1lZGlhSXRlbURvY0lkcyhpdGVtSWQsIGZvcm1hdEl0ZW1UeXBlKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRJbWFnZU9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGwgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgbC5fZnJvbSBJTiAke2l0ZW1Eb2NJZHN9XG4gICAgICBGSUxURVIgbC50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgTEVUIGkgPSBET0NVTUVOVChsLl90bylcbiAgICAgIEZJTFRFUiBOT1QgSVNfTlVMTChpKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IGwuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIFNPUlQgaS5hZGRlZCBERVNDXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShpLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ2knKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbWVkaWFJdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICBfbWVkaWFJdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb24sXG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pO1xuXG4gICAgY29uc3Qgb3duZXJVc2VySWQgPSBTdHJpbmcobGlzdFswXT8udXNlcklkIHx8ICcnKTtcbiAgICBjb25zdCBpc093bmVyID0gISFzZXNzaW9uVXNlcklkICYmICEhb3duZXJVc2VySWQgJiYgc2Vzc2lvblVzZXJJZCA9PT0gb3duZXJVc2VySWQ7XG5cbiAgICBpZihpc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKChpbWFnZSkgPT4gbm9ybWFsaXplSW1hZ2VQcml2YWN5KGltYWdlPy5wcml2YWN5KSA9PT0gJ3B1YmxpYycpO1xuICAgIH1cblxuICAgIGxldCBjYW5WaWV3RnJpZW5kcyA9IGZhbHNlO1xuICAgIGxldCBjYW5WaWV3VmlwID0gZmFsc2U7XG5cbiAgICBjb25zdCBtZWRpYUl0ZW1LZXkgPSBTdHJpbmcoKGxpc3RbMF0gYXMgSW1hZ2VUeXBlICYge19tZWRpYUl0ZW1LZXk/OiBzdHJpbmd9KT8uX21lZGlhSXRlbUtleSB8fCAnJyk7XG4gICAgY29uc3QgbWVkaWFJdGVtVHlwZSA9IFN0cmluZygobGlzdFswXSBhcyBJbWFnZVR5cGUgJiB7X21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9KT8uX21lZGlhSXRlbVR5cGUgfHwgJycpO1xuXG4gICAgaWYobWVkaWFJdGVtVHlwZSA9PT0gQ09MTEVDVElPTlMuUEVSU09OQVMgJiYgbWVkaWFJdGVtS2V5KSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBhd2FpdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgbWVkaWFJdGVtS2V5KTtcbiAgICAgIGNhblZpZXdGcmllbmRzID0gISFyZWxhdGlvbnNoaXA/LmlzRnJpZW5kO1xuICAgICAgY2FuVmlld1ZpcCA9IGF3YWl0IGhhc1N1YnNjcmlwdGlvblRvSXRlbShjb250ZXh0LCBtZWRpYUl0ZW1LZXksIENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGltYWdlKSA9PiBjYW5WaWV3SW1hZ2UoaW1hZ2UsIHNlc3Npb25Vc2VySWQsIHtjYW5WaWV3RnJpZW5kcywgY2FuVmlld1ZpcCwgaXNPd25lcn0pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtpdGVtSWQsIG9wdGlvbnM6IHsuLi5vcHRpb25zLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGV9fSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5R3JvdXAgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBhcmFtczoge2ZpbHRlcnM6IFF1ZXJ5RmlsdGVyW10sIGdyb3VwSWQ6IHN0cmluZywgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyfVxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlHcm91cCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ZpbHRlcnMsIGdyb3VwSWQsIGZyb20sIHRvfSA9IHBhcmFtcztcbiAgY29uc3QgZm9ybWF0R3JvdXBJZCA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EYkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIGZpbHRlcnNcbiAgICAubWFwKChmaWx0ZXI6IFF1ZXJ5RmlsdGVyKSA9PiB7XG4gICAgICBjb25zdCB7Y29uZGl0aW9uYWwsIG5hbWUsIHZhbHVlfSA9IGZpbHRlcjtcbiAgICAgIGxldCBmb3JtYXRDb25kID0gY29uZGl0aW9uYWw7XG5cbiAgICAgIGlmKGNvbmRpdGlvbmFsICE9PSAnPj0nICYmIGNvbmRpdGlvbmFsICE9PSAnPD0nICYmIGNvbmRpdGlvbmFsICE9PSAnPicgJiYgY29uZGl0aW9uYWwgIT09ICc8Jykge1xuICAgICAgICBmb3JtYXRDb25kID0gJz09JztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgIHJldHVybiBgcC5hZGRlZCAke2Zvcm1hdENvbmR9ICR7cGFyc2VOdW0odmFsdWUpfWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBnZXRHcm91cERldGFpbHMoY29udGV4dCwgZm9ybWF0R3JvdXBJZClcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgaWYoZ3JvdXAucHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKHtjb25kaXRpb25hbDogJz09JywgbmFtZTogJ2dyb3VwSWQnLCB2YWx1ZTogZm9ybWF0R3JvdXBJZH0pO1xuICAgICAgICBjb25zdCBmaWx0ZXJTdHIgPSBmaWx0ZXJzLmpvaW4oJyAmJiAnKTtcbiAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICBGT1IgaSBJTiBGTEFUVEVOKFxuICAgICAgICAgICAgRk9SIHAgSU4gcG9zdHNcbiAgICAgICAgICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJTdHIpfVxuICAgICAgICAgICAgICBMRVQgaW1hZ2VzID0gKFxuICAgICAgICAgICAgICAgIEZPUiBpLCBlIElOIE9VVEJPVU5EIHAuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgRklMVEVSIGUudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgICAgICAgICAgIFJFVFVSTiBpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgU09SVCBwLmFkZGVkIERFU0NcbiAgICAgICAgICAgICAgUkVUVVJOIGltYWdlc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIFNPUlQgaS5hZGRlZCBERVNDXG4gICAgICAgICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgICAgICAgIFJFVFVSTiBpXG4gICAgICAgIGA7XG5cbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIHBhcmFtczoge2ZpbHRlcnMsIGZyb20sIGdyb3VwSWQsIHRvfSxcbiAgICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0dyb3VwZWQoY29udGV4dCwgc2Vzc2lvbklkLCBncm91cElkKVxuICAgICAgICAudGhlbigoZ3JvdXBlZDogR3JvdXBVc2VyKSA9PiB7XG4gICAgICAgICAgaWYoZ3JvdXBlZC5pc1ZhbGlkKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBncm91cGVkLmdyb3VwSWR9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3QgPSBmaWx0ZXJzLmpvaW4oJyAmJiAnKTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgICAgIEZPUiBwIElOIHBvc3RcbiAgICAgICAgICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckxpc3QpfVxuICAgICAgICAgICAgICAgIEZPUiBmIElOIHAuZmlsZXNcbiAgICAgICAgICAgICAgICAgIEZJTFRFUiBmLnR5cGUgPT0gXCJpbWFnZS9qcGVnXCIgfHwgZi50eXBlID09IFwiaW1hZ2UvcG5nXCJcbiAgICAgICAgICAgICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICAgICAgICAgICAgU09SVCBwLmFkZGVkIERFU0NcbiAgICAgICAgICAgICAgICAgIFJFVFVSTiBmXG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7ZmlsdGVycywgZnJvbSwgZ3JvdXBJZCwgdG99LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeVJlYWN0aW9ucyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogSW1hZ2VPcHRpb25zXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUxpc3RCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICdyLnR5cGUgPT0gXCJpbWFnZXNcIicsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYF07XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBpLCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSBoYXNSZWFjdGlvblxuICAgICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwiaW1hZ2VzXCJ9XG4gICAgICBMRVQgbWVkaWEgPSBGSVJTVChcbiAgICAgICAgRk9SIG93bmVyLCBsIElOIElOQk9VTkQgaS5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGwudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgnaScpfSxcbiAgICAgICAge1xuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcmVhY3Rpb25zfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldFBlcnNvbmFEb2NJZCA9IChwZXJzb25hSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHBhcnNlQXJhbmdvSWQocGVyc29uYUlkKTtcblxuICBpZihwZXJzb25hRG9jSWQpIHtcbiAgICByZXR1cm4gcGVyc29uYURvY0lkO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYUtleSA9IHBhcnNlSWQocGVyc29uYUlkKTtcbiAgcmV0dXJuIHBlcnNvbmFLZXkgPyBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtwZXJzb25hS2V5fWAgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nID0gJycsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IEltYWdlT3B0aW9uc1xuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zJztcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpO1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBnZXRQZXJzb25hRG9jSWQocGVyc29uYUlkIHx8IHNlc3Npb25QZXJzb25hSWQpO1xuICBjb25zdCByZWFjdGlvbk5hbWVzID0gQXJyYXkuaXNBcnJheShyZWFjdGlvbnMpXG4gICAgPyByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKS50b0xvd2VyQ2FzZSgpKS5maWx0ZXIoQm9vbGVhbilcbiAgICA6IFtdO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgaWYoIXBlcnNvbmFEb2NJZCB8fCAhcmVhY3Rpb25OYW1lcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBpbWFnZSwgcmVhY3Rpb24gSU4gT1VUQk9VTkQgJHtwZXJzb25hRG9jSWR9ICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwiaW1hZ2VzXCJ9XG4gICAgICBMRVQgbWVkaWEgPSBGSVJTVChcbiAgICAgICAgRk9SIG93bmVyLCBsaW5rIElOIElOQk9VTkQgaW1hZ2UuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsaW5rLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGxpbmsuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsaW5rLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobGluay5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke3BlcnNvbmFzQ29sbGVjdGlvbn0sIG1lZGlhLml0ZW1LZXkpIDogbnVsbFxuICAgICAgRklMVEVSIExPV0VSKHJlYWN0aW9uLnR5cGUgfHwgXCJcIikgSU4gW1wiaW1hZ2VcIiwgXCJpbWFnZXNcIl1cbiAgICAgIEZJTFRFUiBQT1NJVElPTigke3JlYWN0aW9uTmFtZXN9LCBMT1dFUihyZWFjdGlvbi5uYW1lIHx8IHJlYWN0aW9uLnZhbHVlIHx8IFwiXCIpKVxuICAgICAgU09SVCByZWFjdGlvbi5hZGRlZCBERVNDXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShpbWFnZSwge1xuICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICB9KVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge29wdGlvbnMsIHBlcnNvbmFJZCwgcmVhY3Rpb25zfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VCeUlkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJHcm91cCA9IHtcbiAgICBvcGVyYXRvcjogJ0FORCcsXG4gICAgZmlsdGVyczogW3tmaWVsZDogJ19rZXknLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEltYWdlSWR9XVxuICB9IGFzIGFueTtcblxuICByZXR1cm4gZ2V0SXRlbUJ5PEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZpbHRlcnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJJbWFnZVBhdGggPSAodXNlcklkOiBzdHJpbmcsIGltYWdlSWQ6IHN0cmluZywgaW1hZ2VUeXBlOiBzdHJpbmcsIGRpcjogc3RyaW5nID0gJ2ltYWdlcycpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBmaWxlbmFtZSA9IGAke2ltYWdlSWR9LiR7Z2V0SW1hZ2VFeHRlbnNpb24oaW1hZ2VUeXBlKX1gO1xuXG4gIHJldHVybiBgdXNlcnMvJHt1c2VySWR9LyR7ZGlyfS8ke2ZpbGVuYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwSW1hZ2VVcmwgPSAoe1xuICBidWNrZXQsXG4gIGRpcmVjdG9yeSA9ICdpbWFnZXMnLFxuICBpbWFnZUlkLFxuICBpbWFnZVR5cGUgPSAnanBnJyxcbiAgaXNUaHVtYiA9IGZhbHNlLFxuICB0eXBlLFxuICB0eXBlSWRcbn06IEltYWdlVXJsRGF0YSk6IHN0cmluZyA9PiB7XG4gIGlmKCF0eXBlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYoIWltYWdlSWQpIHtcbiAgICBpZihpbWFnZVR5cGUgPT09ICdwZXJzb25hJykge1xuICAgICAgcmV0dXJuIGAke0NvbmZpZy5nZXQoJ2ltYWdlLmRlZmF1bHRVcmwnKX0vdXNlcnNfYmsuanBnYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke0NvbmZpZy5nZXQoJ2ltYWdlLmRlZmF1bHRVcmwnKX0vdXNlcnNfd2guanBnYDtcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgaW1hZ2VOYW1lID0gaXNUaHVtYiA/IGAke2ltYWdlSWR9LXRoLiR7aW1hZ2VUeXBlfWAgOiBgJHtpbWFnZUlkfS4ke2ltYWdlVHlwZSA9PT0gJ3BlcnNvbmEnIHx8IGltYWdlVHlwZSA9PT0gJ290aGVyJyA/ICdqcGcnIDogaW1hZ2VUeXBlfWA7XG4gIGNvbnN0IGltYWdlVXJsID0gQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YDtcblxuICBpZih0eXBlID09PSAnYXBwcycpIHtcbiAgICByZXR1cm4gYCR7aW1hZ2VVcmx9LyR7dHlwZX0vJHtkaXJlY3Rvcnl9LyR7aW1hZ2VOYW1lfWA7XG4gIH1cblxuICByZXR1cm4gYCR7aW1hZ2VVcmx9LyR7dHlwZX0vJHt0eXBlSWR9LyR7ZGlyZWN0b3J5fS8ke2ltYWdlTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlVXJsID0gYXN5bmMgKHtcbiAgYnVja2V0LFxuICBpbWFnZURpciA9ICdpbWFnZXMnLFxuICBpbWFnZUlkLFxuICBpbWFnZVR5cGUgPSAnanBnJyxcbiAgaXNUaHVtYiA9IGZhbHNlLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHVybFR5cGUgPSAncHVibGljJ1xufTogSW1hZ2VVcmxEYXRhKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoIWltYWdlSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0IHx8IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIGNvbnN0IGNvbmZpZ3VyZWRJbWFnZVVybCA9IFN0cmluZyhDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCAnJyk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRBcHBVcmwgPSBTdHJpbmcoQ29uZmlnLmdldCgnYXBwLnVybCcpIHx8ICcnKTtcbiAgY29uc3QgcHVibGljQmFzZVVybCA9IGNvbmZpZ3VyZWRBcHBVcmxcbiAgICA/IGBodHRwczovL2JveC4ke2NvbmZpZ3VyZWRBcHBVcmx9YFxuICAgIDogKGNvbmZpZ3VyZWRJbWFnZVVybCB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gKTtcbiAgY29uc3QgZGV2QmFzZVVybCA9IGNvbmZpZ3VyZWRBcHBVcmxcbiAgICA/IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZGV2LiR7Y29uZmlndXJlZEFwcFVybH1gXG4gICAgOiAoY29uZmlndXJlZEltYWdlVXJsIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWApO1xuXG4gIC8vIEFsd2F5cyB1c2Ugc2lnbmVkIFVSTHMgZm9yIHRodW1ibmFpbHNcbiAgaWYoaXNUaHVtYikge1xuICAgIHVybFR5cGUgPSAnc2lnbmVkJztcbiAgfVxuXG4gIGNvbnN0IHRodW1iU3VmZml4ID0gaXNUaHVtYiA/ICctdGgnIDogJyc7XG4gIGNvbnN0IGltYWdlS2V5ID0gYCR7dHlwZX0vJHt0eXBlSWR9LyR7aW1hZ2VEaXJ9LyR7aW1hZ2VJZH0ke3RodW1iU3VmZml4fS4ke2ltYWdlVHlwZX1gO1xuXG4gIHN3aXRjaCh1cmxUeXBlKSB7XG4gICAgY2FzZSAnc2lnbmVkJzoge1xuICAgICAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldE5hbWUsIEV4cGlyZXM6IDYwICogNjAsIEtleTogaW1hZ2VLZXl9KTtcbiAgICB9XG4gICAgY2FzZSAncHVibGljJzoge1xuICAgICAgcmV0dXJuIGAke3B1YmxpY0Jhc2VVcmx9LyR7aW1hZ2VLZXl9YDtcbiAgICB9XG4gICAgY2FzZSAnZGV2Jzoge1xuICAgICAgcmV0dXJuIGAke2RldkJhc2VVcmx9LyR7aW1hZ2VLZXl9YDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2l6ZUFuZFNhdmVJbWFnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2VJZDogc3RyaW5nLFxuICBidWZmZXI6IEJ1ZmZlcixcbiAgZmlsZVR5cGU6IHN0cmluZyA9ICdpbWFnZS9qcGVnJywgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAncmVzaXplU2F2ZUltYWdlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgaW1nVyA9IENvbmZpZy5nZXQoJ2ltYWdlLmltZ1NpemUnKTtcbiAgY29uc3QgaW1nUSA9IENvbmZpZy5nZXQoJ2ltYWdlLmltZ1F1YWxpdHknKTtcbiAgY29uc3QgZm9ybWF0ID0gKGZpbGVUeXBlLnNwbGl0KCcvJykpWzFdIHx8ICdqcGVnJztcbiAgY29uc3Qgc2hhcnBGb3JtYXQgPSBub3JtYWxpemVJbWFnZUZvcm1hdChmb3JtYXQpO1xuICBsZXQgaW1hZ2VPcHRpbWl6ZWRCdWZmZXI6IEJ1ZmZlciA9IGJ1ZmZlcjtcbiAgbGV0IHRodW1iT3B0aW1pemVkQnVmZmVyOiBCdWZmZXIgPSBidWZmZXI7XG4gIGxldCBpbWFnZUlkZW50aXR5OiBJbWFnZVR5cGUgPSB7XG4gICAgZmlsZVNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgZmlsZVR5cGU6IGZvcm1hdCxcbiAgICBpbWFnZUlkXG4gIH07XG5cbiAgdHJ5IHtcbiAgICBpbWFnZU9wdGltaXplZEJ1ZmZlciA9IGF3YWl0IHNoYXJwKGJ1ZmZlcilcbiAgICAgIC5yb3RhdGUoKVxuICAgICAgLnJlc2l6ZSh7XG4gICAgICAgIGZpdDogJ2luc2lkZScsXG4gICAgICAgIGhlaWdodDogaW1nVyxcbiAgICAgICAgd2lkdGg6IGltZ1csXG4gICAgICAgIHdpdGhvdXRFbmxhcmdlbWVudDogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC50b0Zvcm1hdChzaGFycEZvcm1hdCwge3F1YWxpdHk6IGltZ1F9KVxuICAgICAgLnRvQnVmZmVyKCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWFnZU9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQm9keTogaW1hZ2VPcHRpbWl6ZWRCdWZmZXIsXG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgICAuLi4oczNPcHRpb25zIHx8IHt9KSxcbiAgICAgIEtleTogZ2V0VXNlckltYWdlUGF0aChzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAnaW1hZ2VzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KGltYWdlT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IFtpbWFnZU1ldGFkYXRhLCBpbWFnZVN0YXRzLCBzb3VyY2VNZXRhZGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzaGFycChpbWFnZU9wdGltaXplZEJ1ZmZlcikubWV0YWRhdGEoKSxcbiAgICAgIHNoYXJwKGltYWdlT3B0aW1pemVkQnVmZmVyKS5zdGF0cygpLFxuICAgICAgc2hhcnAoYnVmZmVyKS5tZXRhZGF0YSgpXG4gICAgXSk7XG4gICAgY29uc3Qge2IsIGcsIHJ9ID0gaW1hZ2VTdGF0cy5kb21pbmFudDtcbiAgICBjb25zdCBjb2xvciA9IFtyLCBnLCBiXS5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gICAgY29uc3QgZXhpZk1ldGFkYXRhID0gaW1hZ2VFeGlmTWV0YWRhdGEoc291cmNlTWV0YWRhdGEuZXhpZik7XG5cbiAgICBpbWFnZUlkZW50aXR5ID0ge1xuICAgICAgY29sb3IsXG4gICAgICBmaWxlU2l6ZTogaW1hZ2VPcHRpbWl6ZWRCdWZmZXIubGVuZ3RoLFxuICAgICAgZmlsZVR5cGU6IGZvcm1hdCxcbiAgICAgIGhlaWdodDogaW1hZ2VNZXRhZGF0YS5oZWlnaHQgfHwgMCxcbiAgICAgIGltYWdlSWQsXG4gICAgICAuLi5leGlmTWV0YWRhdGEsXG4gICAgICBvcmllbnRhdGlvbjogaW1hZ2VNZXRhZGF0YS5vcmllbnRhdGlvbiA/IFN0cmluZyhpbWFnZU1ldGFkYXRhLm9yaWVudGF0aW9uKSA6IHVuZGVmaW5lZCxcbiAgICAgIHF1YWxpdHk6IGltZ1EsXG4gICAgICByZXNvbHV0aW9uOiBpbWFnZU1ldGFkYXRhLmRlbnNpdHkgPyBgJHtpbWFnZU1ldGFkYXRhLmRlbnNpdHl9IHBwaWAgOiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogaW1hZ2VNZXRhZGF0YS53aWR0aCB8fCAwXG4gICAgfTtcblxuICAgIGNvbnN0IHRobVcgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1TaXplJyk7XG4gICAgY29uc3QgdGhtUSA9IENvbmZpZy5nZXQoJ2ltYWdlLnRobVF1YWxpdHknKTtcbiAgICB0aHVtYk9wdGltaXplZEJ1ZmZlciA9IGF3YWl0IHNoYXJwKGltYWdlT3B0aW1pemVkQnVmZmVyKVxuICAgICAgLnJlc2l6ZSh7XG4gICAgICAgIGZpdDogJ2NvdmVyJyxcbiAgICAgICAgaGVpZ2h0OiB0aG1XLFxuICAgICAgICBwb3NpdGlvbjogJ2NlbnRyZScsXG4gICAgICAgIHdpZHRoOiB0aG1XXG4gICAgICB9KVxuICAgICAgLnRvRm9ybWF0KHNoYXJwRm9ybWF0LCB7cXVhbGl0eTogdGhtUX0pXG4gICAgICAudG9CdWZmZXIoKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHRodW1iT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCb2R5OiB0aHVtYk9wdGltaXplZEJ1ZmZlcixcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgICAgS2V5OiBnZXRVc2VySW1hZ2VQYXRoKHNlc3Npb25JZCwgaW1hZ2VJZCwgZmlsZVR5cGUsICd0aHVtYnMnKVxuICAgIH07XG4gICAgYXdhaXQgczNQdXQodGh1bWJPYmopO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbWFnZUlkZW50aXR5O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEltYWdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpbWFnZUlkLCBkZXNjcmlwdGlvbiwgYnVmZmVyLCBmaWxlVHlwZSwgaXRlbUlkLCBpdGVtVHlwZSwgcHJpdmFjeSA9ICdwdWJsaWMnfSA9IGltYWdlO1xuXG4gIHJldHVybiByZXNpemVBbmRTYXZlSW1hZ2UoY29udGV4dCwgaW1hZ2VJZCwgYnVmZmVyLCBmaWxlVHlwZSwgczNPcHRpb25zKVxuICAgIC50aGVuKChyZXNpemVkSW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBJbWFnZVR5cGUgPSB7XG4gICAgICAgIC4uLnJlc2l6ZWRJbWFnZSxcbiAgICAgICAgX2tleTogaW1hZ2VJZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSksXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYWRkSXRlbTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBpbnNlcnQpXG4gICAgICAgIC50aGVuKChzYXZlZEltYWdlOiBJbWFnZVR5cGUpID0+IGFkZEltYWdlRWRnZShjb250ZXh0LCB7XG4gICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCB8fCBzZXNzaW9uSWQsXG4gICAgICAgICAgaXRlbVR5cGU6IHBhcnNlU3RyaW5nKGl0ZW1UeXBlIHx8ICd1c2VycycsIDMyKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbixcbiAgICAgICAgICB0eXBlOiAnaW1hZ2UnXG4gICAgICAgIH0pLnRoZW4oKCkgPT4gc2F2ZWRJbWFnZSkpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfUkVTSVpFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRJbWFnZUVkZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEltYWdlRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ltYWdlSWQsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gaW1hZ2VFZGdlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNNZWRpYS1pbWFnZS0ke2ltYWdlSWR9LSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gZ2V0RG9jSWQoZm9ybWF0SXRlbVR5cGUsIHtfa2V5OiBmb3JtYXRJdGVtSWR9KTtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG4gIGNvbnN0IGZpbGVEb2NJZCA9IGBpbWFnZXMvJHtmb3JtYXRJbWFnZUlkfWA7XG5cbiAgY29uc3QgZWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtcbiAgICBfZnJvbTogaXRlbURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZpbGVEb2NJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGl0ZW1UeXBlLFxuICAgIHR5cGU6ICdpbWFnZSdcbiAgfTtcblxuICBpZihpdGVtRG9jSWQpIHtcbiAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19NRURJQSkuc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAgIC50aGVuKChmaWxlRWRnZSkgPT4gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19NRURJQSkuZG9jdW1lbnQoZmlsZUVkZ2UpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZWRnZSxcbiAgICAgICAgICBmaWxlRG9jSWQsXG4gICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICBpdGVtRG9jSWQsXG4gICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgIGl0ZW1UeXBlXG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUltYWdlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGJhc2U2NCA9ICcnLFxuICAgIGJ1ZmZlcjogaW1hZ2VCdWZmZXIsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgaW1hZ2VJZCxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgZmlsZVR5cGUsXG4gICAgcHJpdmFjeSxcbiAgICB1cmwgPSAnJ1xuICB9ID0gaW1hZ2U7XG5cbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IGltYWdlSWQgfHwgY3JlYXRlSGFzaChgaW1hZ2UtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBjdXN0b21QYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLFxuICAgIHByaXZhY3k6IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShwcml2YWN5KSxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuXG4gIGlmKGJhc2U2NCB8fCBpbWFnZUJ1ZmZlcikge1xuICAgIGxldCBidWZmZXI6IEJ1ZmZlciA9IGltYWdlQnVmZmVyO1xuXG4gICAgaWYoYmFzZTY0KSB7XG4gICAgICBjb25zdCBmb3JtYXRCYXNlNjQgPSBiYXNlNjQuc3Vic3RyKGJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvcm1hdEJhc2U2NCwgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGxldCB1cGRhdGVkRmlsZVR5cGUgPSBmaWxlVHlwZTtcblxuICAgIGlmKCFmaWxlVHlwZSkge1xuICAgICAgY29uc3Qge2ZpbGVUeXBlRnJvbUJ1ZmZlcn0gPSBhd2FpdCBpbXBvcnQoJ2ZpbGUtdHlwZScpO1xuICAgICAgY29uc3Qge21pbWV9ID0gYXdhaXQgZmlsZVR5cGVGcm9tQnVmZmVyKGJ1ZmZlcik7XG4gICAgICB1cGRhdGVkRmlsZVR5cGUgPSBtaW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGltZ1BhcmFtczogSW1hZ2VUeXBlID0ge1xuICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgYnVmZmVyLFxuICAgICAgZmlsZVR5cGU6IHVwZGF0ZWRGaWxlVHlwZVxuICAgIH07XG5cbiAgICByZXR1cm4gYWRkSW1hZ2UoY29udGV4dCwgaW1nUGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAudGhlbigoaW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICBjb25zdCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7XG4gICAgICAgICAgICBpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLFxuICAgICAgICAgICAgaXRlbUlkOiBmb3JtYXRJdGVtSWQsXG4gICAgICAgICAgICBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsXG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIGltYWdlRWRnZSkudGhlbigoKSA9PiBpbWFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodXJsICE9PSAnJykge1xuICAgIGxldCBjb250ZW50VHlwZTtcblxuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChyZXM6IEh0dHBSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfUkVRVUVTVFxuICAgICAgICAgIH0sIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gKHJlcyBhcyBIdHRwUmVzcG9uc2UpLmJ1ZmZlcigpKVxuICAgICAgLnRoZW4oKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGltZ1BhcmFtczogSW1hZ2VUeXBlID0ge1xuICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgZmlsZVR5cGU6IGNvbnRlbnRUeXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgICAgIC50aGVuKChpbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge2ltYWdlSWQ6IGZvcm1hdEltYWdlSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICdpbWFnZSd9O1xuICAgICAgICAgICAgICByZXR1cm4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIGltYWdlRWRnZSkudGhlbigoKSA9PiBpbWFnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogJ2ZldGNoX2Vycm9yJ1xuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKGltYWdlSWQpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAuLi4oZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCA/IHtkZXNjcmlwdGlvbn0gOiB7fSksXG4gICAgICAuLi4ocHJpdmFjeSAhPT0gdW5kZWZpbmVkID8ge3ByaXZhY3k6IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShwcml2YWN5KX0gOiB7fSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZm9ybWF0SW1hZ2VJZCwgdXBkYXRlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUltYWdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGUnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGltYWdlID0gYXdhaXQgZGVsZXRlSXRlbTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmb3JtYXRJbWFnZUlkLCB7XG4gICAgICBjYXNjYWRlOiBbRURHRVMuSEFTX01FRElBXSxcbiAgICAgIG93bmVyc2hpcDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYoIWltYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBEZWxldGUgUzMgZmlsZXNcbiAgICBjb25zdCB7X2tleTogaW1hZ2VLZXl9ID0gaW1hZ2U7XG4gICAgY29uc3QgcGFyYW1zOiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0ID0ge1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgRGVsZXRlOiB7XG4gICAgICAgIE9iamVjdHM6IFtcbiAgICAgICAgICB7S2V5OiBgdXNlcnMvJHtzZXNzaW9uSWR9L2ltYWdlcy8ke2ltYWdlS2V5fS5qcGdgfSxcbiAgICAgICAgICB7S2V5OiBgdXNlcnMvJHtzZXNzaW9uSWR9L3RodW1icy8ke2ltYWdlS2V5fS5qcGdgfVxuICAgICAgICBdLFxuICAgICAgICBRdWlldDogdHJ1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gczNEZWxldGVMaXN0KHBhcmFtcykudGhlbigoKSA9PiBpbWFnZSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbImdldCIsImh0dHBHZXQiLCJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsImV4aWZSZWFkZXIiLCJzaGFycCIsIkNvbmZpZyIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJnZXREb2NJZCIsImdldExpbWl0Iiwic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsInVzZURiIiwiZ2V0SW1hZ2VFeHRlbnNpb24iLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJnZXRHcm91cERldGFpbHMiLCJpc0dyb3VwZWQiLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJzM0RlbGV0ZUxpc3QiLCJzM0dldFNpZ25lZFVybCIsInMzUHV0IiwiaGFzU3Vic2NyaXB0aW9uVG9JdGVtIiwiZXZlbnRDYXRlZ29yeSIsImhhc1JlYWN0aW9uQ29sbGVjdGlvbiIsIkhBU19SRUFDVElPTiIsImhhc01lZGlhQ29sbGVjdGlvbiIsIkhBU19NRURJQSIsInBlcnNvbmFzQ29sbGVjdGlvbiIsIlBFUlNPTkFTIiwiTUVESUFfSVRFTV9DT0xMRUNUSU9OUyIsIlVTRVJTIiwiUE9TVFMiLCJHUk9VUFMiLCJnZXRNZWRpYUl0ZW1Eb2NJZHMiLCJpdGVtSWQiLCJpdGVtVHlwZSIsImRvY0lkIiwiaXRlbUtleSIsImluY2x1ZGVzIiwibWFwIiwiY29sbGVjdGlvbiIsIm5vcm1hbGl6ZUltYWdlRm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VFeGlmTWV0YWRhdGEiLCJleGlmIiwibWV0YWRhdGEiLCJ0YWtlbiIsIlBob3RvIiwiRGF0ZVRpbWVPcmlnaW5hbCIsIm1ha2UiLCJJbWFnZSIsIk1ha2UiLCJtb2RlbCIsIk1vZGVsIiwiRGF0ZSIsImdldFRpbWUiLCJ1bmRlZmluZWQiLCJub3JtYWxpemVJbWFnZVByaXZhY3kiLCJwcml2YWN5IiwiU3RyaW5nIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY2FuVmlld0ltYWdlIiwiaW1hZ2UiLCJ2aWV3ZXJVc2VySWQiLCJhY2Nlc3MiLCJpc093bmVyIiwidXNlcklkIiwiY2FuVmlld0ZyaWVuZHMiLCJjYW5WaWV3VmlwIiwicGFyc2VJbWFnZU9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwidHlwZSIsImxpbWl0IiwiZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsInF1ZXJpZXMiLCJwdXNoIiwib2JqZWN0cyIsImdldEltYWdlTGlzdEJ5VXNlciIsImNvbnRleHQiLCJhY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwiY3VzdG9tUXVlcmllcyIsImN1c3RvbU9iamVjdHMiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJwYXJhbXMiLCJ2YWx1ZSIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0SW1hZ2VDb3VudEJ5SXRlbSIsImRhdGFiYXNlTmFtZSIsIml0ZW1Eb2NJZHMiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY291bnQiLCJnZXRJbWFnZUxpc3RCeUl0ZW0iLCJzZXNzaW9uIiwic2Vzc2lvblVzZXJJZCIsImZvcm1hdEl0ZW1UeXBlIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJqb2luIiwibGVuZ3RoIiwibGlzdCIsImFsbCIsIm93bmVyVXNlcklkIiwiZmlsdGVyIiwibWVkaWFJdGVtS2V5IiwiX21lZGlhSXRlbUtleSIsIm1lZGlhSXRlbVR5cGUiLCJfbWVkaWFJdGVtVHlwZSIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwiZ2V0SW1hZ2VMaXN0QnlHcm91cCIsInNlc3Npb25JZCIsImZpbHRlcnMiLCJncm91cElkIiwiZm9ybWF0R3JvdXBJZCIsImNvbmRpdGlvbmFsIiwibmFtZSIsImZvcm1hdENvbmQiLCJncm91cCIsImZpbHRlclN0ciIsImdyb3VwZWQiLCJpc1ZhbGlkIiwiZmlsdGVyTGlzdCIsImdldEltYWdlTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lIiwiZmlsdGVyQnkiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0UGVyc29uYURvY0lkIiwicGVyc29uYUlkIiwicGVyc29uYURvY0lkIiwicGVyc29uYUtleSIsImdldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyIsInNlc3Npb25QZXJzb25hSWQiLCJyZWFjdGlvbk5hbWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiQm9vbGVhbiIsImdldEltYWdlQnlJZCIsImltYWdlSWQiLCJmb3JtYXRJbWFnZUlkIiwib3BlcmF0b3IiLCJnZXRVc2VySW1hZ2VQYXRoIiwiaW1hZ2VUeXBlIiwiZGlyIiwiZmlsZW5hbWUiLCJnZXRBcHBJbWFnZVVybCIsImJ1Y2tldCIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlSWQiLCJidWNrZXROYW1lIiwiaW1hZ2VOYW1lIiwiaW1hZ2VVcmwiLCJnZXRJbWFnZVVybCIsImltYWdlRGlyIiwidXJsVHlwZSIsImNvbmZpZ3VyZWRJbWFnZVVybCIsImNvbmZpZ3VyZWRBcHBVcmwiLCJwdWJsaWNCYXNlVXJsIiwiZGV2QmFzZVVybCIsInRodW1iU3VmZml4IiwiaW1hZ2VLZXkiLCJCdWNrZXQiLCJFeHBpcmVzIiwiS2V5IiwicmVzaXplQW5kU2F2ZUltYWdlIiwiYnVmZmVyIiwiZmlsZVR5cGUiLCJzM09wdGlvbnMiLCJpbWdXIiwiaW1nUSIsInNwbGl0Iiwic2hhcnBGb3JtYXQiLCJpbWFnZU9wdGltaXplZEJ1ZmZlciIsInRodW1iT3B0aW1pemVkQnVmZmVyIiwiaW1hZ2VJZGVudGl0eSIsImZpbGVTaXplIiwicm90YXRlIiwicmVzaXplIiwiZml0IiwiaGVpZ2h0Iiwid2lkdGgiLCJ3aXRob3V0RW5sYXJnZW1lbnQiLCJ0b0Zvcm1hdCIsInF1YWxpdHkiLCJ0b0J1ZmZlciIsIklNQUdFX1NBVkUiLCJpbWFnZU9iaiIsIkJvZHkiLCJDb250ZW50VHlwZSIsImltYWdlTWV0YWRhdGEiLCJpbWFnZVN0YXRzIiwic291cmNlTWV0YWRhdGEiLCJQcm9taXNlIiwic3RhdHMiLCJiIiwiZyIsInIiLCJkb21pbmFudCIsImNvbG9yIiwidG9TdHJpbmciLCJwYWRTdGFydCIsImV4aWZNZXRhZGF0YSIsIm9yaWVudGF0aW9uIiwicmVzb2x1dGlvbiIsImRlbnNpdHkiLCJ0aG1XIiwidGhtUSIsInBvc2l0aW9uIiwidGh1bWJPYmoiLCJhZGRJbWFnZSIsImRlc2NyaXB0aW9uIiwicmVzaXplZEltYWdlIiwiaW5zZXJ0IiwiX2tleSIsInNhdmVkSW1hZ2UiLCJhZGRJbWFnZUVkZ2UiLCJJTUFHRV9SRVNJWkUiLCJpbWFnZUVkZ2UiLCJub3ciLCJlZGdlSWQiLCJmb3JtYXRJdGVtSWQiLCJpdGVtRG9jSWQiLCJmaWxlRG9jSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJhZGRlZCIsInNhdmUiLCJyZXR1cm5OZXciLCJmaWxlRWRnZSIsImRvY3VtZW50IiwidXBkYXRlSW1hZ2UiLCJiYXNlNjQiLCJpbWFnZUJ1ZmZlciIsInVybCIsImN1c3RvbVBhcmFtcyIsImZvcm1hdEJhc2U2NCIsInN1YnN0ciIsImluZGV4T2YiLCJCdWZmZXIiLCJ1cGRhdGVkRmlsZVR5cGUiLCJmaWxlVHlwZUZyb21CdWZmZXIiLCJtaW1lIiwiaW1nUGFyYW1zIiwiY29udGVudFR5cGUiLCJyZXMiLCJzdGF0dXMiLCJJTUFHRV9SRVFVRVNUIiwiaGVhZGVycyIsInVwZGF0ZSIsImRlbGV0ZUltYWdlIiwiY2FzY2FkZSIsIm93bmVyc2hpcCIsIkRlbGV0ZSIsIk9iamVjdHMiLCJRdWlldCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsU0FBUUEsT0FBT0MsT0FBTyxRQUFPLG9CQUFvQjtBQUNqRCxTQUFRQyxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFDL0MsT0FBT0MsZ0JBQWdCLGNBQWM7QUFDckMsT0FBT0MsV0FBVyxRQUFRO0FBRTFCLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLFdBQVcsRUFBRUMsS0FBSyxRQUFPLDhCQUE4QjtBQUMvRCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsRUFBRUMsWUFBWSxRQUFPLDZCQUE2QjtBQUNsRSxTQUFRQyxRQUFRLEVB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
@@ -1,14 +1,16 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */
5
5
  export * from './apps.js';
6
+ export * from './analytics.js';
6
7
  export * from './connections.js';
7
8
  export * from './conversations.js';
8
9
  export * from './crm.js';
9
10
  export * from './dynamodb.js';
10
11
  export * from './email.js';
11
12
  export * from './files.js';
13
+ export * from './flags.js';
12
14
  export * from './groups.js';
13
15
  export * from './images.js';
14
16
  export * from './ios.js';
@@ -28,4 +30,3 @@ export * from './subscriptions.js';
28
30
  export * from './tags.js';
29
31
  export * from './users.js';
30
32
  export * from './videos.js';
31
- export * from './websockets.js';
@@ -1,13 +1,15 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ export * from './apps.js';
5
+ export * from './analytics.js';
5
6
  export * from './connections.js';
6
7
  export * from './conversations.js';
7
8
  export * from './crm.js';
8
9
  export * from './dynamodb.js';
9
10
  export * from './email.js';
10
11
  export * from './files.js';
12
+ export * from './flags.js';
11
13
  export * from './groups.js';
12
14
  export * from './images.js';
13
15
  export * from './ios.js';
@@ -27,6 +29,5 @@ export * from './subscriptions.js';
27
29
  export * from './tags.js';
28
30
  export * from './users.js';
29
31
  export * from './videos.js';
30
- export * from './websockets.js';
31
32
 
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vYXBwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Nvbm5lY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udmVyc2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NybS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtb2RiLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZW1haWwuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lvcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BheW1lbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zdHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3J1bS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3MzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGlzdGljcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90YWdzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92aWRlb3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWJzb2NrZXRzLmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxjQUFjLFlBQVk7QUFDMUIsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsY0FBYztBQUM1QixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsV0FBVztBQUN6QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsY0FBYztBQUM1QixjQUFjLGtCQUFrQiJ9
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2FwcHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hbmFseXRpY3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25uZWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcm0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lvcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BheW1lbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zdHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3J1bS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3MzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGlzdGljcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90YWdzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92aWRlb3MuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELGNBQWMsWUFBWTtBQUMxQixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFdBQVc7QUFDekIsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsY0FBYztBQUM1QixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsV0FBVztBQUN6QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsY0FBYyJ9