@nlabs/reaktor 1.4.1 → 1.5.1

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 (419) hide show
  1. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/apps.d.ts +1 -2
  2. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/connections.d.ts +0 -1
  3. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/content.d.ts +0 -1
  4. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/conversations.d.ts +0 -1
  5. package/lib/Users/nitrog7/Development/reaktor/src/actions/crm.d.ts +28 -0
  6. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/crud.d.ts +0 -1
  7. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/dynamodb.d.ts +0 -1
  8. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/email.d.ts +0 -1
  9. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/files.d.ts +0 -1
  10. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/groups.d.ts +0 -1
  11. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/images.d.ts +0 -1
  12. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/index.d.ts +2 -1
  13. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/ios.d.ts +0 -1
  14. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/locations.d.ts +0 -1
  15. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/messages.d.ts +0 -1
  16. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/notifications.d.ts +0 -1
  17. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/payments.d.ts +0 -1
  18. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/personas.d.ts +1 -2
  19. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/posts.d.ts +0 -1
  20. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/query.d.ts +0 -1
  21. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/reactions.d.ts +0 -1
  22. package/lib/Users/nitrog7/Development/reaktor/src/actions/rum.d.ts +3 -0
  23. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/s3.d.ts +0 -1
  24. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/search.d.ts +0 -1
  25. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/sms.d.ts +0 -1
  26. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/statistics.d.ts +0 -1
  27. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/subscriptions.d.ts +0 -1
  28. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/tags.d.ts +0 -1
  29. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/users.d.ts +2 -3
  30. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/videos.d.ts +0 -1
  31. package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/websockets.d.ts +0 -1
  32. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/arangoAdapter.d.ts +0 -1
  33. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/contentAdapter.d.ts +0 -1
  34. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/fileAdapter.d.ts +0 -1
  35. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/imageAdapter.d.ts +0 -1
  36. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/index.d.ts +0 -1
  37. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/messageAdapter.d.ts +0 -1
  38. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/postAdapter.d.ts +0 -1
  39. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/reaktorAdapter.d.ts +0 -1
  40. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/tagAdapter.d.ts +0 -1
  41. package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/userAdapter.d.ts +0 -1
  42. package/lib/{config.d.ts → Users/nitrog7/Development/reaktor/src/config.d.ts} +0 -1
  43. package/lib/Users/nitrog7/Development/reaktor/src/constants/collections.d.ts +86 -0
  44. package/lib/{handlers → Users/nitrog7/Development/reaktor/src/handlers}/graphqlHandler.d.ts +0 -1
  45. package/lib/{index.d.ts → Users/nitrog7/Development/reaktor/src/index.d.ts} +0 -1
  46. package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/actions/websockets.d.ts +0 -1
  47. package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/authorizer.d.ts +0 -1
  48. package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/connection.d.ts +4 -5
  49. package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/utils/message.d.ts +0 -1
  50. package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/utils/websocket.d.ts +0 -1
  51. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/conversation.d.ts +1 -2
  52. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/file.d.ts +0 -1
  53. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/group.d.ts +0 -1
  54. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/image.d.ts +0 -1
  55. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/post.d.ts +1 -2
  56. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/tag.d.ts +0 -1
  57. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/user.d.ts +0 -1
  58. package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/video.d.ts +0 -1
  59. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/content/content.d.ts +0 -1
  60. package/lib/Users/nitrog7/Development/reaktor/src/mutations/crm/crm.d.ts +1 -0
  61. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/events/events.d.ts +0 -1
  62. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/groups/groups.d.ts +0 -1
  63. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/images/images.d.ts +0 -1
  64. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/index.d.ts +3 -2
  65. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/locations/locations.d.ts +0 -1
  66. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/messages/messages.d.ts +0 -1
  67. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/personas/personas.d.ts +0 -1
  68. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/posts/posts.d.ts +0 -1
  69. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/reactions/reactions.d.ts +0 -1
  70. package/lib/Users/nitrog7/Development/reaktor/src/mutations/rum/rum.d.ts +1 -0
  71. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/statistics/statistics.d.ts +0 -1
  72. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/subscriptions/subscriptions.d.ts +0 -1
  73. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/tags/tags.d.ts +0 -1
  74. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/users/users.d.ts +0 -1
  75. package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/videos/videos.d.ts +0 -1
  76. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/app.d.ts +0 -1
  77. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/bankAccount.d.ts +0 -1
  78. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/connection.d.ts +0 -1
  79. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/content.d.ts +0 -1
  80. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/conversation.d.ts +0 -1
  81. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/creditCard.d.ts +0 -1
  82. package/lib/Users/nitrog7/Development/reaktor/src/objectTypes/crm.d.ts +12 -0
  83. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/document.d.ts +0 -1
  84. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/error.d.ts +0 -1
  85. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/event.d.ts +0 -1
  86. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/external.d.ts +0 -1
  87. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/file.d.ts +0 -1
  88. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/filter.d.ts +0 -1
  89. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/group.d.ts +0 -1
  90. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/iapSubscription.d.ts +0 -1
  91. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/image.d.ts +0 -1
  92. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/index.d.ts +2 -1
  93. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/location.d.ts +0 -1
  94. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/message.d.ts +0 -1
  95. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/passcode.d.ts +0 -1
  96. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/persona.d.ts +0 -1
  97. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/plan.d.ts +0 -1
  98. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/post.d.ts +0 -1
  99. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/query.d.ts +0 -1
  100. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/reaction.d.ts +0 -1
  101. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/relation.d.ts +0 -1
  102. package/lib/Users/nitrog7/Development/reaktor/src/objectTypes/rum.d.ts +3 -0
  103. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/search.d.ts +0 -1
  104. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/statistics.d.ts +0 -1
  105. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/subscription.d.ts +0 -1
  106. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/tag.d.ts +0 -1
  107. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/user.d.ts +0 -1
  108. package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/video.d.ts +0 -1
  109. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/content/content.d.ts +0 -1
  110. package/lib/Users/nitrog7/Development/reaktor/src/queries/crm/crm.d.ts +1 -0
  111. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/events/events.d.ts +0 -1
  112. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/groups/groups.d.ts +0 -1
  113. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/images/images.d.ts +0 -1
  114. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/index.d.ts +2 -2
  115. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/locations/locations.d.ts +0 -1
  116. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/messages/messages.d.ts +0 -1
  117. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/personas/personas.d.ts +0 -1
  118. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/posts/posts.d.ts +0 -1
  119. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/query/query.d.ts +0 -1
  120. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/reactions/reactions.d.ts +0 -1
  121. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/statistics/statistics.d.ts +0 -1
  122. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/subscriptions/subscriptions.d.ts +0 -1
  123. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/tags/tags.d.ts +0 -1
  124. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/users/users.d.ts +0 -1
  125. package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/videos/videos.d.ts +0 -1
  126. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/layout.d.ts +2 -0
  127. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordForgot.d.ts +2 -0
  128. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordRecovery.d.ts +2 -0
  129. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/verifyEmail.d.ts +2 -0
  130. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/welcome.d.ts +2 -0
  131. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordForgot.d.ts +2 -0
  132. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordRecovery.d.ts +2 -0
  133. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyEmail.d.ts +2 -0
  134. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyPhone.d.ts +2 -0
  135. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/welcome.d.ts +2 -0
  136. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/apps.types.d.ts +0 -1
  137. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/arangodb.types.d.ts +1 -2
  138. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/auth.types.d.ts +0 -1
  139. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/connections.types.d.ts +2 -3
  140. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/content.types.d.ts +0 -1
  141. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/conversations.types.d.ts +0 -1
  142. package/lib/Users/nitrog7/Development/reaktor/src/types/crm.types.d.ts +89 -0
  143. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/email.types.d.ts +0 -1
  144. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/error.types.d.ts +0 -1
  145. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/files.types.d.ts +0 -1
  146. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/google.types.d.ts +0 -1
  147. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/groups.types.d.ts +0 -1
  148. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/images.types.d.ts +0 -1
  149. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/index.d.ts +2 -1
  150. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/locations.types.d.ts +0 -1
  151. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/messages.types.d.ts +0 -1
  152. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/notifications.types.d.ts +0 -1
  153. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/payments.types.d.ts +0 -1
  154. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/personas.types.d.ts +0 -1
  155. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/posts.types.d.ts +0 -1
  156. package/lib/Users/nitrog7/Development/reaktor/src/types/rum.types.d.ts +23 -0
  157. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/statistics.types.d.ts +0 -1
  158. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/tags.types.d.ts +0 -1
  159. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/users.types.d.ts +20 -1
  160. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/videos.types.d.ts +0 -1
  161. package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/websockets.types.d.ts +0 -1
  162. package/lib/{upload.d.ts → Users/nitrog7/Development/reaktor/src/upload.d.ts} +0 -1
  163. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/adapterUtils.d.ts +0 -1
  164. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/analyticsUtils.d.ts +0 -1
  165. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/aqlHelpers.d.ts +4 -1
  166. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/arangodbUtils.d.ts +0 -1
  167. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/authUtils.d.ts +0 -1
  168. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/awsUtils.d.ts +0 -1
  169. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/collectionRegistry.d.ts +0 -1
  170. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/contextUtils.d.ts +0 -1
  171. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/dbI18n.d.ts +0 -1
  172. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/dbI18n.example.d.ts +0 -1
  173. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/googleTranslate.d.ts +0 -1
  174. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/graphqlUtils.d.ts +1 -2
  175. package/lib/Users/nitrog7/Development/reaktor/src/utils/imageUtils.d.ts +1 -0
  176. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/index.d.ts +0 -1
  177. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/languageDetection.d.ts +0 -1
  178. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/localeUtils.d.ts +0 -1
  179. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/localeUtils.example.d.ts +1 -1
  180. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/middlewareUtils.d.ts +0 -1
  181. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/queryBuilder.d.ts +0 -1
  182. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/schemaUtils.d.ts +0 -1
  183. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/sessionUtils.d.ts +0 -1
  184. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/stripeUtils.d.ts +1 -2
  185. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/templateUtils.d.ts +0 -1
  186. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/testUtils.d.ts +0 -1
  187. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/translationQueue.d.ts +0 -1
  188. package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/translationQueue.example.d.ts +0 -1
  189. package/lib/{videoProcessing.d.ts → Users/nitrog7/Development/reaktor/src/videoProcessing.d.ts} +2 -3
  190. package/lib/actions/apps.js +2 -2
  191. package/lib/actions/content.js +1 -2
  192. package/lib/actions/crm.js +498 -0
  193. package/lib/actions/crud.js +1 -1
  194. package/lib/actions/groups.js +2 -2
  195. package/lib/actions/images.js +3 -10
  196. package/lib/actions/index.js +3 -1
  197. package/lib/actions/locations.js +1 -2
  198. package/lib/actions/posts.js +3 -3
  199. package/lib/actions/rum.js +66 -0
  200. package/lib/actions/search.js +30 -53
  201. package/lib/actions/users.js +124 -160
  202. package/lib/adapters/messageAdapter.js +7 -5
  203. package/lib/adapters/userAdapter.js +42 -2
  204. package/lib/constants/collections.js +17 -1
  205. package/lib/mocks/image.js +3 -3
  206. package/lib/mocks/video.js +3 -3
  207. package/lib/mutations/crm/crm.js +67 -0
  208. package/lib/mutations/index.js +12 -2
  209. package/lib/mutations/rum/rum.js +20 -0
  210. package/lib/objectTypes/crm.js +188 -0
  211. package/lib/objectTypes/index.js +3 -1
  212. package/lib/objectTypes/persona.js +3 -2
  213. package/lib/objectTypes/rum.js +33 -0
  214. package/lib/objectTypes/user.js +83 -2
  215. package/lib/queries/crm/crm.js +77 -0
  216. package/lib/queries/index.js +7 -2
  217. package/lib/queries/videos/videos.js +1 -1
  218. package/lib/types/apps.types.js +1 -1
  219. package/lib/types/arangodb.types.js +1 -1
  220. package/lib/types/crm.types.js +6 -0
  221. package/lib/types/index.js +3 -1
  222. package/lib/types/rum.types.js +6 -0
  223. package/lib/types/users.types.js +1 -1
  224. package/lib/utils/aqlHelpers.js +13 -2
  225. package/lib/utils/collectionRegistry.js +18 -1
  226. package/lib/utils/imageUtils.js +6 -0
  227. package/lib/utils/localeUtils.example.js +3 -4
  228. package/lib/utils/stripeUtils.js +2 -2
  229. package/package.json +53 -39
  230. package/lib/actions/apps.d.ts.map +0 -1
  231. package/lib/actions/connections.d.ts.map +0 -1
  232. package/lib/actions/content.d.ts.map +0 -1
  233. package/lib/actions/conversations.d.ts.map +0 -1
  234. package/lib/actions/crud.d.ts.map +0 -1
  235. package/lib/actions/dynamodb.d.ts.map +0 -1
  236. package/lib/actions/email.d.ts.map +0 -1
  237. package/lib/actions/files.d.ts.map +0 -1
  238. package/lib/actions/groups.d.ts.map +0 -1
  239. package/lib/actions/images.d.ts.map +0 -1
  240. package/lib/actions/index.d.ts.map +0 -1
  241. package/lib/actions/ios.d.ts.map +0 -1
  242. package/lib/actions/locations.d.ts.map +0 -1
  243. package/lib/actions/messages.d.ts.map +0 -1
  244. package/lib/actions/notifications.d.ts.map +0 -1
  245. package/lib/actions/payments.d.ts.map +0 -1
  246. package/lib/actions/personas.d.ts.map +0 -1
  247. package/lib/actions/posts.d.ts.map +0 -1
  248. package/lib/actions/query.d.ts.map +0 -1
  249. package/lib/actions/reactions.d.ts.map +0 -1
  250. package/lib/actions/s3.d.ts.map +0 -1
  251. package/lib/actions/search.d.ts.map +0 -1
  252. package/lib/actions/sms.d.ts.map +0 -1
  253. package/lib/actions/statistics.d.ts.map +0 -1
  254. package/lib/actions/subscriptions.d.ts.map +0 -1
  255. package/lib/actions/tags.d.ts.map +0 -1
  256. package/lib/actions/users.d.ts.map +0 -1
  257. package/lib/actions/videos.d.ts.map +0 -1
  258. package/lib/actions/websockets.d.ts.map +0 -1
  259. package/lib/adapters/arangoAdapter.d.ts.map +0 -1
  260. package/lib/adapters/contentAdapter.d.ts.map +0 -1
  261. package/lib/adapters/fileAdapter.d.ts.map +0 -1
  262. package/lib/adapters/imageAdapter.d.ts.map +0 -1
  263. package/lib/adapters/index.d.ts.map +0 -1
  264. package/lib/adapters/messageAdapter.d.ts.map +0 -1
  265. package/lib/adapters/postAdapter.d.ts.map +0 -1
  266. package/lib/adapters/reaktorAdapter.d.ts.map +0 -1
  267. package/lib/adapters/tagAdapter.d.ts.map +0 -1
  268. package/lib/adapters/userAdapter.d.ts.map +0 -1
  269. package/lib/config.d.ts.map +0 -1
  270. package/lib/constants/collections.d.ts +0 -71
  271. package/lib/constants/collections.d.ts.map +0 -1
  272. package/lib/handlers/graphqlHandler.d.ts.map +0 -1
  273. package/lib/index.d.ts.map +0 -1
  274. package/lib/lambdas/actions/websockets.d.ts.map +0 -1
  275. package/lib/lambdas/authorizer.d.ts.map +0 -1
  276. package/lib/lambdas/connection.d.ts.map +0 -1
  277. package/lib/lambdas/utils/message.d.ts.map +0 -1
  278. package/lib/lambdas/utils/websocket.d.ts.map +0 -1
  279. package/lib/mocks/conversation.d.ts.map +0 -1
  280. package/lib/mocks/file.d.ts.map +0 -1
  281. package/lib/mocks/group.d.ts.map +0 -1
  282. package/lib/mocks/image.d.ts.map +0 -1
  283. package/lib/mocks/post.d.ts.map +0 -1
  284. package/lib/mocks/tag.d.ts.map +0 -1
  285. package/lib/mocks/user.d.ts.map +0 -1
  286. package/lib/mocks/video.d.ts.map +0 -1
  287. package/lib/mutations/content/content.d.ts.map +0 -1
  288. package/lib/mutations/events/events.d.ts.map +0 -1
  289. package/lib/mutations/groups/groups.d.ts.map +0 -1
  290. package/lib/mutations/images/images.d.ts.map +0 -1
  291. package/lib/mutations/index.d.ts.map +0 -1
  292. package/lib/mutations/locations/locations.d.ts.map +0 -1
  293. package/lib/mutations/messages/messages.d.ts.map +0 -1
  294. package/lib/mutations/personas/personas.d.ts.map +0 -1
  295. package/lib/mutations/posts/posts.d.ts.map +0 -1
  296. package/lib/mutations/reactions/reactions.d.ts.map +0 -1
  297. package/lib/mutations/statistics/statistics.d.ts.map +0 -1
  298. package/lib/mutations/subscriptions/subscriptions.d.ts.map +0 -1
  299. package/lib/mutations/tags/tags.d.ts.map +0 -1
  300. package/lib/mutations/users/users.d.ts.map +0 -1
  301. package/lib/mutations/videos/videos.d.ts.map +0 -1
  302. package/lib/objectTypes/app.d.ts.map +0 -1
  303. package/lib/objectTypes/bankAccount.d.ts.map +0 -1
  304. package/lib/objectTypes/connection.d.ts.map +0 -1
  305. package/lib/objectTypes/content.d.ts.map +0 -1
  306. package/lib/objectTypes/conversation.d.ts.map +0 -1
  307. package/lib/objectTypes/creditCard.d.ts.map +0 -1
  308. package/lib/objectTypes/document.d.ts.map +0 -1
  309. package/lib/objectTypes/error.d.ts.map +0 -1
  310. package/lib/objectTypes/event.d.ts.map +0 -1
  311. package/lib/objectTypes/external.d.ts.map +0 -1
  312. package/lib/objectTypes/file.d.ts.map +0 -1
  313. package/lib/objectTypes/filter.d.ts.map +0 -1
  314. package/lib/objectTypes/group.d.ts.map +0 -1
  315. package/lib/objectTypes/iapSubscription.d.ts.map +0 -1
  316. package/lib/objectTypes/image.d.ts.map +0 -1
  317. package/lib/objectTypes/index.d.ts.map +0 -1
  318. package/lib/objectTypes/location.d.ts.map +0 -1
  319. package/lib/objectTypes/message.d.ts.map +0 -1
  320. package/lib/objectTypes/passcode.d.ts.map +0 -1
  321. package/lib/objectTypes/persona.d.ts.map +0 -1
  322. package/lib/objectTypes/plan.d.ts.map +0 -1
  323. package/lib/objectTypes/post.d.ts.map +0 -1
  324. package/lib/objectTypes/query.d.ts.map +0 -1
  325. package/lib/objectTypes/reaction.d.ts.map +0 -1
  326. package/lib/objectTypes/relation.d.ts.map +0 -1
  327. package/lib/objectTypes/search.d.ts.map +0 -1
  328. package/lib/objectTypes/statistics.d.ts.map +0 -1
  329. package/lib/objectTypes/subscription.d.ts.map +0 -1
  330. package/lib/objectTypes/tag.d.ts.map +0 -1
  331. package/lib/objectTypes/user.d.ts.map +0 -1
  332. package/lib/objectTypes/video.d.ts.map +0 -1
  333. package/lib/queries/content/content.d.ts.map +0 -1
  334. package/lib/queries/events/events.d.ts.map +0 -1
  335. package/lib/queries/groups/groups.d.ts.map +0 -1
  336. package/lib/queries/images/images.d.ts.map +0 -1
  337. package/lib/queries/index.d.ts.map +0 -1
  338. package/lib/queries/locations/locations.d.ts.map +0 -1
  339. package/lib/queries/messages/messages.d.ts.map +0 -1
  340. package/lib/queries/personas/personas.d.ts.map +0 -1
  341. package/lib/queries/posts/posts.d.ts.map +0 -1
  342. package/lib/queries/query/query.d.ts.map +0 -1
  343. package/lib/queries/reactions/reactions.d.ts.map +0 -1
  344. package/lib/queries/statistics/statistics.d.ts.map +0 -1
  345. package/lib/queries/subscriptions/subscriptions.d.ts.map +0 -1
  346. package/lib/queries/tags/tags.d.ts.map +0 -1
  347. package/lib/queries/users/users.d.ts.map +0 -1
  348. package/lib/queries/videos/videos.d.ts.map +0 -1
  349. package/lib/templates/email/layout.d.ts +0 -3
  350. package/lib/templates/email/layout.d.ts.map +0 -1
  351. package/lib/templates/email/passwordForgot.d.ts +0 -3
  352. package/lib/templates/email/passwordForgot.d.ts.map +0 -1
  353. package/lib/templates/email/passwordRecovery.d.ts +0 -3
  354. package/lib/templates/email/passwordRecovery.d.ts.map +0 -1
  355. package/lib/templates/email/verifyEmail.d.ts +0 -3
  356. package/lib/templates/email/verifyEmail.d.ts.map +0 -1
  357. package/lib/templates/email/welcome.d.ts +0 -3
  358. package/lib/templates/email/welcome.d.ts.map +0 -1
  359. package/lib/templates/sms/passwordForgot.d.ts +0 -3
  360. package/lib/templates/sms/passwordForgot.d.ts.map +0 -1
  361. package/lib/templates/sms/passwordRecovery.d.ts +0 -3
  362. package/lib/templates/sms/passwordRecovery.d.ts.map +0 -1
  363. package/lib/templates/sms/verifyEmail.d.ts +0 -3
  364. package/lib/templates/sms/verifyEmail.d.ts.map +0 -1
  365. package/lib/templates/sms/verifyPhone.d.ts +0 -3
  366. package/lib/templates/sms/verifyPhone.d.ts.map +0 -1
  367. package/lib/templates/sms/welcome.d.ts +0 -3
  368. package/lib/templates/sms/welcome.d.ts.map +0 -1
  369. package/lib/types/apps.types.d.ts.map +0 -1
  370. package/lib/types/arangodb.types.d.ts.map +0 -1
  371. package/lib/types/auth.types.d.ts.map +0 -1
  372. package/lib/types/connections.types.d.ts.map +0 -1
  373. package/lib/types/content.types.d.ts.map +0 -1
  374. package/lib/types/conversations.types.d.ts.map +0 -1
  375. package/lib/types/email.types.d.ts.map +0 -1
  376. package/lib/types/error.types.d.ts.map +0 -1
  377. package/lib/types/files.types.d.ts.map +0 -1
  378. package/lib/types/google.types.d.ts.map +0 -1
  379. package/lib/types/groups.types.d.ts.map +0 -1
  380. package/lib/types/images.types.d.ts.map +0 -1
  381. package/lib/types/index.d.ts.map +0 -1
  382. package/lib/types/locations.types.d.ts.map +0 -1
  383. package/lib/types/messages.types.d.ts.map +0 -1
  384. package/lib/types/notifications.types.d.ts.map +0 -1
  385. package/lib/types/payments.types.d.ts.map +0 -1
  386. package/lib/types/personas.types.d.ts.map +0 -1
  387. package/lib/types/posts.types.d.ts.map +0 -1
  388. package/lib/types/statistics.types.d.ts.map +0 -1
  389. package/lib/types/tags.types.d.ts.map +0 -1
  390. package/lib/types/users.types.d.ts.map +0 -1
  391. package/lib/types/videos.types.d.ts.map +0 -1
  392. package/lib/types/websockets.types.d.ts.map +0 -1
  393. package/lib/upload.d.ts.map +0 -1
  394. package/lib/utils/adapterUtils.d.ts.map +0 -1
  395. package/lib/utils/analyticsUtils.d.ts.map +0 -1
  396. package/lib/utils/aqlHelpers.d.ts.map +0 -1
  397. package/lib/utils/arangodbUtils.d.ts.map +0 -1
  398. package/lib/utils/authUtils.d.ts.map +0 -1
  399. package/lib/utils/awsUtils.d.ts.map +0 -1
  400. package/lib/utils/collectionRegistry.d.ts.map +0 -1
  401. package/lib/utils/contextUtils.d.ts.map +0 -1
  402. package/lib/utils/dbI18n.d.ts.map +0 -1
  403. package/lib/utils/dbI18n.example.d.ts.map +0 -1
  404. package/lib/utils/googleTranslate.d.ts.map +0 -1
  405. package/lib/utils/graphqlUtils.d.ts.map +0 -1
  406. package/lib/utils/index.d.ts.map +0 -1
  407. package/lib/utils/languageDetection.d.ts.map +0 -1
  408. package/lib/utils/localeUtils.d.ts.map +0 -1
  409. package/lib/utils/localeUtils.example.d.ts.map +0 -1
  410. package/lib/utils/middlewareUtils.d.ts.map +0 -1
  411. package/lib/utils/queryBuilder.d.ts.map +0 -1
  412. package/lib/utils/schemaUtils.d.ts.map +0 -1
  413. package/lib/utils/sessionUtils.d.ts.map +0 -1
  414. package/lib/utils/stripeUtils.d.ts.map +0 -1
  415. package/lib/utils/templateUtils.d.ts.map +0 -1
  416. package/lib/utils/testUtils.d.ts.map +0 -1
  417. package/lib/utils/translationQueue.d.ts.map +0 -1
  418. package/lib/utils/translationQueue.example.d.ts.map +0 -1
  419. package/lib/videoProcessing.d.ts.map +0 -1
@@ -410,4 +410,4 @@ const eventCategory = 'crud';
410
410
  return count > 0;
411
411
  };
412
412
 
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY3J1ZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge2xpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRGaWx0ZXJDbGF1c2V9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge3JlZ2lzdHJ5fSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9uUmVnaXN0cnkuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjcnVkJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBDUlVEIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcnVkT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHNvcnQ/OiBSZWFkb25seUFycmF5PHtyZWFkb25seSBmaWVsZDogc3RyaW5nOyByZWFkb25seSBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnfT47XG4gIHJlYWRvbmx5IGxpbWl0Pzoge3JlYWRvbmx5IGZyb206IG51bWJlcjsgcmVhZG9ubHkgdG86IG51bWJlcn07XG4gIHJlYWRvbmx5IGZpZWxkcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gU2VsZWN0IHNwZWNpZmljIGZpZWxkc1xuICByZWFkb25seSBpbmNsdWRlRWRnZXM/OiBSZWFkb25seUFycmF5PHN0cmluZz47IC8vIEluY2x1ZGUgcmVsYXRlZCBkb2N1bWVudHMgdmlhIGVkZ2VzXG4gIHJlYWRvbmx5IHByaXZhY3k/OiBib29sZWFuOyAvLyBBcHBseSBwcml2YWN5IGNoZWNrcyAoZGVmYXVsdDogdHJ1ZSlcbiAgcmVhZG9ubHkgb3duZXJzaGlwPzogYm9vbGVhbjsgLy8gQXBwbHkgb3duZXJzaGlwIGNoZWNrcyAoZGVmYXVsdDogZmFsc2UpXG4gIHJlYWRvbmx5IGN1c3RvbVF1ZXJpZXM/OiBSZWFkb25seUFycmF5PHN0cmluZz47IC8vIEFkZGl0aW9uYWwgY3VzdG9tIHF1ZXJ5IHN0cmluZ3NcbiAgcmVhZG9ubHkgY3VzdG9tT2JqZWN0cz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gQWRkaXRpb25hbCBjdXN0b20gb2JqZWN0IHNlbGVjdGlvbnNcbn1cblxuLyoqXG4gKiBCdWlsZCBmaWx0ZXIgY2xhdXNlIGZyb20gZmlsdGVycyBvYmplY3Qgb3IgRmlsdGVyR3JvdXBcbiAqL1xuY29uc3QgYnVpbGRGaWx0ZXJzID0gKFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXAsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICAvLyBJZiBpdCdzIGEgRmlsdGVyR3JvdXAgd2l0aCBsb2dpYyBhbmQgY29uZGl0aW9uc1xuICBpZiAoJ2xvZ2ljJyBpbiBmaWx0ZXJzICYmICdjb25kaXRpb25zJyBpbiBmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIGJ1aWxkRmlsdGVyQ2xhdXNlKGZpbHRlcnMgYXMgRmlsdGVyR3JvdXAsIHZhck5hbWUpO1xuICB9XG5cbiAgLy8gU2ltcGxlIG9iamVjdCBmaWx0ZXJzXG4gIGNvbnN0IHNpbXBsZUZpbHRlcnMgPSBmaWx0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbnN0IGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2ltcGxlRmlsdGVycykpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChgJHt2YXJOYW1lfS4ke2tleX0gPT0gbnVsbGApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKGAke3Zhck5hbWV9LiR7a2V5fSA9PSBcIiR7dmFsdWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKGAke3Zhck5hbWV9LiR7a2V5fSA9PSAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZGl0aW9ucy5qb2luKCcgJiYgJyk7XG59O1xuXG4vKipcbiAqIEJ1aWxkIHNvcnQgY2xhdXNlXG4gKi9cbmNvbnN0IGJ1aWxkU29ydCA9IChcbiAgc29ydDogUmVhZG9ubHlBcnJheTx7cmVhZG9ubHkgZmllbGQ6IHN0cmluZzsgcmVhZG9ubHkgZGlyZWN0aW9uOiAnQVNDJyB8ICdERVNDJ30+LFxuICB2YXJOYW1lOiBzdHJpbmcgPSAnZG9jJ1xuKTogc3RyaW5nID0+IHtcbiAgaWYgKCFzb3J0IHx8IHNvcnQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3Qgc29ydFBhcnRzID0gc29ydC5tYXAoKHtmaWVsZCwgZGlyZWN0aW9ufSkgPT4gYCR7dmFyTmFtZX0uJHtmaWVsZH0gJHtkaXJlY3Rpb259YCk7XG4gIHJldHVybiBgU09SVCAke3NvcnRQYXJ0cy5qb2luKCcsICcpfWA7XG59O1xuXG4vKipcbiAqIEJ1aWxkIGxpbWl0IGNsYXVzZVxuICovXG5jb25zdCBidWlsZExpbWl0ID0gKGxpbWl0Pzoge3JlYWRvbmx5IGZyb206IG51bWJlcjsgcmVhZG9ubHkgdG86IG51bWJlcn0pOiBzdHJpbmcgPT4ge1xuICBpZiAoIWxpbWl0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3Qge2Zyb20sIHRvfSA9IGxpbWl0O1xuICBjb25zdCBjb3VudCA9IHRvIC0gZnJvbTtcbiAgcmV0dXJuIGBMSU1JVCAke2Zyb219LCAke2NvdW50fWA7XG59O1xuXG4vKipcbiAqIEFwcGx5IHByaXZhY3kgZmlsdGVyIGlmIGNvbGxlY3Rpb24gaGFzIHByaXZhY3lcbiAqL1xuY29uc3QgYXBwbHlQcml2YWN5RmlsdGVyID0gKFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB2YXJOYW1lOiBzdHJpbmcgPSAnZG9jJ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY29uZmlnID0gcmVnaXN0cnkuZ2V0KGNvbGxlY3Rpb24pO1xuXG4gIGlmICghY29uZmlnIHx8ICFjb25maWcuaGFzUHJpdmFjeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIElmIG5vIHNlc3Npb24sIG9ubHkgcmV0dXJuIHB1YmxpYyBpdGVtc1xuICBpZiAoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBgJHt2YXJOYW1lfS5wcml2YWN5ID09IFwicHVibGljXCJgO1xuICB9XG5cbiAgLy8gUmV0dXJuIGl0ZW1zIHRoYXQgYXJlIHB1YmxpYyBPUiBvd25lZCBieSB0aGUgdXNlclxuICByZXR1cm4gYCgke3Zhck5hbWV9LnByaXZhY3kgPT0gXCJwdWJsaWNcIiB8fCAke3Zhck5hbWV9LnVzZXJJZCA9PSBcIiR7c2Vzc2lvbklkfVwiKWA7XG59O1xuXG4vKipcbiAqIEFwcGx5IG93bmVyc2hpcCBmaWx0ZXJcbiAqL1xuY29uc3QgYXBwbHlPd25lcnNoaXBGaWx0ZXIgPSAoXG4gIHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB2YXJOYW1lOiBzdHJpbmcgPSAnZG9jJ1xuKTogc3RyaW5nID0+IHtcbiAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICByZXR1cm4gYCR7dmFyTmFtZX0udXNlcklkID09IFwiJHtzZXNzaW9uSWR9XCJgO1xufTtcblxuLyoqXG4gKiBHZXQgYSBzaW5nbGUgaXRlbSBmcm9tIGFueSBjb2xsZWN0aW9uIGJ5IGZpbHRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEl0ZW1CeSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXAsXG4gIG9wdGlvbnM6IENydWRPcHRpb25zID0ge31cbik6IFByb21pc2U8VCB8IG51bGw+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW1CeSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7cHJpdmFjeSA9IGZhbHNlLCBvd25lcnNoaXAgPSBmYWxzZSwgY3VzdG9tUXVlcmllcyA9IFtdLCBjdXN0b21PYmplY3RzID0gW119ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoZmlsdGVyQ2xhdXNlKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goZmlsdGVyQ2xhdXNlKTtcbiAgICB9XG5cbiAgICBpZiAocHJpdmFjeSkge1xuICAgICAgY29uc3QgcHJpdmFjeUZpbHRlciA9IGFwcGx5UHJpdmFjeUZpbHRlcihjb2xsZWN0aW9uLCBzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChwcml2YWN5RmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaChwcml2YWN5RmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3duZXJzaGlwKSB7XG4gICAgICBjb25zdCBvd25lcnNoaXBGaWx0ZXIgPSBhcHBseU93bmVyc2hpcEZpbHRlcihzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChvd25lcnNoaXBGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKG93bmVyc2hpcEZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvbkxpdGVyYWwgPSBsaXRlcmFsKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gY29uZGl0aW9ucy5sZW5ndGggPiAwID8gbGl0ZXJhbChgRklMVEVSICR7Y29uZGl0aW9ucy5qb2luKCcgJiYgJyl9YCkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBjdXN0b21RdWVyaWVzTGl0ZXJhbCA9IGN1c3RvbVF1ZXJpZXMubGVuZ3RoID4gMCA/IGxpdGVyYWwoY3VzdG9tUXVlcmllcy5qb2luKCdcXG4nKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGN1c3RvbU9iamVjdHMubGVuZ3RoID4gMFxuICAgICAgPyBsaXRlcmFsKGBNRVJHRShkb2MsIHske2N1c3RvbU9iamVjdHMuam9pbignLCAnKX19KWApXG4gICAgICA6IGxpdGVyYWwoJ2RvYycpO1xuXG4gICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICAke3doZXJlQ2xhdXNlfVxuICAgICAgICAke2N1c3RvbVF1ZXJpZXNMaXRlcmFsfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiAke3JldHVyblZhbHVlfVxuICAgIGA7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSk7XG4gICAgY29uc3QgaXRlbSA9IGF3YWl0IHJlc3VsdC5uZXh0KCk7XG5cbiAgICByZXR1cm4gaXRlbSB8fCBudWxsO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9uLCBmaWx0ZXJzfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgbXVsdGlwbGUgaXRlbXMgZnJvbSBhbnkgY29sbGVjdGlvbiBieSBmaWx0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMaXN0QnkgPSBhc3luYyA8VCA9IGFueT4oXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiB8IEZpbHRlckdyb3VwID0ge30sXG4gIG9wdGlvbnM6IENydWRPcHRpb25zID0ge31cbik6IFByb21pc2U8VFtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRMaXN0QnknO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIHByaXZhY3kgPSBmYWxzZSxcbiAgICBvd25lcnNoaXAgPSBmYWxzZSxcbiAgICBzb3J0LFxuICAgIGxpbWl0LFxuICAgIGN1c3RvbVF1ZXJpZXMgPSBbXSxcbiAgICBjdXN0b21PYmplY3RzID0gW11cbiAgfSA9IG9wdGlvbnM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJzKGZpbHRlcnMsICdkb2MnKTtcbiAgICBjb25zdCBjb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGZpbHRlckNsYXVzZSkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKGZpbHRlckNsYXVzZSk7XG4gICAgfVxuXG4gICAgaWYgKHByaXZhY3kpIHtcbiAgICAgIGNvbnN0IHByaXZhY3lGaWx0ZXIgPSBhcHBseVByaXZhY3lGaWx0ZXIoY29sbGVjdGlvbiwgc2Vzc2lvbklkLCAnZG9jJyk7XG4gICAgICBpZiAocHJpdmFjeUZpbHRlcikge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gocHJpdmFjeUZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG93bmVyc2hpcCkge1xuICAgICAgY29uc3Qgb3duZXJzaGlwRmlsdGVyID0gYXBwbHlPd25lcnNoaXBGaWx0ZXIoc2Vzc2lvbklkLCAnZG9jJyk7XG4gICAgICBpZiAob3duZXJzaGlwRmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaChvd25lcnNoaXBGaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICBjb25zdCB3aGVyZUNsYXVzZSA9IGNvbmRpdGlvbnMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYEZJTFRFUiAke2NvbmRpdGlvbnMuam9pbignICYmICcpfWApIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3Qgc29ydENsYXVzZSA9IHNvcnQgPyBsaXRlcmFsKGJ1aWxkU29ydChzb3J0LCAnZG9jJykpIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgbGltaXRDbGF1c2UgPSBsaW1pdCA/IGxpdGVyYWwoYnVpbGRMaW1pdChsaW1pdCkpIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgY3VzdG9tUXVlcmllc0xpdGVyYWwgPSBjdXN0b21RdWVyaWVzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGN1c3RvbVF1ZXJpZXMuam9pbignXFxuJykpIDogbGl0ZXJhbCgnJyk7XG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSBjdXN0b21PYmplY3RzLmxlbmd0aCA+IDBcbiAgICAgID8gbGl0ZXJhbChgTUVSR0UoZG9jLCB7JHtjdXN0b21PYmplY3RzLmpvaW4oJywgJyl9fSlgKVxuICAgICAgOiBsaXRlcmFsKCdkb2MnKTtcblxuICAgIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIEZPUiBkb2MgSU4gJHtjb2xsZWN0aW9uTGl0ZXJhbH1cbiAgICAgICAgJHt3aGVyZUNsYXVzZX1cbiAgICAgICAgJHtjdXN0b21RdWVyaWVzTGl0ZXJhbH1cbiAgICAgICAgJHtzb3J0Q2xhdXNlfVxuICAgICAgICAke2xpbWl0Q2xhdXNlfVxuICAgICAgICBSRVRVUk4gJHtyZXR1cm5WYWx1ZX1cbiAgICBgO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIHJldHVybiBhd2FpdCByZXN1bHQuYWxsKCkgYXMgVFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9uLCBmaWx0ZXJzfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgaXRlbSB0byBhbnkgY29sbGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgYWRkSXRlbSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBkYXRhOiBQYXJ0aWFsPFQ+LFxuICBvcHRpb25zOiB7cmVhZG9ubHkgaG9va3M/OiBib29sZWFufSA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtob29rcyA9IGZhbHNlfSA9IG9wdGlvbnM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG4gICAgbGV0IGluc2VydERhdGE6IGFueSA9IHsuLi5kYXRhfTtcblxuICAgIC8vIEFwcGx5IHBhcnNlIGFkYXB0ZXIgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGNvbmZpZz8uYWRhcHRlcnM/LnBhcnNlKSB7XG4gICAgICBpbnNlcnREYXRhID0gY29uZmlnLmFkYXB0ZXJzLnBhcnNlKGluc2VydERhdGEpO1xuICAgIH1cblxuICAgIC8vIENhbGwgYmVmb3JlSW5zZXJ0IGhvb2tcbiAgICBpZiAoaG9va3MgJiYgY29uZmlnPy5ob29rcz8uYmVmb3JlSW5zZXJ0KSB7XG4gICAgICBpbnNlcnREYXRhID0gYXdhaXQgY29uZmlnLmhvb2tzLmJlZm9yZUluc2VydChjb250ZXh0LCBpbnNlcnREYXRhKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGltZXN0YW1wcyAodHlwZS1zYWZlIGFwcHJvYWNoKVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKGNvbmZpZz8udGltZXN0YW1wcz8uY3JlYXRlZCkge1xuICAgICAgaW5zZXJ0RGF0YSA9IHsuLi5pbnNlcnREYXRhLCBbY29uZmlnLnRpbWVzdGFtcHMuY3JlYXRlZF06IG5vd307XG4gICAgfVxuICAgIGlmIChjb25maWc/LnRpbWVzdGFtcHM/LnVwZGF0ZWQpIHtcbiAgICAgIGluc2VydERhdGEgPSB7Li4uaW5zZXJ0RGF0YSwgW2NvbmZpZy50aW1lc3RhbXBzLnVwZGF0ZWRdOiBub3d9O1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gZGF0YWJhc2UuY29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2xsZWN0aW9uUmVmLnNhdmUoaW5zZXJ0RGF0YSBhcyBhbnksIHtyZXR1cm5OZXc6IHRydWV9KTtcbiAgICBsZXQgaXRlbSA9IHJlc3VsdC5uZXcgYXMgVDtcblxuICAgIC8vIENhbGwgYWZ0ZXJJbnNlcnQgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5hZnRlckluc2VydCkge1xuICAgICAgaXRlbSA9IGF3YWl0IGNvbmZpZy5ob29rcy5hZnRlckluc2VydChjb250ZXh0LCBpdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbn1cbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGl0ZW0gaW4gYW55IGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUl0ZW0gPSBhc3luYyA8VCA9IGFueT4oXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbiAgb3B0aW9uczoge3JlYWRvbmx5IGhvb2tzPzogYm9vbGVhbjsgcmVhZG9ubHkgb3duZXJzaGlwPzogYm9vbGVhbn0gPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtob29rcyA9IGZhbHNlLCBvd25lcnNoaXAgPSBmYWxzZX0gPSBvcHRpb25zO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVnaXN0cnkuZ2V0KGNvbGxlY3Rpb24pO1xuICAgIGxldCB1cGRhdGVEYXRhOiBhbnkgPSB7Li4udXBkYXRlc307XG5cbiAgICAvLyBBcHBseSBwYXJzZSBhZGFwdGVyIGlmIGF2YWlsYWJsZVxuICAgIGlmIChjb25maWc/LmFkYXB0ZXJzPy5wYXJzZSkge1xuICAgICAgdXBkYXRlRGF0YSA9IGNvbmZpZy5hZGFwdGVycy5wYXJzZSh1cGRhdGVEYXRhKTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIGJlZm9yZVVwZGF0ZSBob29rXG4gICAgaWYgKGhvb2tzICYmIGNvbmZpZz8uaG9va3M/LmJlZm9yZVVwZGF0ZSkge1xuICAgICAgdXBkYXRlRGF0YSA9IGF3YWl0IGNvbmZpZy5ob29rcy5iZWZvcmVVcGRhdGUoY29udGV4dCwgaWQsIHVwZGF0ZURhdGEpO1xuICAgIH1cblxuICAgIC8vIEFkZCB1cGRhdGVkIHRpbWVzdGFtcCAodHlwZS1zYWZlIGFwcHJvYWNoKVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKGNvbmZpZz8udGltZXN0YW1wcz8udXBkYXRlZCkge1xuICAgICAgdXBkYXRlRGF0YSA9IHsuLi51cGRhdGVEYXRhLCBbY29uZmlnLnRpbWVzdGFtcHMudXBkYXRlZF06IG5vd307XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGRvY0lkID0gaWQuaW5jbHVkZXMoJy8nKSA/IGlkIDogYCR7Y29sbGVjdGlvbn0vJHtpZH1gO1xuXG4gICAgLy8gQnVpbGQgcXVlcnkgd2l0aCBvd25lcnNoaXAgY2hlY2sgaWYgbmVlZGVkXG4gICAgbGV0IGFxbFF1ZXJ5OiBBcWxRdWVyeTtcbiAgICBjb25zdCBjb2xsZWN0aW9uTGl0ZXJhbCA9IGxpdGVyYWwoY29sbGVjdGlvbik7XG4gICAgaWYgKG93bmVyc2hpcCAmJiBzZXNzaW9uSWQpIHtcbiAgICAgIGFxbFF1ZXJ5ID0gYXFsYEZPUiBkb2MgSU4gJHtjb2xsZWN0aW9uTGl0ZXJhbH1cbiAgICAgICAgRklMVEVSIGRvYy5faWQgPT0gJHtkb2NJZH0gJiYgZG9jLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBVUERBVEUgZG9jIFdJVEggJHt1cGRhdGVEYXRhfSBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBSRVRVUk4gTkVXYDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXFsUXVlcnkgPSBhcWxgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFVQREFURSBkb2MgV0lUSCAke3VwZGF0ZURhdGF9IElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIFJFVFVSTiBORVdgO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICBsZXQgaXRlbSA9IGF3YWl0IHJlc3VsdC5uZXh0KCk7XG5cbiAgICAvLyBDYWxsIGFmdGVyVXBkYXRlIGhvb2tcbiAgICBpZiAoaG9va3MgJiYgY29uZmlnPy5ob29rcz8uYWZ0ZXJVcGRhdGUpIHtcbiAgICAgIGl0ZW0gPSBhd2FpdCBjb25maWcuaG9va3MuYWZ0ZXJVcGRhdGUoY29udGV4dCwgaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGlkfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZWxldGUgYW4gaXRlbSBmcm9tIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxldGVJdGVtID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICByZWFkb25seSBzb2Z0PzogYm9vbGVhbjtcbiAgICByZWFkb25seSBjYXNjYWRlPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+O1xuICAgIHJlYWRvbmx5IG93bmVyc2hpcD86IGJvb2xlYW47XG4gIH0gPSB7fVxuKTogUHJvbWlzZTxUIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7c29mdCA9IGZhbHNlLCBjYXNjYWRlID0gW10sIG93bmVyc2hpcCA9IGZhbHNlfSA9IG9wdGlvbnM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGRvY0lkID0gaWQuaW5jbHVkZXMoJy8nKSA/IGlkIDogYCR7Y29sbGVjdGlvbn0vJHtpZH1gO1xuICAgIGNvbnN0IGRvY0tleSA9IGlkLmluY2x1ZGVzKCcvJykgPyBpZC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnIDogaWQ7XG4gICAgbGV0IGRlbGV0ZWRJdGVtOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDYWxsIGJlZm9yZURlbGV0ZSBob29rXG4gICAgaWYgKGNvbmZpZz8uaG9va3M/LmJlZm9yZURlbGV0ZSkge1xuICAgICAgYXdhaXQgY29uZmlnLmhvb2tzLmJlZm9yZURlbGV0ZShjb250ZXh0LCBkb2NJZCk7XG4gICAgfVxuXG4gICAgLy8gU29mdCBkZWxldGVcbiAgICBpZiAoc29mdCkge1xuICAgICAgY29uc3QgdXBkYXRlID0ge2RlbGV0ZWQ6IHRydWUsIGRlbGV0ZWRBdDogRGF0ZS5ub3coKX07XG4gICAgICBjb25zdCBjb2xsZWN0aW9uTGl0ZXJhbCA9IGxpdGVyYWwoY29sbGVjdGlvbik7XG4gICAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFVQREFURSBkb2MgV0lUSCAke3VwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uTGl0ZXJhbH1cbiAgICAgICAgUkVUVVJOIE5FV2A7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSk7XG4gICAgICBkZWxldGVkSXRlbSA9IGF3YWl0IHJlc3VsdC5uZXh0KCkgYXMgVCB8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhcmQgZGVsZXRlIHdpdGggY2FzY2FkZVxuICAgICAgY29uc3QgZWRnZXNUb0Nhc2NhZGUgPSBjYXNjYWRlLmxlbmd0aCA+IDAgPyBjYXNjYWRlIDogKGNvbmZpZz8uY2FzY2FkZUVkZ2VzIHx8IFtdKTtcblxuICAgICAgLy8gRGVsZXRlIHRoZSBkb2N1bWVudFxuICAgICAgaWYgKG93bmVyc2hpcCAmJiBzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgIEZPUiBkb2MgSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfVxuICAgICAgICAgICAgRklMVEVSIGRvYy5faWQgPT0gJHtkb2NJZH0gJiYgZG9jLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgICAgIFJFTU9WRSBkb2MgSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfVxuICAgICAgICAgICAgUkVUVVJOIE9MRFxuICAgICAgICBgO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSk7XG4gICAgICAgIGRlbGV0ZWRJdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKSBhcyBUIHwgbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBSRU1PVkUgJHtkb2NLZXl9IElOICR7bGl0ZXJhbChjb2xsZWN0aW9uKX0gUkVUVVJOIE9MRGA7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgICAgZGVsZXRlZEl0ZW0gPSBhd2FpdCByZXN1bHQubmV4dCgpIGFzIFQgfCBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgcmVsYXRlZCBlZGdlcyBvbmx5IGFmdGVyIHRoZSBkb2N1bWVudCBkZWxldGUgc3VjY2VlZHMsIHNvIG93bmVyc2hpcCBjaGVja3MgcHJvdGVjdCBjYXNjYWRlcyB0b28uXG4gICAgICBpZiAoZGVsZXRlZEl0ZW0pIHtcbiAgICAgICAgZm9yIChjb25zdCBlZGdlVHlwZSBvZiBlZGdlc1RvQ2FzY2FkZSkge1xuICAgICAgICAgIC8vIFVzZSBzdHJpbmcgZm9yIGVkZ2UgY29sbGVjdGlvbiBuYW1lIChzYWZlKVxuICAgICAgICAgIGNvbnN0IGVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgICBGT1IgZSBJTiAke2xpdGVyYWwoZWRnZVR5cGUpfVxuICAgICAgICAgICAgICBGSUxURVIgZS5fdG8gPT0gJHtkb2NJZH0gfHwgZS5fZnJvbSA9PSAke2RvY0lkfVxuICAgICAgICAgICAgICBSRU1PVkUgZSBJTiAke2xpdGVyYWwoZWRnZVR5cGUpfVxuICAgICAgICAgIGA7XG4gICAgICAgICAgYXdhaXQgZGF0YWJhc2UucXVlcnkoZWRnZVF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGwgYWZ0ZXJEZWxldGUgaG9va1xuICAgIGlmIChjb25maWc/Lmhvb2tzPy5hZnRlckRlbGV0ZSkge1xuICAgICAgYXdhaXQgY29uZmlnLmhvb2tzLmFmdGVyRGVsZXRlKGNvbnRleHQsIGRvY0lkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZEl0ZW07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGlkfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDb3VudCBpdGVtcyBpbiBhbnkgY29sbGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgY291bnRJdGVtcyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXAgPSB7fVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvdW50SXRlbXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJzKGZpbHRlcnMsICdkb2MnKTtcbiAgICBjb25zdCB3aGVyZUNsYXVzZSA9IGZpbHRlckNsYXVzZSA/IGxpdGVyYWwoYEZJTFRFUiAke2ZpbHRlckNsYXVzZX1gKSA6IGxpdGVyYWwoJycpO1xuXG4gICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgTEVUIGl0ZW1zID0gKFxuICAgICAgICBGT1IgZG9jIElOICR7bGl0ZXJhbChjb2xsZWN0aW9uKX1cbiAgICAgICAgICAke3doZXJlQ2xhdXNlfVxuICAgICAgICAgIFJFVFVSTiBkb2NcbiAgICAgIClcbiAgICAgIFJFVFVSTiBMRU5HVEgoaXRlbXMpXG4gICAgYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICByZXR1cm4gYXdhaXQgcmVzdWx0Lm5leHQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgZmlsdGVyc31cbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgaXRlbSBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGl0ZW1FeGlzdHMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiB8IEZpbHRlckdyb3VwXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgY291bnQgPSBhd2FpdCBjb3VudEl0ZW1zKGNvbnRleHQsIGNvbGxlY3Rpb24sIGZpbHRlcnMpO1xuICByZXR1cm4gY291bnQgPiAwO1xufTtcbiJdLCJuYW1lcyI6WyJhcWwiLCJsaXRlcmFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiYnVpbGRGaWx0ZXJDbGF1c2UiLCJ1c2VEYiIsInJlZ2lzdHJ5IiwiZXZlbnRDYXRlZ29yeSIsImJ1aWxkRmlsdGVycyIsImZpbHRlcnMiLCJ2YXJOYW1lIiwic2ltcGxlRmlsdGVycyIsImNvbmRpdGlvbnMiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJwdXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImpvaW4iLCJidWlsZFNvcnQiLCJzb3J0IiwibGVuZ3RoIiwic29ydFBhcnRzIiwibWFwIiwiZmllbGQiLCJkaXJlY3Rpb24iLCJidWlsZExpbWl0IiwibGltaXQiLCJmcm9tIiwidG8iLCJjb3VudCIsImFwcGx5UHJpdmFjeUZpbHRlciIsImNvbGxlY3Rpb24iLCJzZXNzaW9uSWQiLCJjb25maWciLCJnZXQiLCJoYXNQcml2YWN5IiwiYXBwbHlPd25lcnNoaXBGaWx0ZXIiLCJnZXRJdGVtQnkiLCJjb250ZXh0Iiwib3B0aW9ucyIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsInNlc3Npb24iLCJ1c2VySWQiLCJwcml2YWN5Iiwib3duZXJzaGlwIiwiY3VzdG9tUXVlcmllcyIsImN1c3RvbU9iamVjdHMiLCJkYXRhYmFzZSIsImZpbHRlckNsYXVzZSIsInByaXZhY3lGaWx0ZXIiLCJvd25lcnNoaXBGaWx0ZXIiLCJjb2xsZWN0aW9uTGl0ZXJhbCIsIndoZXJlQ2xhdXNlIiwiY3VzdG9tUXVlcmllc0xpdGVyYWwiLCJyZXR1cm5WYWx1ZSIsImFxbFF1ZXJ5IiwicmVzdWx0IiwicXVlcnkiLCJpdGVtIiwibmV4dCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwicGFyYW1zIiwiZ2V0TGlzdEJ5Iiwic29ydENsYXVzZSIsImxpbWl0Q2xhdXNlIiwiYWxsIiwiYWRkSXRlbSIsImRhdGEiLCJob29rcyIsImluc2VydERhdGEiLCJhZGFwdGVycyIsInBhcnNlIiwiYmVmb3JlSW5zZXJ0Iiwibm93IiwiRGF0ZSIsInRpbWVzdGFtcHMiLCJjcmVhdGVkIiwidXBkYXRlZCIsImNvbGxlY3Rpb25SZWYiLCJzYXZlIiwicmV0dXJuTmV3IiwibmV3IiwiYWZ0ZXJJbnNlcnQiLCJ1cGRhdGVJdGVtIiwiaWQiLCJ1cGRhdGVzIiwidXBkYXRlRGF0YSIsImJlZm9yZVVwZGF0ZSIsImRvY0lkIiwiaW5jbHVkZXMiLCJhZnRlclVwZGF0ZSIsImRlbGV0ZUl0ZW0iLCJzb2Z0IiwiY2FzY2FkZSIsImRvY0tleSIsInNwbGl0IiwicG9wIiwiZGVsZXRlZEl0ZW0iLCJiZWZvcmVEZWxldGUiLCJ1cGRhdGUiLCJkZWxldGVkIiwiZGVsZXRlZEF0IiwiZWRnZXNUb0Nhc2NhZGUiLCJjYXNjYWRlRWRnZXMiLCJlZGdlVHlwZSIsImVkZ2VRdWVyeSIsImFmdGVyRGVsZXRlIiwiY291bnRJdGVtcyIsIml0ZW1FeGlzdHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUVELFNBQVFBLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBQ3JDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxpQkFBaUIsUUFBTyx5QkFBeUI7QUFDekQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxRQUFRLFFBQU8saUNBQWlDO0FBTXhELE1BQU1DLGdCQUFnQjtBQWdCdEI7O0NBRUMsR0FDRCxNQUFNQyxlQUFlLENBQ25CQyxTQUNBQyxVQUFrQixLQUFLO0lBRXZCLGtEQUFrRDtJQUNsRCxJQUFJLFdBQVdELFdBQVcsZ0JBQWdCQSxTQUFTO1FBQ2pELE9BQU9MLGtCQUFrQkssU0FBd0JDO0lBQ25EO0lBRUEsd0JBQXdCO0lBQ3hCLE1BQU1DLGdCQUFnQkY7SUFDdEIsTUFBTUcsYUFBdUIsRUFBRTtJQUUvQixLQUFLLE1B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
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY3J1ZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7cmVnaXN0cnl9IGZyb20gJy4uL3V0aWxzL2NvbGxlY3Rpb25SZWdpc3RyeS5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NydWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIENSVUQgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENydWRPcHRpb25zIHtcbiAgcmVhZG9ubHkgc29ydD86IFJlYWRvbmx5QXJyYXk8e3JlYWRvbmx5IGZpZWxkOiBzdHJpbmc7IHJlYWRvbmx5IGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQyd9PjtcbiAgcmVhZG9ubHkgbGltaXQ/OiB7cmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyfTtcbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+OyAvLyBTZWxlY3Qgc3BlY2lmaWMgZmllbGRzXG4gIHJlYWRvbmx5IGluY2x1ZGVFZGdlcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gSW5jbHVkZSByZWxhdGVkIGRvY3VtZW50cyB2aWEgZWRnZXNcbiAgcmVhZG9ubHkgcHJpdmFjeT86IGJvb2xlYW47IC8vIEFwcGx5IHByaXZhY3kgY2hlY2tzIChkZWZhdWx0OiB0cnVlKVxuICByZWFkb25seSBvd25lcnNoaXA/OiBib29sZWFuOyAvLyBBcHBseSBvd25lcnNoaXAgY2hlY2tzIChkZWZhdWx0OiBmYWxzZSlcbiAgcmVhZG9ubHkgY3VzdG9tUXVlcmllcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gQWRkaXRpb25hbCBjdXN0b20gcXVlcnkgc3RyaW5nc1xuICByZWFkb25seSBjdXN0b21PYmplY3RzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+OyAvLyBBZGRpdGlvbmFsIGN1c3RvbSBvYmplY3Qgc2VsZWN0aW9uc1xufVxuXG4vKipcbiAqIEJ1aWxkIGZpbHRlciBjbGF1c2UgZnJvbSBmaWx0ZXJzIG9iamVjdCBvciBGaWx0ZXJHcm91cFxuICovXG5jb25zdCBidWlsZEZpbHRlcnMgPSAoXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCxcbiAgdmFyTmFtZTogc3RyaW5nID0gJ2RvYydcbik6IHN0cmluZyA9PiB7XG4gIC8vIElmIGl0J3MgYSBGaWx0ZXJHcm91cCB3aXRoIGxvZ2ljIGFuZCBjb25kaXRpb25zXG4gIGlmICgnbG9naWMnIGluIGZpbHRlcnMgJiYgJ2NvbmRpdGlvbnMnIGluIGZpbHRlcnMpIHtcbiAgICByZXR1cm4gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycyBhcyBGaWx0ZXJHcm91cCwgdmFyTmFtZSk7XG4gIH1cblxuICAvLyBTaW1wbGUgb2JqZWN0IGZpbHRlcnNcbiAgY29uc3Qgc2ltcGxlRmlsdGVycyA9IGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzaW1wbGVGaWx0ZXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKGAke3Zhck5hbWV9LiR7a2V5fSA9PSBudWxsYCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goYCR7dmFyTmFtZX0uJHtrZXl9ID09IFwiJHt2YWx1ZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goYCR7dmFyTmFtZX0uJHtrZXl9ID09ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25kaXRpb25zLmpvaW4oJyAmJiAnKTtcbn07XG5cbi8qKlxuICogQnVpbGQgc29ydCBjbGF1c2VcbiAqL1xuY29uc3QgYnVpbGRTb3J0ID0gKFxuICBzb3J0OiBSZWFkb25seUFycmF5PHtyZWFkb25seSBmaWVsZDogc3RyaW5nOyByZWFkb25seSBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnfT4sXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNvcnQgfHwgc29ydC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBzb3J0UGFydHMgPSBzb3J0Lm1hcCgoe2ZpZWxkLCBkaXJlY3Rpb259KSA9PiBgJHt2YXJOYW1lfS4ke2ZpZWxkfSAke2RpcmVjdGlvbn1gKTtcbiAgcmV0dXJuIGBTT1JUICR7c29ydFBhcnRzLmpvaW4oJywgJyl9YDtcbn07XG5cbi8qKlxuICogQnVpbGQgbGltaXQgY2xhdXNlXG4gKi9cbmNvbnN0IGJ1aWxkTGltaXQgPSAobGltaXQ/OiB7cmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyfSk6IHN0cmluZyA9PiB7XG4gIGlmICghbGltaXQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCB7ZnJvbSwgdG99ID0gbGltaXQ7XG4gIGNvbnN0IGNvdW50ID0gdG8gLSBmcm9tO1xuICByZXR1cm4gYExJTUlUICR7ZnJvbX0sICR7Y291bnR9YDtcbn07XG5cbi8qKlxuICogQXBwbHkgcHJpdmFjeSBmaWx0ZXIgaWYgY29sbGVjdGlvbiBoYXMgcHJpdmFjeVxuICovXG5jb25zdCBhcHBseVByaXZhY3lGaWx0ZXIgPSAoXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG5cbiAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5oYXNQcml2YWN5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gSWYgbm8gc2Vzc2lvbiwgb25seSByZXR1cm4gcHVibGljIGl0ZW1zXG4gIGlmICghc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGAke3Zhck5hbWV9LnByaXZhY3kgPT0gXCJwdWJsaWNcImA7XG4gIH1cblxuICAvLyBSZXR1cm4gaXRlbXMgdGhhdCBhcmUgcHVibGljIE9SIG93bmVkIGJ5IHRoZSB1c2VyXG4gIHJldHVybiBgKCR7dmFyTmFtZX0ucHJpdmFjeSA9PSBcInB1YmxpY1wiIHx8ICR7dmFyTmFtZX0udXNlcklkID09IFwiJHtzZXNzaW9uSWR9XCIpYDtcbn07XG5cbi8qKlxuICogQXBwbHkgb3duZXJzaGlwIGZpbHRlclxuICovXG5jb25zdCBhcHBseU93bmVyc2hpcEZpbHRlciA9IChcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBgJHt2YXJOYW1lfS51c2VySWQgPT0gXCIke3Nlc3Npb25JZH1cImA7XG59O1xuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBpdGVtIGZyb20gYW55IGNvbGxlY3Rpb24gYnkgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgZ2V0SXRlbUJ5ID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCxcbiAgb3B0aW9uczogQ3J1ZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SXRlbUJ5JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtwcml2YWN5ID0gZmFsc2UsIG93bmVyc2hpcCA9IGZhbHNlLCBjdXN0b21RdWVyaWVzID0gW10sIGN1c3RvbU9iamVjdHMgPSBbXX0gPSBvcHRpb25zO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVycyhmaWx0ZXJzLCAnZG9jJyk7XG4gICAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChmaWx0ZXJDbGF1c2UpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChmaWx0ZXJDbGF1c2UpO1xuICAgIH1cblxuICAgIGlmIChwcml2YWN5KSB7XG4gICAgICBjb25zdCBwcml2YWN5RmlsdGVyID0gYXBwbHlQcml2YWN5RmlsdGVyKGNvbGxlY3Rpb24sIHNlc3Npb25JZCwgJ2RvYycpO1xuICAgICAgaWYgKHByaXZhY3lGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKHByaXZhY3lGaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvd25lcnNoaXApIHtcbiAgICAgIGNvbnN0IG93bmVyc2hpcEZpbHRlciA9IGFwcGx5T3duZXJzaGlwRmlsdGVyKHNlc3Npb25JZCwgJ2RvYycpO1xuICAgICAgaWYgKG93bmVyc2hpcEZpbHRlcikge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gob3duZXJzaGlwRmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uTGl0ZXJhbCA9IGxpdGVyYWwoY29sbGVjdGlvbik7XG4gICAgY29uc3Qgd2hlcmVDbGF1c2UgPSBjb25kaXRpb25zLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBGSUxURVIgJHtjb25kaXRpb25zLmpvaW4oJyAmJiAnKX1gKSA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IGN1c3RvbVF1ZXJpZXNMaXRlcmFsID0gY3VzdG9tUXVlcmllcy5sZW5ndGggPiAwID8gbGl0ZXJhbChjdXN0b21RdWVyaWVzLmpvaW4oJ1xcbicpKSA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IHJldHVyblZhbHVlID0gY3VzdG9tT2JqZWN0cy5sZW5ndGggPiAwXG4gICAgICA/IGxpdGVyYWwoYE1FUkdFKGRvYywgeyR7Y3VzdG9tT2JqZWN0cy5qb2luKCcsICcpfX0pYClcbiAgICAgIDogbGl0ZXJhbCgnZG9jJyk7XG5cbiAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgICR7d2hlcmVDbGF1c2V9XG4gICAgICAgICR7Y3VzdG9tUXVlcmllc0xpdGVyYWx9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOICR7cmV0dXJuVmFsdWV9XG4gICAgYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICBjb25zdCBpdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKTtcblxuICAgIHJldHVybiBpdGVtIHx8IG51bGw7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGZpbHRlcnN9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBtdWx0aXBsZSBpdGVtcyBmcm9tIGFueSBjb2xsZWN0aW9uIGJ5IGZpbHRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExpc3RCeSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXAgPSB7fSxcbiAgb3B0aW9uczogQ3J1ZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgcHJpdmFjeSA9IGZhbHNlLFxuICAgIG93bmVyc2hpcCA9IGZhbHNlLFxuICAgIHNvcnQsXG4gICAgbGltaXQsXG4gICAgY3VzdG9tUXVlcmllcyA9IFtdLFxuICAgIGN1c3RvbU9iamVjdHMgPSBbXVxuICB9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoZmlsdGVyQ2xhdXNlKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goZmlsdGVyQ2xhdXNlKTtcbiAgICB9XG5cbiAgICBpZiAocHJpdmFjeSkge1xuICAgICAgY29uc3QgcHJpdmFjeUZpbHRlciA9IGFwcGx5UHJpdmFjeUZpbHRlcihjb2xsZWN0aW9uLCBzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChwcml2YWN5RmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaChwcml2YWN5RmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3duZXJzaGlwKSB7XG4gICAgICBjb25zdCBvd25lcnNoaXBGaWx0ZXIgPSBhcHBseU93bmVyc2hpcEZpbHRlcihzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChvd25lcnNoaXBGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKG93bmVyc2hpcEZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvbkxpdGVyYWwgPSBsaXRlcmFsKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gY29uZGl0aW9ucy5sZW5ndGggPiAwID8gbGl0ZXJhbChgRklMVEVSICR7Y29uZGl0aW9ucy5qb2luKCcgJiYgJyl9YCkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBzb3J0Q2xhdXNlID0gc29ydCA/IGxpdGVyYWwoYnVpbGRTb3J0KHNvcnQsICdkb2MnKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBsaW1pdENsYXVzZSA9IGxpbWl0ID8gbGl0ZXJhbChidWlsZExpbWl0KGxpbWl0KSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBjdXN0b21RdWVyaWVzTGl0ZXJhbCA9IGN1c3RvbVF1ZXJpZXMubGVuZ3RoID4gMCA/IGxpdGVyYWwoY3VzdG9tUXVlcmllcy5qb2luKCdcXG4nKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGN1c3RvbU9iamVjdHMubGVuZ3RoID4gMFxuICAgICAgPyBsaXRlcmFsKGBNRVJHRShkb2MsIHske2N1c3RvbU9iamVjdHMuam9pbignLCAnKX19KWApXG4gICAgICA6IGxpdGVyYWwoJ2RvYycpO1xuXG4gICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICAke3doZXJlQ2xhdXNlfVxuICAgICAgICAke2N1c3RvbVF1ZXJpZXNMaXRlcmFsfVxuICAgICAgICAke3NvcnRDbGF1c2V9XG4gICAgICAgICR7bGltaXRDbGF1c2V9XG4gICAgICAgIFJFVFVSTiAke3JldHVyblZhbHVlfVxuICAgIGA7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlc3VsdC5hbGwoKSBhcyBUW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGZpbHRlcnN9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBpdGVtIHRvIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRJdGVtID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGRhdGE6IFBhcnRpYWw8VD4sXG4gIG9wdGlvbnM6IHtyZWFkb25seSBob29rcz86IGJvb2xlYW59ID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2hvb2tzID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlZ2lzdHJ5LmdldChjb2xsZWN0aW9uKTtcbiAgICBsZXQgaW5zZXJ0RGF0YTogYW55ID0gey4uLmRhdGF9O1xuXG4gICAgLy8gQXBwbHkgcGFyc2UgYWRhcHRlciBpZiBhdmFpbGFibGVcbiAgICBpZiAoY29uZmlnPy5hZGFwdGVycz8ucGFyc2UpIHtcbiAgICAgIGluc2VydERhdGEgPSBjb25maWcuYWRhcHRlcnMucGFyc2UoaW5zZXJ0RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBiZWZvcmVJbnNlcnQgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5iZWZvcmVJbnNlcnQpIHtcbiAgICAgIGluc2VydERhdGEgPSBhd2FpdCBjb25maWcuaG9va3MuYmVmb3JlSW5zZXJ0KGNvbnRleHQsIGluc2VydERhdGEpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aW1lc3RhbXBzICh0eXBlLXNhZmUgYXBwcm9hY2gpXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoY29uZmlnPy50aW1lc3RhbXBzPy5jcmVhdGVkKSB7XG4gICAgICBpbnNlcnREYXRhID0gey4uLmluc2VydERhdGEsIFtjb25maWcudGltZXN0YW1wcy5jcmVhdGVkXTogbm93fTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZz8udGltZXN0YW1wcz8udXBkYXRlZCkge1xuICAgICAgaW5zZXJ0RGF0YSA9IHsuLi5pbnNlcnREYXRhLCBbY29uZmlnLnRpbWVzdGFtcHMudXBkYXRlZF06IG5vd307XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbGxlY3Rpb25SZWYuc2F2ZShpbnNlcnREYXRhIGFzIGFueSwge3JldHVybk5ldzogdHJ1ZX0pO1xuICAgIGxldCBpdGVtID0gcmVzdWx0Lm5ldyBhcyBUO1xuXG4gICAgLy8gQ2FsbCBhZnRlckluc2VydCBob29rXG4gICAgaWYgKGhvb2tzICYmIGNvbmZpZz8uaG9va3M/LmFmdGVySW5zZXJ0KSB7XG4gICAgICBpdGVtID0gYXdhaXQgY29uZmlnLmhvb2tzLmFmdGVySW5zZXJ0KGNvbnRleHQsIGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9ufVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gaXRlbSBpbiBhbnkgY29sbGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlSXRlbSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICB1cGRhdGVzOiBQYXJ0aWFsPFQ+LFxuICBvcHRpb25zOiB7cmVhZG9ubHkgaG9va3M/OiBib29sZWFuOyByZWFkb25seSBvd25lcnNoaXA/OiBib29sZWFufSA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2hvb2tzID0gZmFsc2UsIG93bmVyc2hpcCA9IGZhbHNlfSA9IG9wdGlvbnM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG4gICAgbGV0IHVwZGF0ZURhdGE6IGFueSA9IHsuLi51cGRhdGVzfTtcblxuICAgIC8vIEFwcGx5IHBhcnNlIGFkYXB0ZXIgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGNvbmZpZz8uYWRhcHRlcnM/LnBhcnNlKSB7XG4gICAgICB1cGRhdGVEYXRhID0gY29uZmlnLmFkYXB0ZXJzLnBhcnNlKHVwZGF0ZURhdGEpO1xuICAgIH1cblxuICAgIC8vIENhbGwgYmVmb3JlVXBkYXRlIGhvb2tcbiAgICBpZiAoaG9va3MgJiYgY29uZmlnPy5ob29rcz8uYmVmb3JlVXBkYXRlKSB7XG4gICAgICB1cGRhdGVEYXRhID0gYXdhaXQgY29uZmlnLmhvb2tzLmJlZm9yZVVwZGF0ZShjb250ZXh0LCBpZCwgdXBkYXRlRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHVwZGF0ZWQgdGltZXN0YW1wICh0eXBlLXNhZmUgYXBwcm9hY2gpXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoY29uZmlnPy50aW1lc3RhbXBzPy51cGRhdGVkKSB7XG4gICAgICB1cGRhdGVEYXRhID0gey4uLnVwZGF0ZURhdGEsIFtjb25maWcudGltZXN0YW1wcy51cGRhdGVkXTogbm93fTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZG9jSWQgPSBpZC5pbmNsdWRlcygnLycpID8gaWQgOiBgJHtjb2xsZWN0aW9ufS8ke2lkfWA7XG5cbiAgICAvLyBCdWlsZCBxdWVyeSB3aXRoIG93bmVyc2hpcCBjaGVjayBpZiBuZWVkZWRcbiAgICBsZXQgYXFsUXVlcnk6IEFxbFF1ZXJ5O1xuICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICBpZiAob3duZXJzaGlwICYmIHNlc3Npb25JZCkge1xuICAgICAgYXFsUXVlcnkgPSBhcWxgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfSAmJiBkb2MudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFVQREFURSBkb2MgV0lUSCAke3VwZGF0ZURhdGF9IElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIFJFVFVSTiBORVdgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcWxRdWVyeSA9IGFxbGBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIEZJTFRFUiBkb2MuX2lkID09ICR7ZG9jSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgVVBEQVRFIGRvYyBXSVRIICR7dXBkYXRlRGF0YX0gSU4gJHtjb2xsZWN0aW9uTGl0ZXJhbH1cbiAgICAgICAgUkVUVVJOIE5FV2A7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIGxldCBpdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKTtcblxuICAgIC8vIENhbGwgYWZ0ZXJVcGRhdGUgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5hZnRlclVwZGF0ZSkge1xuICAgICAgaXRlbSA9IGF3YWl0IGNvbmZpZy5ob29rcy5hZnRlclVwZGF0ZShjb250ZXh0LCBpdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgaWR9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIERlbGV0ZSBhbiBpdGVtIGZyb20gYW55IGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGV0ZUl0ZW0gPSBhc3luYyA8VCA9IGFueT4oXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIHJlYWRvbmx5IHNvZnQ/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhc2NhZGU/OiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gICAgcmVhZG9ubHkgb3duZXJzaGlwPzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFQgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtzb2Z0ID0gZmFsc2UsIGNhc2NhZGUgPSBbXSwgb3duZXJzaGlwID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlZ2lzdHJ5LmdldChjb2xsZWN0aW9uKTtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZG9jSWQgPSBpZC5pbmNsdWRlcygnLycpID8gaWQgOiBgJHtjb2xsZWN0aW9ufS8ke2lkfWA7XG4gICAgY29uc3QgZG9jS2V5ID0gaWQuaW5jbHVkZXMoJy8nKSA/IGlkLnNwbGl0KCcvJykucG9wKCkgfHwgJycgOiBpZDtcbiAgICBsZXQgZGVsZXRlZEl0ZW06IFQgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENhbGwgYmVmb3JlRGVsZXRlIGhvb2tcbiAgICBpZiAoY29uZmlnPy5ob29rcz8uYmVmb3JlRGVsZXRlKSB7XG4gICAgICBhd2FpdCBjb25maWcuaG9va3MuYmVmb3JlRGVsZXRlKGNvbnRleHQsIGRvY0lkKTtcbiAgICB9XG5cbiAgICAvLyBTb2Z0IGRlbGV0ZVxuICAgIGlmIChzb2Z0KSB7XG4gICAgICBjb25zdCB1cGRhdGUgPSB7ZGVsZXRlZDogdHJ1ZSwgZGVsZXRlZEF0OiBEYXRlLm5vdygpfTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIEZJTFRFUiBkb2MuX2lkID09ICR7ZG9jSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgVVBEQVRFIGRvYyBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBSRVRVUk4gTkVXYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgIGRlbGV0ZWRJdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKSBhcyBUIHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFyZCBkZWxldGUgd2l0aCBjYXNjYWRlXG4gICAgICBjb25zdCBlZGdlc1RvQ2FzY2FkZSA9IGNhc2NhZGUubGVuZ3RoID4gMCA/IGNhc2NhZGUgOiAoY29uZmlnPy5jYXNjYWRlRWRnZXMgfHwgW10pO1xuXG4gICAgICAvLyBEZWxldGUgdGhlIGRvY3VtZW50XG4gICAgICBpZiAob3duZXJzaGlwICYmIHNlc3Npb25JZCkge1xuICAgICAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgRk9SIGRvYyBJTiAke2xpdGVyYWwoY29sbGVjdGlvbil9XG4gICAgICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfSAmJiBkb2MudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICAgICAgUkVNT1ZFIGRvYyBJTiAke2xpdGVyYWwoY29sbGVjdGlvbil9XG4gICAgICAgICAgICBSRVRVUk4gT0xEXG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgICAgZGVsZXRlZEl0ZW0gPSBhd2FpdCByZXN1bHQubmV4dCgpIGFzIFQgfCBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSAke2RvY0tleX0gSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfSBSRVRVUk4gT0xEYDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgICAgICBkZWxldGVkSXRlbSA9IGF3YWl0IHJlc3VsdC5uZXh0KCkgYXMgVCB8IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSByZWxhdGVkIGVkZ2VzIG9ubHkgYWZ0ZXIgdGhlIGRvY3VtZW50IGRlbGV0ZSBzdWNjZWVkcywgc28gb3duZXJzaGlwIGNoZWNrcyBwcm90ZWN0IGNhc2NhZGVzIHRvby5cbiAgICAgIGlmIChkZWxldGVkSXRlbSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVkZ2VUeXBlIG9mIGVkZ2VzVG9DYXNjYWRlKSB7XG4gICAgICAgICAgLy8gVXNlIHN0cmluZyBmb3IgZWRnZSBjb2xsZWN0aW9uIG5hbWUgKHNhZmUpXG4gICAgICAgICAgY29uc3QgZWRnZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgIEZPUiBlIElOICR7bGl0ZXJhbChlZGdlVHlwZSl9XG4gICAgICAgICAgICAgIEZJTFRFUiBlLl90byA9PSAke2RvY0lkfSB8fCBlLl9mcm9tID09ICR7ZG9jSWR9XG4gICAgICAgICAgICAgIFJFTU9WRSBlIElOICR7bGl0ZXJhbChlZGdlVHlwZSl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICBhd2FpdCBkYXRhYmFzZS5xdWVyeShlZGdlUXVlcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBhZnRlckRlbGV0ZSBob29rXG4gICAgaWYgKGNvbmZpZz8uaG9va3M/LmFmdGVyRGVsZXRlKSB7XG4gICAgICBhd2FpdCBjb25maWcuaG9va3MuYWZ0ZXJEZWxldGUoY29udGV4dCwgZG9jSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkSXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgaWR9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIENvdW50IGl0ZW1zIGluIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBjb3VudEl0ZW1zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCA9IHt9XG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY291bnRJdGVtcyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gZmlsdGVyQ2xhdXNlID8gbGl0ZXJhbChgRklMVEVSICR7ZmlsdGVyQ2xhdXNlfWApIDogbGl0ZXJhbCgnJyk7XG5cbiAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgaXRlbXMgPSAoXG4gICAgICAgIEZPUiBkb2MgSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfVxuICAgICAgICAgICR7d2hlcmVDbGF1c2V9XG4gICAgICAgICAgUkVUVVJOIGRvY1xuICAgICAgKVxuICAgICAgUkVUVVJOIExFTkdUSChpdGVtcylcbiAgICBgO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIHJldHVybiBhd2FpdCByZXN1bHQubmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9uLCBmaWx0ZXJzfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpdGVtIGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgaXRlbUV4aXN0cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXBcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBjb3VudCA9IGF3YWl0IGNvdW50SXRlbXMoY29udGV4dCwgY29sbGVjdGlvbiwgZmlsdGVycyk7XG4gIHJldHVybiBjb3VudCA+IDA7XG59O1xuIl0sIm5hbWVzIjpbImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZEZpbHRlckNsYXVzZSIsInVzZURiIiwicmVnaXN0cnkiLCJldmVudENhdGVnb3J5IiwiYnVpbGRGaWx0ZXJzIiwiZmlsdGVycyIsInZhck5hbWUiLCJzaW1wbGVGaWx0ZXJzIiwiY29uZGl0aW9ucyIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsInB1c2giLCJKU09OIiwic3RyaW5naWZ5Iiwiam9pbiIsImJ1aWxkU29ydCIsInNvcnQiLCJsZW5ndGgiLCJzb3J0UGFydHMiLCJtYXAiLCJmaWVsZCIsImRpcmVjdGlvbiIsImJ1aWxkTGltaXQiLCJsaW1pdCIsImZyb20iLCJ0byIsImNvdW50IiwiYXBwbHlQcml2YWN5RmlsdGVyIiwiY29sbGVjdGlvbiIsInNlc3Npb25JZCIsImNvbmZpZyIsImdldCIsImhhc1ByaXZhY3kiLCJhcHBseU93bmVyc2hpcEZpbHRlciIsImdldEl0ZW1CeSIsImNvbnRleHQiLCJvcHRpb25zIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwic2Vzc2lvbiIsInVzZXJJZCIsInByaXZhY3kiLCJvd25lcnNoaXAiLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImRhdGFiYXNlIiwiZmlsdGVyQ2xhdXNlIiwicHJpdmFjeUZpbHRlciIsIm93bmVyc2hpcEZpbHRlciIsImNvbGxlY3Rpb25MaXRlcmFsIiwid2hlcmVDbGF1c2UiLCJjdXN0b21RdWVyaWVzTGl0ZXJhbCIsInJldHVyblZhbHVlIiwiYXFsUXVlcnkiLCJyZXN1bHQiLCJxdWVyeSIsIml0ZW0iLCJuZXh0IiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJwYXJhbXMiLCJnZXRMaXN0QnkiLCJzb3J0Q2xhdXNlIiwibGltaXRDbGF1c2UiLCJhbGwiLCJhZGRJdGVtIiwiZGF0YSIsImhvb2tzIiwiaW5zZXJ0RGF0YSIsImFkYXB0ZXJzIiwicGFyc2UiLCJiZWZvcmVJbnNlcnQiLCJub3ciLCJEYXRlIiwidGltZXN0YW1wcyIsImNyZWF0ZWQiLCJ1cGRhdGVkIiwiY29sbGVjdGlvblJlZiIsInNhdmUiLCJyZXR1cm5OZXciLCJuZXciLCJhZnRlckluc2VydCIsInVwZGF0ZUl0ZW0iLCJpZCIsInVwZGF0ZXMiLCJ1cGRhdGVEYXRhIiwiYmVmb3JlVXBkYXRlIiwiZG9jSWQiLCJpbmNsdWRlcyIsImFmdGVyVXBkYXRlIiwiZGVsZXRlSXRlbSIsInNvZnQiLCJjYXNjYWRlIiwiZG9jS2V5Iiwic3BsaXQiLCJwb3AiLCJkZWxldGVkSXRlbSIsImJlZm9yZURlbGV0ZSIsInVwZGF0ZSIsImRlbGV0ZWQiLCJkZWxldGVkQXQiLCJlZGdlc1RvQ2FzY2FkZSIsImNhc2NhZGVFZGdlcyIsImVkZ2VUeXBlIiwiZWRnZVF1ZXJ5IiwiYWZ0ZXJEZWxldGUiLCJjb3VudEl0ZW1zIiwiaXRlbUV4aXN0cyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFDckMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLGlCQUFpQixRQUFPLHlCQUF5QjtBQUN6RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLFFBQVEsUUFBTyxpQ0FBaUM7QUFNeEQsTUFBTUMsZ0JBQWdCO0FBZ0J0Qjs7Q0FFQyxHQUNELE1BQU1DLGVBQWUsQ0FDbkJDLFNBQ0FDLFVBQWtCLEtBQUs7SUFFdkIsa0RBQWtEO0lBQ2xELElBQUksV0FBV0QsV0FBVyxnQkFBZ0JBLFNBQVM7UUFDakQsT0FBT0wsa0JBQWtCSyxTQUF3QkM7SUFDbkQ7SUFFQSx3QkFBd0I7SUFDeEIsTUFBTUMsZ0JBQWdCRjtJQUN0QixNQUFNRyxhQUF1QixFQUFFO0lBRS9CLEtBQUssTUFBTSxDQUFDQyxLQUFLQyxNQUFNLElBQUlDLE9BQU9DLE9BQU8sQ0FBQ0wsZUFBZ0I7UUFDeEQsSUFBSUcsVUFBVSxNQUFN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
@@ -163,7 +163,7 @@ const buildGroupMutation = ({ description = '', name = 'Untitled', type })=>({
163
163
  });
164
164
  export const addGroup = (context, item)=>{
165
165
  const action = 'add';
166
- const { databaseName, session: { userId: sessionId } } = context;
166
+ const { session: { userId: sessionId } } = context;
167
167
  const sessionDocId = `${COLLECTIONS.USERS}/${sessionId}`;
168
168
  const { description = '' } = item;
169
169
  const id = createHash(`group-${sessionId}`);
@@ -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+IG51bGwpKTtcbn07XG5cbmNvbnN0IGJ1aWxkR3JvdXBNdXRhdGlvbiA9ICh7ZGVzY3JpcHRpb24gPSAnJywgbmFtZSA9ICdVbnRpdGxlZCcsIHR5cGV9OiBHcm91cFR5cGUpOiBQYXJ0aWFsPEdyb3VwVHlwZT4gPT4gKHtcbiAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCA2NDApLFxuICBuYW1lLFxuICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBhZGRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uID0gJyd9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goYGdyb3VwLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBpbnNlcnQ6IEdyb3VwVHlwZSA9IHtcbiAgICBfa2V5OiBpZCxcbiAgICAuLi5idWlsZEdyb3VwTXV0YXRpb24oaXRlbSlcbiAgfTtcblxuICByZXR1cm4gYWRkSXRlbTxHcm91cFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkdST1VQUywgaW5zZXJ0KVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIGNvbnN0IHtfaWQ6IGdyb3VwRG9jSWR9OiBHcm91cFR5cGUgPSBncm91cDtcblxuICAgICAgLy8gVmFsaWRhdGUgc2Vzc2lvbkRvY0lkIGFuZCBncm91cERvY0lkXG4gICAgICBpZiAoIXNlc3Npb25Eb2NJZCB8fCB0eXBlb2Ygc2Vzc2lvbkRvY0lkICE9PSAnc3RyaW5nJyB8fCAhc2Vzc2lvbkRvY0lkLnN0YXJ0c1dpdGgoJ3VzZXJzLycpKSB7XG4gICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVFxuICAgICAgICB9LCBuZXcgRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBzZXNzaW9uRG9jSWQgZm9yIGVkZ2UgY3JlYXRpb24nKSwgY29udGV4dCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCFncm91cERvY0lkIHx8IHR5cGVvZiBncm91cERvY0lkICE9PSAnc3RyaW5nJyB8fCAhZ3JvdXBEb2NJZC5zdGFydHNXaXRoKCdncm91cHMvJykpIHtcbiAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5JTlZBTElEX0lOUFVUXG4gICAgICAgIH0sIG5ldyBFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIGdyb3VwRG9jSWQgZm9yIGVkZ2UgY3JlYXRpb24nKSwgY29udGV4dCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0YWdOYW1lcyA9IGV4dHJhY3RUYWdzKGRlc2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIHRhZ05hbWVzKVxuICAgICAgICAudGhlbigocmVzb2x2ZWRUYWdzKSA9PiB1cGRhdGVUYWdzSW5JdGVtKGNvbnRleHQsIHtpdGVtRG9jSWQ6IGdyb3VwRG9jSWQsIHRhZ3M6IHJlc29sdmVkVGFnc30pKVxuICAgICAgICAudGhlbigoKSA9PiBjcmVhdGVHcm91cEVkZ2UoY29udGV4dCwgc2Vzc2lvbkRvY0lkLCBncm91cERvY0lkKVxuICAgICAgICAudGhlbigoKSA9PiBncm91cCkpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGlkXG4gIH06IEdyb3VwVHlwZSA9IGl0ZW07XG4gIGNvbnN0IGl0ZW1JZCA9IHBhcnNlSWQoaWQpO1xuXG4gIHJldHVybiB1cGRhdGVJdGVtPEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCBpdGVtSWQsIGJ1aWxkR3JvdXBNdXRhdGlvbihpdGVtKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19pZDogZ3JvdXBEb2NJZH0gPSBncm91cDtcblxuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB0YWdOYW1lcyA9IGV4dHJhY3RUYWdzKGRlc2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIHRhZ05hbWVzKVxuICAgICAgICAudGhlbigocmVzb2x2ZWRUYWdzKSA9PiB1cGRhdGVUYWdzSW5JdGVtKGNvbnRleHQsIHtpdGVtRG9jSWQ6IGdyb3VwRG9jSWQsIHRhZ3M6IHJlc29sdmVkVGFnc30pKVxuICAgICAgICAudGhlbigoKSA9PiBncm91cCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGUnO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgcmV0dXJuIGRlbGV0ZUl0ZW08R3JvdXBUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5HUk9VUFMsIGZvcm1hdEl0ZW1JZClcbiAgICAudGhlbigoZ3JvdXApID0+IGdyb3VwIHx8ICh7X2tleTogZm9ybWF0SXRlbUlkfSBhcyBHcm91cFR5cGUpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3Vwc0J5UmVhY3Rpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgcmVhY3Rpb246IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEdyb3Vwc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uID0gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMik7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIHIgSU4gT1VUQk9VTkQgJHt1c2VyRG9jSWR9IGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci52YWx1ZSA9PSAke2Zvcm1hdFJlYWN0aW9ufVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHt2YWx1ZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR3JvdXBlZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFVzZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2lzR3JvdXBlZCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkID0gcGFyc2VJZChncm91cElkKTtcblxuICAvLyBDb21wbGV4IGVkZ2UgdHJhdmVyc2FsIHRvIGNoZWNrIGdyb3VwIG1lbWJlcnNoaXAgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOICR7Z3JvdXBzQ29sbGVjdGlvbn1cbiAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0R3JvdXBJZH1cbiAgICBGT1IgdSBJTiBJTkJPVU5EIGcuX2lkICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgRklMVEVSIHUuX2tleSA9PSAke2Zvcm1hdFVzZXJJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZCA9ICEhcmVzdWx0cy5sZW5ndGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIGlzVmFsaWQsXG4gICAgICAgIHVzZXJJZFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHtzZXNzaW9uOiB7dXNlcklkfX0pLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdLCJuYW1lcyI6WyJmbGF0dGVuIiwidW5pcUJ5IiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwidXBkYXRlSXRlbSIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJldmVudENhdGVnb3J5IiwiZ3JvdXBzQ29sbGVjdGlvbiIsIkdST1VQUyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwiaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24iLCJIQVNfQ09OTkVDVElPTiIsImlzVGFnZ2VkQ29sbGVjdGlvbiIsIklTX1RBR0dFRCIsImdldEdyb3VwTGlzdEJ5QXBwIiwiY29udGV4dCIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImFxbFFyeSIsInVuZGVmaW5lZCIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRHcm91cExpc3RCeVVzZXIiLCJ1c2VySWQiLCJnZXRHcm91cExpc3RCeVRhZ3MiLCJ0YWdOYW1lcyIsIlByb21pc2UiLCJtYXAiLCJ0YWdOYW1lIiwiZm9ybWF0VGFnTmFtZSIsImxpbWl0Q2xhdXNlIiwicmVzdWx0cyIsIml0ZW0iLCJfa2V5IiwiZ2V0R3JvdXBCeUlkIiwiaXRlbUlkIiwic2Vzc2lvbiIsInNlc3Npb25JZCIsImZvcm1hdEl0ZW1JZCIsIm5leHQiLCJncm91cCIsImdldEdyb3VwRGV0YWlscyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY3JlYXRlR3JvdXBFZGdlIiwidXNlckRvY0lkIiwiZ3JvdXBEb2NJZCIsImZvcm1hdFVzZURvY0lkIiwiZm9ybWF0R3JvdXBEb2NJZCIsIm5vdyIsIkRhdGUiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJhZGRlZCIsInR5cGUiLCJzYXZlIiwicmV0dXJuTmV3IiwiYnVpbGRHcm91cE11dGF0aW9uIiwiZGVzY3JpcHRpb24iLCJuYW1lIiwic3Vic3RyaW5nIiwiYWRkR3JvdXAiLCJzZXNzaW9uRG9jSWQiLCJpZCIsImluc2VydCIsIl9pZCIsInN0YXJ0c1dpdGgiLCJJTlZBTElEX0lOUFVUIiwiRXJyb3IiLCJyZXNvbHZlZFRhZ3MiLCJpdGVtRG9jSWQiLCJ0YWdzIiwidXBkYXRlR3JvdXAiLCJkZWxldGVHcm91cCIsImdldEdyb3Vwc0J5UmVhY3Rpb24iLCJyZWFjdGlvbiIsImZvcm1hdFJlYWN0aW9uIiwiaXNHcm91cGVkIiwiZm9ybWF0VXNlcklkIiwiaXNWYWxpZCIsImxlbmd0aCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBTyxRQUFPLDhCQUE4QjtBQUNwRCxTQUFRQyxNQUFNLFFBQU8sMkJBQTJCO0FBQ2hELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sUUFBTywrQkFBK0I7QUFDM0YsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBa0JDLE9BQU8sUUFBTyxlQUFlO0FBRS9DLFNBQVFDLFdBQVcsRUFBRUMsS0FBSyxRQUFPLDhCQUE4QjtBQUMvRCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxVQUFVLFFBQU8sWUFBWTtBQUNyRSxTQUFRQyxXQUFXLEVBQUVDLGdCQUFnQixFQUFFQyxnQkFBZ0IsUUFBTyxZQUFZO0FBTTFFLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxtQkFBbUJkLFFBQVFDLFlBQVljLE1BQU07QUFDbkQsTUFBTUMsa0JBQWtCaEIsUUFBUUMsWUFBWWdCLEtBQUs7QUFDakQsTUFBTUMsMEJBQTBCbEIsUUFBUUUsTUFBTWlCLGNBQWM7QUFDNUQsTUFBTUMscUJBQXFCcEIsUUFBUUUs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
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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