@nlabs/reaktor 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/personas.d.ts +1 -1
  2. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/posts.d.ts +1 -1
  3. package/lib/actions/posts.js +5 -3
  4. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/users.d.ts +2 -2
  5. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/postAdapter.d.ts +1 -0
  6. package/lib/adapters/postAdapter.js +8 -2
  7. package/lib/constants/collections.d.ts +86 -0
  8. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/conversation.d.ts +1 -1
  9. package/lib/mutations/content/content.d.ts +1 -0
  10. package/lib/mutations/content/content.js +3 -3
  11. package/lib/mutations/events/events.d.ts +1 -0
  12. package/lib/mutations/events/events.js +5 -5
  13. package/lib/mutations/locations/locations.d.ts +1 -0
  14. package/lib/mutations/locations/locations.js +2 -2
  15. package/lib/mutations/personas/personas.d.ts +1 -0
  16. package/lib/mutations/personas/personas.js +5 -5
  17. package/lib/mutations/posts/posts.d.ts +1 -0
  18. package/lib/mutations/posts/posts.js +3 -3
  19. package/lib/mutations/statistics/statistics.d.ts +1 -0
  20. package/lib/mutations/statistics/statistics.js +2 -2
  21. package/lib/mutations/subscriptions/subscriptions.d.ts +1 -0
  22. package/lib/mutations/subscriptions/subscriptions.js +4 -4
  23. package/lib/objectTypes/post.js +19 -1
  24. package/lib/queries/content/content.d.ts +1 -0
  25. package/lib/queries/content/content.js +3 -3
  26. package/lib/queries/events/events.d.ts +1 -0
  27. package/lib/queries/events/events.js +4 -4
  28. package/lib/queries/locations/locations.d.ts +1 -0
  29. package/lib/queries/locations/locations.js +3 -3
  30. package/lib/queries/posts/posts.d.ts +1 -0
  31. package/lib/queries/posts/posts.js +12 -8
  32. package/lib/queries/query/query.d.ts +1 -0
  33. package/lib/queries/query/query.js +4 -4
  34. package/lib/queries/statistics/statistics.d.ts +1 -0
  35. package/lib/queries/statistics/statistics.js +2 -2
  36. package/lib/queries/tags/tags.d.ts +1 -0
  37. package/lib/queries/tags/tags.js +5 -5
  38. package/lib/templates/email/layout.d.ts +2 -0
  39. package/lib/templates/email/passwordForgot.d.ts +2 -0
  40. package/lib/templates/email/passwordRecovery.d.ts +2 -0
  41. package/lib/templates/email/verifyEmail.d.ts +2 -0
  42. package/lib/templates/email/welcome.d.ts +2 -0
  43. package/lib/templates/sms/passwordForgot.d.ts +2 -0
  44. package/lib/templates/sms/passwordRecovery.d.ts +2 -0
  45. package/lib/templates/sms/verifyEmail.d.ts +2 -0
  46. package/lib/templates/sms/verifyPhone.d.ts +2 -0
  47. package/lib/templates/sms/welcome.d.ts +2 -0
  48. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/connections.types.d.ts +2 -2
  49. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/posts.types.d.ts +2 -1
  50. package/lib/types/posts.types.js +1 -1
  51. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/aqlHelpers.d.ts +2 -2
  52. package/lib/utils/imageUtils.d.ts +1 -0
  53. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/stripeUtils.d.ts +1 -1
  54. package/lib/utils/stripeUtils.js +2 -2
  55. package/lib/{Users/nitrog7/Development/reaktor/src/videoProcessing.d.ts → videoProcessing.d.ts} +2 -2
  56. package/package.json +53 -35
  57. package/lib/Users/nitrog7/Development/reaktor/src/constants/collections.d.ts +0 -86
  58. package/lib/Users/nitrog7/Development/reaktor/src/mutations/content/content.d.ts +0 -2
  59. package/lib/Users/nitrog7/Development/reaktor/src/mutations/events/events.d.ts +0 -2
  60. package/lib/Users/nitrog7/Development/reaktor/src/mutations/locations/locations.d.ts +0 -2
  61. package/lib/Users/nitrog7/Development/reaktor/src/mutations/personas/personas.d.ts +0 -2
  62. package/lib/Users/nitrog7/Development/reaktor/src/mutations/posts/posts.d.ts +0 -2
  63. package/lib/Users/nitrog7/Development/reaktor/src/mutations/statistics/statistics.d.ts +0 -2
  64. package/lib/Users/nitrog7/Development/reaktor/src/mutations/subscriptions/subscriptions.d.ts +0 -2
  65. package/lib/Users/nitrog7/Development/reaktor/src/queries/content/content.d.ts +0 -2
  66. package/lib/Users/nitrog7/Development/reaktor/src/queries/events/events.d.ts +0 -2
  67. package/lib/Users/nitrog7/Development/reaktor/src/queries/locations/locations.d.ts +0 -2
  68. package/lib/Users/nitrog7/Development/reaktor/src/queries/posts/posts.d.ts +0 -2
  69. package/lib/Users/nitrog7/Development/reaktor/src/queries/query/query.d.ts +0 -2
  70. package/lib/Users/nitrog7/Development/reaktor/src/queries/statistics/statistics.d.ts +0 -2
  71. package/lib/Users/nitrog7/Development/reaktor/src/queries/tags/tags.d.ts +0 -2
  72. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/layout.d.ts +0 -2
  73. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordForgot.d.ts +0 -2
  74. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordRecovery.d.ts +0 -2
  75. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/verifyEmail.d.ts +0 -2
  76. package/lib/Users/nitrog7/Development/reaktor/src/templates/email/welcome.d.ts +0 -2
  77. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordForgot.d.ts +0 -2
  78. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordRecovery.d.ts +0 -2
  79. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyEmail.d.ts +0 -2
  80. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyPhone.d.ts +0 -2
  81. package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/welcome.d.ts +0 -2
  82. package/lib/Users/nitrog7/Development/reaktor/src/utils/imageUtils.d.ts +0 -1
  83. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/apps.d.ts +1 -1
  84. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/connections.d.ts +0 -0
  85. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/content.d.ts +0 -0
  86. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/conversations.d.ts +0 -0
  87. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/crm.d.ts +0 -0
  88. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/crud.d.ts +0 -0
  89. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/dynamodb.d.ts +0 -0
  90. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/email.d.ts +0 -0
  91. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/files.d.ts +0 -0
  92. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/groups.d.ts +0 -0
  93. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/images.d.ts +0 -0
  94. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/index.d.ts +0 -0
  95. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/ios.d.ts +0 -0
  96. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/locations.d.ts +0 -0
  97. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/messages.d.ts +0 -0
  98. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/notifications.d.ts +0 -0
  99. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/payments.d.ts +0 -0
  100. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/query.d.ts +0 -0
  101. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/reactions.d.ts +0 -0
  102. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/rum.d.ts +0 -0
  103. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/s3.d.ts +0 -0
  104. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/search.d.ts +0 -0
  105. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/sms.d.ts +0 -0
  106. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/statistics.d.ts +0 -0
  107. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/subscriptions.d.ts +0 -0
  108. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/tags.d.ts +0 -0
  109. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/videos.d.ts +0 -0
  110. package/lib/{Users/nitrog7/Development/reaktor/src/actions → actions}/websockets.d.ts +0 -0
  111. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/arangoAdapter.d.ts +0 -0
  112. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/contentAdapter.d.ts +0 -0
  113. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/fileAdapter.d.ts +0 -0
  114. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/imageAdapter.d.ts +0 -0
  115. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/index.d.ts +0 -0
  116. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/messageAdapter.d.ts +0 -0
  117. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/reaktorAdapter.d.ts +0 -0
  118. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/tagAdapter.d.ts +0 -0
  119. package/lib/{Users/nitrog7/Development/reaktor/src/adapters → adapters}/userAdapter.d.ts +0 -0
  120. package/lib/{Users/nitrog7/Development/reaktor/src/config.d.ts → config.d.ts} +0 -0
  121. package/lib/{Users/nitrog7/Development/reaktor/src/handlers → handlers}/graphqlHandler.d.ts +0 -0
  122. package/lib/{Users/nitrog7/Development/reaktor/src/index.d.ts → index.d.ts} +0 -0
  123. package/lib/{Users/nitrog7/Development/reaktor/src/lambdas → lambdas}/actions/websockets.d.ts +0 -0
  124. package/lib/{Users/nitrog7/Development/reaktor/src/lambdas → lambdas}/authorizer.d.ts +0 -0
  125. package/lib/{Users/nitrog7/Development/reaktor/src/lambdas → lambdas}/connection.d.ts +4 -4
  126. package/lib/{Users/nitrog7/Development/reaktor/src/lambdas → lambdas}/utils/message.d.ts +0 -0
  127. package/lib/{Users/nitrog7/Development/reaktor/src/lambdas → lambdas}/utils/websocket.d.ts +0 -0
  128. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/file.d.ts +0 -0
  129. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/group.d.ts +0 -0
  130. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/image.d.ts +0 -0
  131. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/post.d.ts +1 -1
  132. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/tag.d.ts +0 -0
  133. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/user.d.ts +0 -0
  134. package/lib/{Users/nitrog7/Development/reaktor/src/mocks → mocks}/video.d.ts +0 -0
  135. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/crm/crm.d.ts +0 -0
  136. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/groups/groups.d.ts +0 -0
  137. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/images/images.d.ts +0 -0
  138. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/index.d.ts +0 -0
  139. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/messages/messages.d.ts +0 -0
  140. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/reactions/reactions.d.ts +0 -0
  141. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/rum/rum.d.ts +0 -0
  142. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/tags/tags.d.ts +0 -0
  143. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/users/users.d.ts +0 -0
  144. package/lib/{Users/nitrog7/Development/reaktor/src/mutations → mutations}/videos/videos.d.ts +0 -0
  145. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/app.d.ts +0 -0
  146. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/bankAccount.d.ts +0 -0
  147. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/connection.d.ts +0 -0
  148. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/content.d.ts +0 -0
  149. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/conversation.d.ts +0 -0
  150. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/creditCard.d.ts +0 -0
  151. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/crm.d.ts +0 -0
  152. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/document.d.ts +0 -0
  153. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/error.d.ts +0 -0
  154. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/event.d.ts +0 -0
  155. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/external.d.ts +0 -0
  156. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/file.d.ts +0 -0
  157. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/filter.d.ts +0 -0
  158. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/group.d.ts +0 -0
  159. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/iapSubscription.d.ts +0 -0
  160. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/image.d.ts +0 -0
  161. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/index.d.ts +0 -0
  162. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/location.d.ts +0 -0
  163. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/message.d.ts +0 -0
  164. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/passcode.d.ts +0 -0
  165. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/persona.d.ts +0 -0
  166. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/plan.d.ts +0 -0
  167. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/post.d.ts +0 -0
  168. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/query.d.ts +0 -0
  169. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/reaction.d.ts +0 -0
  170. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/relation.d.ts +0 -0
  171. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/rum.d.ts +0 -0
  172. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/search.d.ts +0 -0
  173. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/statistics.d.ts +0 -0
  174. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/subscription.d.ts +0 -0
  175. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/tag.d.ts +0 -0
  176. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/user.d.ts +0 -0
  177. package/lib/{Users/nitrog7/Development/reaktor/src/objectTypes → objectTypes}/video.d.ts +0 -0
  178. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/crm/crm.d.ts +0 -0
  179. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/groups/groups.d.ts +0 -0
  180. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/images/images.d.ts +0 -0
  181. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/index.d.ts +0 -0
  182. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/messages/messages.d.ts +0 -0
  183. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/personas/personas.d.ts +0 -0
  184. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/reactions/reactions.d.ts +0 -0
  185. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/subscriptions/subscriptions.d.ts +0 -0
  186. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/users/users.d.ts +0 -0
  187. package/lib/{Users/nitrog7/Development/reaktor/src/queries → queries}/videos/videos.d.ts +0 -0
  188. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/apps.types.d.ts +0 -0
  189. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/arangodb.types.d.ts +0 -0
  190. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/auth.types.d.ts +0 -0
  191. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/content.types.d.ts +0 -0
  192. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/conversations.types.d.ts +0 -0
  193. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/crm.types.d.ts +0 -0
  194. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/email.types.d.ts +0 -0
  195. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/error.types.d.ts +0 -0
  196. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/files.types.d.ts +0 -0
  197. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/google.types.d.ts +0 -0
  198. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/groups.types.d.ts +0 -0
  199. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/images.types.d.ts +0 -0
  200. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/index.d.ts +0 -0
  201. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/locations.types.d.ts +0 -0
  202. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/messages.types.d.ts +0 -0
  203. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/notifications.types.d.ts +0 -0
  204. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/payments.types.d.ts +0 -0
  205. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/personas.types.d.ts +0 -0
  206. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/rum.types.d.ts +0 -0
  207. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/statistics.types.d.ts +0 -0
  208. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/tags.types.d.ts +0 -0
  209. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/users.types.d.ts +0 -0
  210. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/videos.types.d.ts +0 -0
  211. package/lib/{Users/nitrog7/Development/reaktor/src/types → types}/websockets.types.d.ts +0 -0
  212. package/lib/{Users/nitrog7/Development/reaktor/src/upload.d.ts → upload.d.ts} +0 -0
  213. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/adapterUtils.d.ts +0 -0
  214. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/analyticsUtils.d.ts +0 -0
  215. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/arangodbUtils.d.ts +0 -0
  216. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/authUtils.d.ts +0 -0
  217. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/awsUtils.d.ts +0 -0
  218. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/collectionRegistry.d.ts +0 -0
  219. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/contextUtils.d.ts +0 -0
  220. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/dbI18n.d.ts +0 -0
  221. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/dbI18n.example.d.ts +0 -0
  222. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/googleTranslate.d.ts +0 -0
  223. package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/graphqlUtils.d.ts +1 -1
  224. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/index.d.ts +0 -0
  225. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/languageDetection.d.ts +0 -0
  226. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/localeUtils.d.ts +0 -0
  227. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/localeUtils.example.d.ts +0 -0
  228. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/middlewareUtils.d.ts +0 -0
  229. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/queryBuilder.d.ts +0 -0
  230. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/schemaUtils.d.ts +0 -0
  231. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/sessionUtils.d.ts +0 -0
  232. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/templateUtils.d.ts +0 -0
  233. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/testUtils.d.ts +0 -0
  234. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/translationQueue.d.ts +0 -0
  235. /package/lib/{Users/nitrog7/Development/reaktor/src/utils → utils}/translationQueue.example.d.ts +0 -0
@@ -11,7 +11,7 @@ export declare const configurePersonaActions: (extensions?: PersonaActionExtensi
11
11
  export declare const getPersonaOwnerUserId: (context: ApiContext, personaId: string) => Promise<string>;
12
12
  export declare const isUserVisibilityBlocked: (context: ApiContext, targetUserId: string, sessionUserIdOverride?: string) => Promise<boolean>;
13
13
  export declare const isPersonaVisibilityBlocked: (context: ApiContext, targetPersonaId: string, sessionPersonaIdOverride?: string) => Promise<boolean>;
14
- export declare const getPersonaRelationshipState: (context: ApiContext, targetPersonaId: string, sessionPersonaIdOverride?: string) => Promise<Pick<PersonaType, "isBlocked" | "isFollowedBy" | "isFollowing" | "isFriend">>;
14
+ export declare const getPersonaRelationshipState: (context: ApiContext, targetPersonaId: string, sessionPersonaIdOverride?: string) => Promise<Pick<PersonaType, 'isBlocked' | 'isFollowedBy' | 'isFollowing' | 'isFriend'>>;
15
15
  export declare const getPersonaFollowerCount: (context: ApiContext, personaId: string) => Promise<number>;
16
16
  export declare const getPersonaFollowingCount: (context: ApiContext, personaId: string) => Promise<number>;
17
17
  export declare const getPersonaById: (context: ApiContext, personaId: string) => Promise<PersonaType | null>;
@@ -24,7 +24,7 @@ export declare const getPostListByReaction: (context: ApiContext, reactions?: st
24
24
  export declare const getPostListByTags: (context: ApiContext, tagNames?: string[], options?: PostOptions) => Promise<PostType[]>;
25
25
  export declare const getPostListByUser: (context: ApiContext, userId: string, options?: PostOptions) => Promise<PostType[]>;
26
26
  export declare const getPostListByParent: (context: ApiContext, postId: string, options?: PostOptions) => Promise<PostType[]>;
27
- export declare const addPost: (context: ApiContext, { content, endDate, groupId, location, latitude, longitude, name, parentId, privacy, maxGuestsPerPersona, personaId, tags, startDate, ticketCostCents, type }: PostInputType) => Promise<PostType>;
27
+ export declare const addPost: (context: ApiContext, { content, endDate, groupId, location, latitude, longitude, name, parentId, privacy, props, maxGuestsPerPersona, personaId, tags, startDate, ticketCostCents, type }: PostInputType) => Promise<PostType>;
28
28
  export declare const updatePost: (context: ApiContext, post: PostInputType) => Promise<PostType>;
29
29
  export declare const deletePost: (context: ApiContext, postDocId: string) => Promise<PostType>;
30
30
  export declare const createPostEdge: (context: ApiContext, postDocId: string, itemDocId: string, edgeType?: string, props?: {}) => Promise<FileType>;
@@ -5,7 +5,7 @@
5
5
  import { createHash, parseArangoId, parseChar, parseId, parseString, parseVarChar } from '@nlabs/utils/parsers/strings';
6
6
  import { aql } from 'arangojs';
7
7
  import { literal } from 'arangojs/aql';
8
- import { parsePost } from '../adapters/postAdapter.js';
8
+ import { parsePost, parsePostProps } from '../adapters/postAdapter.js';
9
9
  import { COLLECTIONS, EDGES, PrivacyLevel, ReactionType } from '../constants/collections.js';
10
10
  import { ErrorTypes } from '../types/error.types.js';
11
11
  import { logError, logException } from '../utils/analyticsUtils.js';
@@ -436,6 +436,7 @@ const preparePostData = (input, sessionId, personaId, postId, now)=>({
436
436
  name: parseString(input.name || '', 160),
437
437
  parentId: input.parentId ? parseId(input.parentId) : undefined,
438
438
  privacy: parseVarChar(input.privacy || PrivacyLevel.PUBLIC, 16),
439
+ props: parsePostProps(input.props),
439
440
  personaId,
440
441
  startDate: input.startDate ? parseNum(input.startDate, 13) : undefined,
441
442
  ticketCostCents: input.ticketCostCents !== undefined ? parseNum(input.ticketCostCents, 12) : undefined,
@@ -464,7 +465,7 @@ const handlePostTags = async (context, postDocId, content, tags, sessionId)=>{
464
465
  }
465
466
  return [];
466
467
  };
467
- export const addPost = async (context, { content = '', endDate, groupId = '', location, latitude, longitude, name = '', parentId = '', privacy = PrivacyLevel.PUBLIC, maxGuestsPerPersona, personaId = '', tags = [], startDate, ticketCostCents, type = 'default' })=>{
468
+ export const addPost = async (context, { content = '', endDate, groupId = '', location, latitude, longitude, name = '', parentId = '', privacy = PrivacyLevel.PUBLIC, props = {}, maxGuestsPerPersona, personaId = '', tags = [], startDate, ticketCostCents, type = 'default' })=>{
468
469
  const action = 'addPost';
469
470
  const { session: { userId: sessionId } = {} } = context;
470
471
  const postId = createHash(`post-${sessionId}`);
@@ -480,6 +481,7 @@ export const addPost = async (context, { content = '', endDate, groupId = '', lo
480
481
  name,
481
482
  parentId,
482
483
  privacy,
484
+ props,
483
485
  personaId: resolvedPersonaId,
484
486
  startDate,
485
487
  tags,
@@ -613,4 +615,4 @@ export const createPostEdge = (context, postDocId, itemDocId, edgeType = EDGES.I
613
615
  });
614
616
  };
615
617
 
616
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0fSBmcm9tICcuLi9hZGFwdGVycy9wb3N0QWRhcHRlci5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFUywgUHJpdmFjeUxldmVsLCBSZWFjdGlvblR5cGV9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgYnVpbGREaXN0YW5jZVF1ZXJ5LFxuICBidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5LFxuICBidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSxcbiAgYnVpbGRSZWFjdGlvbnNRdWVyeSxcbiAgYnVpbGRUYWdzUXVlcnksXG4gIGJ1aWxkVXNlckluZm9RdWVyeSxcbn0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2V4dHJhY3RUYWdzLCBnZXRUYWdMaXN0QnlOYW1lLCB1cGRhdGVUYWdzSW5JdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtQcml2YWN5TGV2ZWxUeXBlLCBSZWFjdGlvblR5cGVUeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Bvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MudHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEggPSAxMDAwMDA7XG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3Bvc3RzJztcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGV4cGxpY2l0UGVyc29uYUlkID0gJydcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHByb3ZpZGVkUGVyc29uYUlkID0gcGFyc2VJZChleHBsaWNpdFBlcnNvbmFJZCk7XG5cbiAgaWYocHJvdmlkZWRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gcHJvdmlkZWRQZXJzb25hSWQ7XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkUGFyc2VkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkIHx8ICcnKTtcbiAgaWYoIXNlc3Npb25Vc2VySWRQYXJzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldEl0ZW1CeTx7cGVyc29uYUlkPzogc3RyaW5nfT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHtfa2V5OiBzZXNzaW9uVXNlcklkUGFyc2VkfSk7XG4gIHJldHVybiBwYXJzZUlkKHVzZXI/LnBlcnNvbmFJZCB8fCAnJykgfHwgdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZFBvc3RzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0czogUG9zdFR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKHBvc3RzLm1hcChhc3luYyAocG9zdCkgPT4ge1xuICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBvc3Q/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gcG9zdHMuZmlsdGVyKChfcG9zdCwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IHtQcml2YWN5TGV2ZWwsIFJlYWN0aW9uVHlwZX07XG5leHBvcnQgdHlwZSB7UHJpdmFjeUxldmVsVHlwZSwgUmVhY3Rpb25UeXBlVHlwZX07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RPcHRpb25zID0gKG9wdGlvbnM6IFBvc3RPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIGxhdGl0dWRlID0gMCxcbiAgICBsb25naXR1ZGUgPSAwLFxuICAgIHN0YXJ0RGF0ZSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ3Bvc3QnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGF0aXR1ZGU6IHBhcnNlTnVtKGxhdGl0dWRlLCAzMiksXG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIGxvbmdpdHVkZTogcGFyc2VOdW0obG9uZ2l0dWRlLCAzMiksXG4gICAgc3RhcnREYXRlOiBwYXJzZU51bShzdGFydERhdGUsIDMyKSxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5jb25zdCBFVkVOVF9QT1NUX1RZUEUgPSAnZXZlbnQnO1xuY29uc3QgUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUgPSBDT0xMRUNUSU9OUy5QT1NUUztcbmNvbnN0IE9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSA9IGBwLnR5cGUgPT0gXCIke0VWRU5UX1BPU1RfVFlQRX1cIiA/IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgOiBcIiR7UE9TVF9SRUFDVElPTl9JVEVNX1RZUEV9XCJgO1xuXG5jb25zdCBnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUgPSAocmVhY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gKFxuICByZWFjdGlvbk5hbWUgPT09IFJlYWN0aW9uVHlwZS5QSU5cbiAgICA/ICdpc1NhdmVkJ1xuICAgIDogYGhhcyR7cmVhY3Rpb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7cmVhY3Rpb25OYW1lLnNsaWNlKDEpfWBcbik7XG5cbi8vIE1hcCBvZiBvcHRpb25hbCBmaWVsZCBoYW5kbGVyc1xudHlwZSBGaWVsZEhhbmRsZXIgPSAoYWN0b3JEb2NJZDogc3RyaW5nKSA9PiB7cXVlcnk6IHN0cmluZzsgb2JqZWN0OiBzdHJpbmd9O1xuXG5jb25zdCBPUFRJT05BTF9GSUVMRF9IQU5ETEVSUzogUmVjb3JkPHN0cmluZywgRmllbGRIYW5kbGVyPiA9IHtcbiAgaGFzUnN2cDogKGFjdG9yRG9jSWQpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUoUmVhY3Rpb25UeXBlLlJTVlApfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pICYmIHIuX2Zyb20gPT0gXCIke2FjdG9yRG9jSWR9XCJcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApKWAsXG4gICAgb2JqZWN0OiAnaGFzUnN2cDpoYXNSc3ZwJ1xuICB9KSxcbiAgaXNTYXZlZDogKGFjdG9yRG9jSWQpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUoUmVhY3Rpb25UeXBlLlBJTil9ID0gVE9fQk9PTChGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUElOfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2lzU2F2ZWQ6aXNTYXZlZCdcbiAgfSksXG4gIHJlYWN0aW9uczogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCByZWFjdGlvbnMgPSAoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICApYCxcbiAgICBvYmplY3Q6ICdyZWFjdGlvbnM6cmVhY3Rpb25zJ1xuICB9KSxcbiAgcnN2cENvdW50OiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7UmVhY3Rpb25UeXBlLlJTVlB9Q291bnQgPSBGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUlNWUH1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApYCxcbiAgICBvYmplY3Q6ICdyc3ZwQ291bnQ6cnN2cENvdW50J1xuICB9KSxcbiAgdmlld0NvdW50OiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7UmVhY3Rpb25UeXBlLlZJRVd9Q291bnQgPSBGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuVklFV31cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApYCxcbiAgICBvYmplY3Q6ICd2aWV3Q291bnQ6dmlld0NvdW50J1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RPcHRpb25hbEZpZWxkcyA9IChcbiAgZmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZyA9ICcnLFxuICBwZXJzb25hSWQ6IHN0cmluZyA9ICcnXG4pID0+XG4gIChmaWVsZHMgfHwgW10pLnJlZHVjZSgoc2VsZWN0czoge29iamVjdHM6IHN0cmluZ1tdLCBxdWVyaWVzOiBzdHJpbmdbXX0sIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gT1BUSU9OQUxfRklFTERfSEFORExFUlNbZmllbGRdO1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBjb25zdCBhY3RvckRvY0lkID0gcGVyc29uYUlkXG4gICAgICAgID8gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7cGFyc2VJZChwZXJzb25hSWQpfWBcbiAgICAgICAgOiBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgICAgIGNvbnN0IHtxdWVyeSwgb2JqZWN0fSA9IGhhbmRsZXIoYWN0b3JEb2NJZCk7XG4gICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChvYmplY3QpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0cztcbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgcHJpdmFjeSBmaWx0ZXIgcXVlcnlcbmNvbnN0IGJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5ID0gKFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgZ3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwcml2YWN5OiBzdHJpbmcsXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBzZWxlY3RRdWVyaWVzOiBzdHJpbmdbXSxcbiAgc2VsZWN0T2JqZWN0czogc3RyaW5nW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChncm91cElkICYmIHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5HUk9VUCkge1xuICAgIHJldHVybiBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgRk9SIGdyb3VwIElOICR7Q09MTEVDVElPTlMuR1JPVVBTfVxuICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gIH0gZWxzZSBpZiAocHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLlBVQkxJQykge1xuICAgIHJldHVybiBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0QnlJZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuICBjb25zdCB7dHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgIEZJTFRFUiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHAudHlwZSA9PSAke3R5cGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuICAgIGNvbnN0IHtcbiAgICAgIF9pZDogcG9zdERvY0lkLFxuICAgICAgcGVyc29uYUlkLFxuICAgICAgdXNlcklkLFxuICAgICAgZ3JvdXBJZCxcbiAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgIGlmKHBlcnNvbmFJZCAmJiBhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwZXJzb25hSWQpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLy8gVXNlciBvd25zIHRoZSBwb3N0LCByZXR1cm4gZGlyZWN0bHlcbiAgICBpZiAodXNlcklkID09PSBzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBwb3N0O1xuICAgIH1cblxuICAgIC8vIENoZWNrIHByaXZhY3kgYW5kIGJ1aWxkIGFwcHJvcHJpYXRlIHF1ZXJ5XG4gICAgY29uc3QgcHJpdmFjeUFxbFFyeSA9IGJ1aWxkUHJpdmFjeUZpbHRlclF1ZXJ5KFxuICAgICAgcG9zdERvY0lkLFxuICAgICAgZ3JvdXBJZCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBzZWxlY3RRdWVyaWVzLFxuICAgICAgc2VsZWN0T2JqZWN0c1xuICAgICk7XG5cbiAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgcmV0dXJuIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5QXJlYSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGF0aXR1ZGU6IG51bWJlcixcbiAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5QXJlYSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCBJTiAke2xpdGVyYWwoQ09MTEVDVElPTlMuUE9TVFMpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAucHJpdmFjeSA9PSAke1ByaXZhY3lMZXZlbC5QVUJMSUN9ICYmIHAucGFyZW50SWQgPT0gbnVsbFxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBTT1JUIGRpc3RhbmNlLCBwLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5TGF0ZXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0TGlzdEJ5TGF0ZXN0JztcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt0eXBlLCBwcml2YWN5OiBQcml2YWN5TGV2ZWwuUFVCTElDLCBwYXJlbnRJZDogbnVsbH0sXG4gICAge1xuICAgICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnREVTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICAgIH1cbiAgKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlSZWFjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdExpc3RCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHN0YXJ0RGF0ZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnMgPSBKU09OLnN0cmluZ2lmeShyZWFjdGlvbnMubWFwKChyZWFjdGlvbikgPT4gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMikudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCBgcC5wcml2YWN5ID09IFwiJHtQcml2YWN5TGV2ZWwuUFVCTElDfVwiYF07XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCBmb3JtYXRTdGFydERhdGUgPSBwYXJzZU51bShzdGFydERhdGUpO1xuXG4gIGlmIChmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICBpZiAocmVhY3Rpb25zLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeShyZWFjdGlvbnMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnM6bWF0Y2hlZFJlYWN0aW9ucycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBwLCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSAke2xpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKX1cbiAgICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICAgIEZPUiByZWFjdGlvbiwgaHIgSU4gMS4uMSBJTkJPVU5EIHAgJHtsaXRlcmFsKEVER0VTLklTX1RBR0dFRCl9XG4gICAgICAgICAgTEVUIG1hdGNoZWQgPSBMRU5HVEgoJHtsaXRlcmFsKGZvcm1hdFJlYWN0aW9ucyl9KSA+IDAgJiYgUE9TSVRJT04oJHtsaXRlcmFsKGZvcm1hdFJlYWN0aW9ucyl9LCByZWFjdGlvbi5uYW1lKVxuICAgICAgICAgIFNPUlQgcmVhY3Rpb24ubmFtZVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShyZWFjdGlvbiwge21hdGNoZWR9KVxuICAgICAgKVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJzLmpvaW4oJyAmJiAnKSl9XG4gICAgICBTT1JUICR7bGl0ZXJhbChzb3J0Qnkuam9pbignLCAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgncCcpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YWdOYW1lczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RzQnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHN0YXJ0RGF0ZSwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGZvcm1hdFRhZ05hbWVzOiBzdHJpbmdbXSA9IHRhZ05hbWVzLm1hcCgodGFnTmFtZSkgPT4gcGFyc2VDaGFyKHRhZ05hbWUsIDMyKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgLy8gVXNlIGJ1aWxkVGFnc1F1ZXJ5IGhlbHBlciB3aXRoIG1hdGNoZWQgdGFnc1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRUYWdzUXVlcnkoJ3AnLCBmb3JtYXRUYWdOYW1lcykpO1xuXG4gIGlmICh0YWdOYW1lcy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFRhZ3MgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeShmb3JtYXRUYWdOYW1lcykpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFRhZ3M6bWF0Y2hlZFRhZ3MnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRUYWdzID4gMCcpO1xuICB9XG5cbiAgaWYgKGZvcm1hdFN0YXJ0RGF0ZSkge1xuICAgIGZpbHRlcnMucHVzaChgcC5zdGFydERhdGUgPj0gJHtmb3JtYXRTdGFydERhdGV9YCk7XG4gICAgc29ydEJ5LnB1c2goJ3Auc3RhcnREYXRlIEFTQycpO1xuICB9IGVsc2Uge1xuICAgIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgfVxuXG4gIHNlbGVjdE9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCBJTiAke2xpdGVyYWwoQ09MTEVDVElPTlMuUE9TVFMpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJzLmpvaW4oJyAmJiAnKSl9XG4gICAgICBTT1JUICR7bGl0ZXJhbChzb3J0Qnkuam9pbignLCAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgncCcpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlVc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RzQnlVc2VyJztcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8UG9zdFR5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAge3VzZXJJZDogZm9ybWF0VXNlcklkLCB0eXBlLCBwcml2YWN5OiBQcml2YWN5TGV2ZWwuUFVCTElDLCBwYXJlbnRJZDogbnVsbH0sXG4gICAge1xuICAgICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnQVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tOiBsaW1pdC5zdGFydCwgdG86IGxpbWl0LnN0YXJ0ICsgbGltaXQubnVtfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVBhcmVudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0SWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0TGlzdEJ5UGFyZW50JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKHBvc3RJZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBwYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2tleSxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5ERUZBVUxUXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChncm91cElkICYmIHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5HUk9VUCkge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiXG4gICAgICAgICAgJHtidWlsZFVzZXJJbmZvUXVlcnkoJ3AudXNlcklkJyl9XG4gICAgICAgICAgJHtidWlsZFJlYWN0aW9uc1F1ZXJ5KCdwJyl9XG4gICAgICAgICAgRk9SIGdyb3VwIElOICR7Q09MTEVDVElPTlMuR1JPVVBTfVxuICAgICAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgICAgIEZPUiB1LCBlIElOIE9VVEJPVU5EIGdyb3VwLl9pZCAke0VER0VTLkhBU19DT05ORUNUSU9OfVxuICAgICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gXCIke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9IGVsc2UgaWYgKHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5QVUJMSUMpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIlxuICAgICAgICAgICR7YnVpbGRVc2VySW5mb1F1ZXJ5KCdwLnVzZXJJZCcpfVxuICAgICAgICAgICR7YnVpbGRSZWFjdGlvbnNRdWVyeSgncCcpfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcml2YWN5QXFsUXJ5KSB7XG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHByaXZhY3lBcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAgICAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByZXBhcmUgcG9zdCBkYXRhIGZvciBpbnNlcnRpb25cbmNvbnN0IHByZXBhcmVQb3N0RGF0YSA9IChcbiAgaW5wdXQ6IFBvc3RJbnB1dFR5cGUsXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBwZXJzb25hSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG5vdzogbnVtYmVyXG4pOiBQb3N0VHlwZSA9PiAoe1xuICBfaWQ6IGAke0NPTExFQ1RJT05TLlBPU1RTfS8ke3Bvc3RJZH1gLFxuICBfa2V5OiBwb3N0SWQsXG4gIGFkZGVkOiBub3csXG4gIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGlucHV0LmNvbnRlbnQgfHwgJycsIE1BWF9DT05URU5UX0xFTkdUSCkgfHwgJycsXG4gIGVuZERhdGU6IGlucHV0LmVuZERhdGUgPyBwYXJzZU51bShpbnB1dC5lbmREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gIGdyb3VwSWQ6IGlucHV0Lmdyb3VwSWQgPyBwYXJzZUlkKGlucHV0Lmdyb3VwSWQpIDogdW5kZWZpbmVkLFxuICBsYXRpdHVkZTogaW5wdXQubGF0aXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LmxhdGl0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbG9jYXRpb246IGlucHV0LmxvY2F0aW9uID8gcGFyc2VTdHJpbmcoaW5wdXQubG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gIGxvbmdpdHVkZTogaW5wdXQubG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sb25naXR1ZGUpIDogdW5kZWZpbmVkLFxuICBtYXhHdWVzdHNQZXJQZXJzb25hOiBpbnB1dC5tYXhHdWVzdHNQZXJQZXJzb25hICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5tYXhHdWVzdHNQZXJQZXJzb25hLCAzKSA6IHVuZGVmaW5lZCxcbiAgbW9kaWZpZWQ6IG5vdyxcbiAgbmFtZTogcGFyc2VTdHJpbmcoaW5wdXQubmFtZSB8fCAnJywgMTYwKSxcbiAgcGFyZW50SWQ6IGlucHV0LnBhcmVudElkID8gcGFyc2VJZChpbnB1dC5wYXJlbnRJZCkgOiB1bmRlZmluZWQsXG4gIHByaXZhY3k6IHBhcnNlVmFyQ2hhcihpbnB1dC5wcml2YWN5IHx8IFByaXZhY3lMZXZlbC5QVUJMSUMsIDE2KSxcbiAgcGVyc29uYUlkLFxuICBzdGFydERhdGU6IGlucHV0LnN0YXJ0RGF0ZSA/IHBhcnNlTnVtKGlucHV0LnN0YXJ0RGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICB0aWNrZXRDb3N0Q2VudHM6IGlucHV0LnRpY2tldENvc3RDZW50cyAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQudGlja2V0Q29zdENlbnRzLCAxMikgOiB1bmRlZmluZWQsXG4gIHR5cGU6IHBhcnNlQ2hhcihpbnB1dC50eXBlIHx8ICdkZWZhdWx0JywgMzIpLFxuICB1c2VySWQ6IHNlc3Npb25JZFxufSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgdGFncyBmb3IgcG9zdHNcbmNvbnN0IGhhbmRsZVBvc3RUYWdzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICB0YWdzOiBUYWdUeXBlW10sXG4gIHNlc3Npb25JZDogc3RyaW5nXG4pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBjb250ZW50VGFnTmFtZXMgPSBhd2FpdCBleHRyYWN0VGFncyhjb250ZW50IHx8ICcnKTtcblxuICBpZiAodGFncy5sZW5ndGggfHwgY29udGVudFRhZ05hbWVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHVzZXJUYWdzID0gKGF3YWl0IGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgdGFncy5tYXAoKHtuYW1lfSkgPT4gbmFtZSB8fCAnJykpKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKTtcbiAgICBjb25zdCBjb250ZW50VGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIGNvbnRlbnRUYWdOYW1lcyB8fCBbXSkpXG4gICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHVwZGF0ZVRhZ3NJbkl0ZW0oXG4gICAgICBjb250ZXh0LFxuICAgICAge1xuICAgICAgICBpdGVtRG9jSWQ6IHBvc3REb2NJZCxcbiAgICAgICAgdGFnczogWy4uLmNvbnRlbnRUYWdzLCAuLi51c2VyVGFnc11cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb250ZW50ID0gJycsXG4gICAgZW5kRGF0ZSxcbiAgICBncm91cElkID0gJycsXG4gICAgbG9jYXRpb24sXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlLFxuICAgIG5hbWUgPSAnJyxcbiAgICBwYXJlbnRJZCA9ICcnLFxuICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuUFVCTElDLFxuICAgIG1heEd1ZXN0c1BlclBlcnNvbmEsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCByZXNvbHZlZFBlcnNvbmFJZCA9IGF3YWl0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0KGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHByZXBhcmVQb3N0RGF0YShcbiAgICB7Y29udGVudCwgZW5kRGF0ZSwgZ3JvdXBJZCwgbG9jYXRpb24sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1heEd1ZXN0c1BlclBlcnNvbmEsIG5hbWUsIHBhcmVudElkLCBwcml2YWN5LCBwZXJzb25hSWQ6IHJlc29sdmVkUGVyc29uYUlkLCBzdGFydERhdGUsIHRhZ3MsIHRpY2tldENvc3RDZW50cywgdHlwZX0sXG4gICAgc2Vzc2lvbklkLFxuICAgIHJlc29sdmVkUGVyc29uYUlkLFxuICAgIHBvc3RJZCxcbiAgICBEYXRlLm5vdygpXG4gICk7XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgQ1JVRCBhZGRJdGVtIGZ1bmN0aW9uXG4gICAgY29uc3Qgc2F2ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGFkZEl0ZW08UG9zdFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlBPU1RTLCBpbnNlcnQpO1xuXG4gICAgY29uc3Qge19pZDogcG9zdERvY0lkfSA9IHNhdmVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHBvc3REb2NJZCwgaW5zZXJ0LmNvbnRlbnQgfHwgJycsIHRhZ3MsIHNlc3Npb25JZCk7XG5cbiAgICBpZiAodXBkYXRlZFRhZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zYXZlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzYXZlZFBvc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdDogUG9zdElucHV0VHlwZSk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVBvc3QnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZFBvc3QgPSBwYXJzZVBvc3QocG9zdCk7XG4gIGNvbnN0IHtcbiAgICBwb3N0SWQsXG4gICAgdGFncyA9IFtdXG4gIH0gPSBwYXJzZWRQb3N0O1xuXG4gIGlmICghcG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlOiBQb3N0VHlwZSA9IHtcbiAgICAuLi5wYXJzZWRQb3N0XG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgQ1JVRCB1cGRhdGVJdGVtIHdpdGggb3duZXJzaGlwIGNoZWNrXG4gICAgY29uc3QgdXBkYXRlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgdXBkYXRlSXRlbTxQb3N0VHlwZT4oXG4gICAgICBjb250ZXh0LFxuICAgICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAgICBwb3N0SWQsXG4gICAgICB1cGRhdGUsXG4gICAgICB7b3duZXJzaGlwOiB0cnVlfVxuICAgICk7XG5cbiAgICBjb25zdCB7X2lkOiB1cGRhdGVkUG9zdElkfSA9IHVwZGF0ZWRQb3N0O1xuICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gYXdhaXQgaGFuZGxlUG9zdFRhZ3MoY29udGV4dCwgdXBkYXRlZFBvc3RJZCwgdXBkYXRlLmNvbnRlbnQgfHwgJycsIHRhZ3MsIHNlc3Npb25JZCk7XG5cbiAgICBpZiAodXBkYXRlZFRhZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlUG9zdCc7XG4gIGlmICghcG9zdERvY0lkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG4gIGNvbnN0IGZvcm1hdFBvc3RJZCA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcblxuICBpZiAoIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGRlbGV0ZUl0ZW08UG9zdFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLlBPU1RTLCBmb3JtYXRQb3N0SWQsIHtcbiAgICAgIG93bmVyc2hpcDogdHJ1ZVxuICAgIH0pIHx8IHtfaWQ6IGZvcm1hdFBvc3RJZH0gYXMgUG9zdFR5cGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvc3RFZGdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0RG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIGVkZ2VUeXBlOiBzdHJpbmcgPSBFREdFUy5JU19QT1NURUQsXG4gIHByb3BzID0ge31cbik6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVBvc3RFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oZWRnZVR5cGUpO1xuICBpZiAoIXBvc3REb2NJZCB8fCAhaXRlbURvY0lkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG4gIGNvbnN0IGZvcm1hdFBvc3RJZCA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcbiAgY29uc3QgZm9ybWF0RG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1Eb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXREb2NJZCB8fCAhZm9ybWF0UG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgcG9zdEVkZ2UtJHtmb3JtYXRQb3N0SWR9LSR7Zm9ybWF0RG9jSWR9YCk7XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgX2Zyb206IGZvcm1hdFBvc3RJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmb3JtYXREb2NJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICAuLi5wcm9wc1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJwYXJzZVZhckNoYXIiLCJhcWwiLCJsaXRlcmFsIiwicGFyc2VQb3N0IiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRGlzdGFuY2VRdWVyeSIsImJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkiLCJidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSIsImJ1aWxkUmVhY3Rpb25zUXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImJ1aWxkVXNlckluZm9RdWVyeSIsImdldExpbWl0IiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJldmVudENhdGVnb3J5IiwicmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QiLCJjb250ZXh0IiwiZXhwbGljaXRQZXJzb25hSWQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvblVzZXJJZCIsInByb3ZpZGVkUGVyc29uYUlkIiwic2Vzc2lvblVzZXJJZFBhcnNlZCIsInVuZGVmaW5lZCIsInVzZXIiLCJVU0VSUyIsIl9rZXkiLCJwZXJzb25hSWQiLCJmaWx0ZXJCbG9ja2VkUG9zdHMiLCJwb3N0cyIsInZpc2liaWxpdHkiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicG9zdCIsIlN0cmluZyIsImZpbHRlciIsIl9wb3N0IiwiaW5kZXgiLCJwYXJzZVBvc3RPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXJ0RGF0ZSIsInRvIiwidHlwZSIsImxpbWl0IiwiRVZFTlRfUE9TVF9UWVBFIiwiUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUiLCJQT1NUUyIsIk9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSIsImdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSIsInJlYWN0aW9uTmFtZSIsIlBJTiIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJPUFRJT05BTF9GSUVMRF9IQU5ETEVSUyIsImhhc1JzdnAiLCJhY3RvckRvY0lkIiwicXVlcnkiLCJSU1ZQIiwiSEFTX1JFQUNUSU9OIiwib2JqZWN0IiwiaXNTYXZlZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInZpZXdDb3VudCIsIlZJRVciLCJnZXRQb3N0T3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZXNzaW9uSWQiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJoYW5kbGVyIiwiUEVSU09OQVMiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSIsInBvc3REb2NJZCIsImdyb3VwSWQiLCJwcml2YWN5Iiwic2VsZWN0UXVlcmllcyIsInNlbGVjdE9iamVjdHMiLCJHUk9VUCIsImpvaW4iLCJHUk9VUFMiLCJIQVNfQ09OTkVDVElPTiIsIlBVQkxJQyIsImdldFBvc3RCeUlkIiwicG9zdElkIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZGF0YWJhc2UiLCJhcWxRcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsIl9pZCIsIkRFRkFVTFQiLCJwcml2YWN5QXFsUXJ5IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldFBvc3RMaXN0QnlBcmVhIiwiZm9ybWF0TGF0aXR1ZGUiLCJmb3JtYXRMb25naXR1ZGUiLCJsZW5ndGgiLCJnZXRQb3N0TGlzdEJ5TGF0ZXN0IiwicGFyZW50SWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJ0aWNrZXRDb3N0Q2VudHMiLCJoYW5kbGVQb3N0VGFncyIsInRhZ3MiLCJjb250ZW50VGFnTmFtZXMiLCJ1c2VyVGFncyIsInRhZyIsInRhZ0J5IiwiY29udGVudFRhZ3MiLCJpdGVtRG9jSWQiLCJhZGRQb3N0IiwicmVzb2x2ZWRQZXJzb25hSWQiLCJpbnNlcnQiLCJEYXRlIiwic2F2ZWRQb3N0IiwidXBkYXRlZFRhZ3MiLCJ1cGRhdGVQb3N0IiwicGFyc2VkUG9zdCIsInZhbHVlIiwiSU5WQUxJRF9JRCIsInVwZGF0ZSIsInVwZGF0ZWRQb3N0Iiwib3duZXJzaGlwIiwidXBkYXRlZFBvc3RJZCIsImRlbGV0ZVBvc3QiLCJmb3JtYXRQb3N0SWQiLCJjcmVhdGVQb3N0RWRnZSIsImVkZ2VUeXBlIiwiSVNfUE9TVEVEIiwicHJvcHMiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJmb3JtYXREb2NJZCIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsInNhdmUiLCJyZXR1cm5OZXciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FDRUMsVUFBVSxFQUFF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
618
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0LCBwYXJzZVBvc3RQcm9wc30gZnJvbSAnLi4vYWRhcHRlcnMvcG9zdEFkYXB0ZXIuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVMsIFByaXZhY3lMZXZlbCwgUmVhY3Rpb25UeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGlzdGFuY2VRdWVyeSxcbiAgYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeSxcbiAgYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnksXG4gIGJ1aWxkUmVhY3Rpb25zUXVlcnksXG4gIGJ1aWxkVGFnc1F1ZXJ5LFxuICBidWlsZFVzZXJJbmZvUXVlcnksXG59IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7aXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtleHRyYWN0VGFncywgZ2V0VGFnTGlzdEJ5TmFtZSwgdXBkYXRlVGFnc0luSXRlbX0gZnJvbSAnLi90YWdzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7UHJpdmFjeUxldmVsVHlwZSwgUmVhY3Rpb25UeXBlVHlwZX0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ZpbGVzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtQb3N0SW5wdXRUeXBlLCBQb3N0T3B0aW9ucywgUG9zdFR5cGV9IGZyb20gJy4uL3R5cGVzL3Bvc3RzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzLnR5cGVzLmpzJztcblxuY29uc3QgTUFYX0NPTlRFTlRfTEVOR1RIID0gMTAwMDAwO1xuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwb3N0cyc7XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBleHBsaWNpdFBlcnNvbmFJZCA9ICcnXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwcm92aWRlZFBlcnNvbmFJZCA9IHBhcnNlSWQoZXhwbGljaXRQZXJzb25hSWQpO1xuXG4gIGlmKHByb3ZpZGVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVkUGVyc29uYUlkO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZFBhcnNlZCA9IHBhcnNlSWQoc2Vzc2lvblVzZXJJZCB8fCAnJyk7XG4gIGlmKCFzZXNzaW9uVXNlcklkUGFyc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRJdGVtQnk8e3BlcnNvbmFJZD86IHN0cmluZ30+KGNvbnRleHQsIENPTExFQ1RJT05TLlVTRVJTLCB7X2tleTogc2Vzc2lvblVzZXJJZFBhcnNlZH0pO1xuICByZXR1cm4gcGFyc2VJZCh1c2VyPy5wZXJzb25hSWQgfHwgJycpIHx8IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGZpbHRlckJsb2NrZWRQb3N0cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdHM6IFBvc3RUeXBlW10gPSBbXVxuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChwb3N0cy5tYXAoYXN5bmMgKHBvc3QpID0+IHtcbiAgICBjb25zdCBwZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwb3N0Py5wZXJzb25hSWQgfHwgJycpKTtcblxuICAgIGlmKCFwZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIHBvc3RzLmZpbHRlcigoX3Bvc3QsIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB7UHJpdmFjeUxldmVsLCBSZWFjdGlvblR5cGV9O1xuZXhwb3J0IHR5cGUge1ByaXZhY3lMZXZlbFR5cGUsIFJlYWN0aW9uVHlwZVR5cGV9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0T3B0aW9ucyA9IChvcHRpb25zOiBQb3N0T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICBsYXRpdHVkZSA9IDAsXG4gICAgbG9uZ2l0dWRlID0gMCxcbiAgICBzdGFydERhdGUgPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdwb3N0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMzIpLFxuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHN0YXJ0RGF0ZTogcGFyc2VOdW0oc3RhcnREYXRlLCAzMiksXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuY29uc3QgRVZFTlRfUE9TVF9UWVBFID0gJ2V2ZW50JztcbmNvbnN0IFBPU1RfUkVBQ1RJT05fSVRFTV9UWVBFID0gQ09MTEVDVElPTlMuUE9TVFM7XG5jb25zdCBPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEUgPSBgcC50eXBlID09IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgPyBcIiR7RVZFTlRfUE9TVF9UWVBFfVwiIDogXCIke1BPU1RfUkVBQ1RJT05fSVRFTV9UWVBFfVwiYDtcblxuY29uc3QgZ2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlID0gKHJlYWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IChcbiAgcmVhY3Rpb25OYW1lID09PSBSZWFjdGlvblR5cGUuUElOXG4gICAgPyAnaXNTYXZlZCdcbiAgICA6IGBoYXMke3JlYWN0aW9uTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3JlYWN0aW9uTmFtZS5zbGljZSgxKX1gXG4pO1xuXG4vLyBNYXAgb2Ygb3B0aW9uYWwgZmllbGQgaGFuZGxlcnNcbnR5cGUgRmllbGRIYW5kbGVyID0gKGFjdG9yRG9jSWQ6IHN0cmluZykgPT4ge3F1ZXJ5OiBzdHJpbmc7IG9iamVjdDogc3RyaW5nfTtcblxuY29uc3QgT1BUSU9OQUxfRklFTERfSEFORExFUlM6IFJlY29yZDxzdHJpbmcsIEZpZWxkSGFuZGxlcj4gPSB7XG4gIGhhc1JzdnA6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5SU1ZQKX0gPSBUT19CT09MKEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5SU1ZQfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2hhc1JzdnA6aGFzUnN2cCdcbiAgfSksXG4gIGlzU2F2ZWQ6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5QSU4pfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlBJTn1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSkgJiYgci5fZnJvbSA9PSBcIiR7YWN0b3JEb2NJZH1cIlxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgICkpYCxcbiAgICBvYmplY3Q6ICdpc1NhdmVkOmlzU2F2ZWQnXG4gIH0pLFxuICByZWFjdGlvbnM6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncmVhY3Rpb25zOnJlYWN0aW9ucydcbiAgfSksXG4gIHJzdnBDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5SU1ZQfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncnN2cENvdW50OnJzdnBDb3VudCdcbiAgfSksXG4gIHZpZXdDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5WSUVXfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlZJRVd9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAndmlld0NvdW50OnZpZXdDb3VudCdcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWxGaWVsZHMgPSAoXG4gIGZpZWxkczogc3RyaW5nW10gPSBbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgPSAnJyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJ1xuKSA9PlxuICAoZmllbGRzIHx8IFtdKS5yZWR1Y2UoKHNlbGVjdHM6IHtvYmplY3RzOiBzdHJpbmdbXSwgcXVlcmllczogc3RyaW5nW119LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IE9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTW2ZpZWxkXTtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgY29uc3QgYWN0b3JEb2NJZCA9IHBlcnNvbmFJZFxuICAgICAgICA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BhcnNlSWQocGVyc29uYUlkKX1gXG4gICAgICAgIDogYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gICAgICBjb25zdCB7cXVlcnksIG9iamVjdH0gPSBoYW5kbGVyKGFjdG9yRG9jSWQpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdHM7XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHByaXZhY3kgZmlsdGVyIHF1ZXJ5XG5jb25zdCBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSA9IChcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogc3RyaW5nLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgc2VsZWN0UXVlcmllczogc3RyaW5nW10sXG4gIHNlbGVjdE9iamVjdHM6IHN0cmluZ1tdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9IGVsc2UgaWYgKHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5QVUJMSUMpIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdEJ5SWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcbiAgY29uc3Qge3R5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfSAmJiBwLnR5cGUgPT0gJHt0eXBlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbiAgICBjb25zdCB7XG4gICAgICBfaWQ6IHBvc3REb2NJZCxcbiAgICAgIHBlcnNvbmFJZCxcbiAgICAgIHVzZXJJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICBpZihwZXJzb25hSWQgJiYgYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIFVzZXIgb3ducyB0aGUgcG9zdCwgcmV0dXJuIGRpcmVjdGx5XG4gICAgaWYgKHVzZXJJZCA9PT0gc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gcG9zdDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBwcml2YWN5IGFuZCBidWlsZCBhcHByb3ByaWF0ZSBxdWVyeVxuICAgIGNvbnN0IHByaXZhY3lBcWxRcnkgPSBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeShcbiAgICAgIHBvc3REb2NJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5LFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgc2VsZWN0UXVlcmllcyxcbiAgICAgIHNlbGVjdE9iamVjdHNcbiAgICApO1xuXG4gICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUFyZWEgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxhdGl0dWRlOiBudW1iZXIsXG4gIGxvbmdpdHVkZTogbnVtYmVyLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeUFyZWEnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLnByaXZhY3kgPT0gJHtQcml2YWN5TGV2ZWwuUFVCTElDfSAmJiBwLnBhcmVudElkID09IG51bGxcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgU09SVCBkaXN0YW5jZSwgcC5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUxhdGVzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxQb3N0VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICB7dHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYgKHJlYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkocmVhY3Rpb25zKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zOm1hdGNoZWRSZWFjdGlvbnMnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTil9XG4gICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwICR7bGl0ZXJhbChFREdFUy5JU19UQUdHRUQpfVxuICAgICAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSkgPiAwICYmIFBPU0lUSU9OKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSwgcmVhY3Rpb24ubmFtZSlcbiAgICAgICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkfSlcbiAgICAgIClcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRUYWdOYW1lczogc3RyaW5nW10gPSB0YWdOYW1lcy5tYXAoKHRhZ05hbWUpID0+IHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIC8vIFVzZSBidWlsZFRhZ3NRdWVyeSBoZWxwZXIgd2l0aCBtYXRjaGVkIHRhZ3NcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkVGFnc1F1ZXJ5KCdwJywgZm9ybWF0VGFnTmFtZXMpKTtcblxuICBpZiAodGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkoZm9ybWF0VGFnTmFtZXMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VXNlcic7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt1c2VySWQ6IGZvcm1hdFVzZXJJZCwgdHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICAgIH1cbiAgKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlQYXJlbnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdExpc3RCeVBhcmVudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9rZXksXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIlxuICAgICAgICAgICR7YnVpbGRVc2VySW5mb1F1ZXJ5KCdwLnVzZXJJZCcpfVxuICAgICAgICAgICR7YnVpbGRSZWFjdGlvbnNRdWVyeSgncCcpfVxuICAgICAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfSBlbHNlIGlmIChwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuUFVCTElDKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgICAgICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmVwYXJlIHBvc3QgZGF0YSBmb3IgaW5zZXJ0aW9uXG5jb25zdCBwcmVwYXJlUG9zdERhdGEgPSAoXG4gIGlucHV0OiBQb3N0SW5wdXRUeXBlLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBub3c6IG51bWJlclxuKTogUG9zdFR5cGUgPT4gKHtcbiAgX2lkOiBgJHtDT0xMRUNUSU9OUy5QT1NUU30vJHtwb3N0SWR9YCxcbiAgX2tleTogcG9zdElkLFxuICBhZGRlZDogbm93LFxuICBjb250ZW50OiBwYXJzZVN0cmluZyhpbnB1dC5jb250ZW50IHx8ICcnLCBNQVhfQ09OVEVOVF9MRU5HVEgpIHx8ICcnLFxuICBlbmREYXRlOiBpbnB1dC5lbmREYXRlID8gcGFyc2VOdW0oaW5wdXQuZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICBncm91cElkOiBpbnB1dC5ncm91cElkID8gcGFyc2VJZChpbnB1dC5ncm91cElkKSA6IHVuZGVmaW5lZCxcbiAgbGF0aXR1ZGU6IGlucHV0LmxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gIGxvY2F0aW9uOiBpbnB1dC5sb2NhdGlvbiA/IHBhcnNlU3RyaW5nKGlucHV0LmxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICBsb25naXR1ZGU6IGlucHV0LmxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubG9uZ2l0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbWF4R3Vlc3RzUGVyUGVyc29uYTogaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSwgMykgOiB1bmRlZmluZWQsXG4gIG1vZGlmaWVkOiBub3csXG4gIG5hbWU6IHBhcnNlU3RyaW5nKGlucHV0Lm5hbWUgfHwgJycsIDE2MCksXG4gIHBhcmVudElkOiBpbnB1dC5wYXJlbnRJZCA/IHBhcnNlSWQoaW5wdXQucGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICBwcml2YWN5OiBwYXJzZVZhckNoYXIoaW5wdXQucHJpdmFjeSB8fCBQcml2YWN5TGV2ZWwuUFVCTElDLCAxNiksXG4gIHByb3BzOiBwYXJzZVBvc3RQcm9wcyhpbnB1dC5wcm9wcyksXG4gIHBlcnNvbmFJZCxcbiAgc3RhcnREYXRlOiBpbnB1dC5zdGFydERhdGUgPyBwYXJzZU51bShpbnB1dC5zdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgdGlja2V0Q29zdENlbnRzOiBpbnB1dC50aWNrZXRDb3N0Q2VudHMgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LnRpY2tldENvc3RDZW50cywgMTIpIDogdW5kZWZpbmVkLFxuICB0eXBlOiBwYXJzZUNoYXIoaW5wdXQudHlwZSB8fCAnZGVmYXVsdCcsIDMyKSxcbiAgdXNlcklkOiBzZXNzaW9uSWRcbn0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHRhZ3MgZm9yIHBvc3RzXG5jb25zdCBoYW5kbGVQb3N0VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdGFnczogVGFnVHlwZVtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgY29udGVudFRhZ05hbWVzID0gYXdhaXQgZXh0cmFjdFRhZ3MoY29udGVudCB8fCAnJyk7XG5cbiAgaWYgKHRhZ3MubGVuZ3RoIHx8IGNvbnRlbnRUYWdOYW1lcy5sZW5ndGgpIHtcbiAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUgfHwgJycpKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSk7XG4gICAgY29uc3QgY29udGVudFRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMgfHwgW10pKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcblxuICAgIHJldHVybiBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgIHRhZ3M6IFsuLi5jb250ZW50VGFncywgLi4udXNlclRhZ3NdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udGVudCA9ICcnLFxuICAgIGVuZERhdGUsXG4gICAgZ3JvdXBJZCA9ICcnLFxuICAgIGxvY2F0aW9uLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvbmdpdHVkZSxcbiAgICBuYW1lID0gJycsXG4gICAgcGFyZW50SWQgPSAnJyxcbiAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLlBVQkxJQyxcbiAgICBwcm9wcyA9IHt9LFxuICAgIG1heEd1ZXN0c1BlclBlcnNvbmEsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCByZXNvbHZlZFBlcnNvbmFJZCA9IGF3YWl0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0KGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHByZXBhcmVQb3N0RGF0YShcbiAgICB7Y29udGVudCwgZW5kRGF0ZSwgZ3JvdXBJZCwgbG9jYXRpb24sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1heEd1ZXN0c1BlclBlcnNvbmEsIG5hbWUsIHBhcmVudElkLCBwcml2YWN5LCBwcm9wcywgcGVyc29uYUlkOiByZXNvbHZlZFBlcnNvbmFJZCwgc3RhcnREYXRlLCB0YWdzLCB0aWNrZXRDb3N0Q2VudHMsIHR5cGV9LFxuICAgIHNlc3Npb25JZCxcbiAgICByZXNvbHZlZFBlcnNvbmFJZCxcbiAgICBwb3N0SWQsXG4gICAgRGF0ZS5ub3coKVxuICApO1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgYWRkSXRlbSBmdW5jdGlvblxuICAgIGNvbnN0IHNhdmVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCBhZGRJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgaW5zZXJ0KTtcblxuICAgIGNvbnN0IHtfaWQ6IHBvc3REb2NJZH0gPSBzYXZlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCBwb3N0RG9jSWQsIGluc2VydC5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRQb3N0ID0gcGFyc2VQb3N0KHBvc3QpO1xuICBjb25zdCB7XG4gICAgcG9zdElkLFxuICAgIHRhZ3MgPSBbXVxuICB9ID0gcGFyc2VkUG9zdDtcblxuICBpZiAoIXBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZTogUG9zdFR5cGUgPSB7XG4gICAgLi4ucGFyc2VkUG9zdFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgdXBkYXRlSXRlbSB3aXRoIG93bmVyc2hpcCBjaGVja1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IHVwZGF0ZUl0ZW08UG9zdFR5cGU+KFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgICAgcG9zdElkLFxuICAgICAgdXBkYXRlLFxuICAgICAge293bmVyc2hpcDogdHJ1ZX1cbiAgICApO1xuXG4gICAgY29uc3Qge19pZDogdXBkYXRlZFBvc3RJZH0gPSB1cGRhdGVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHVwZGF0ZWRQb3N0SWQsIHVwZGF0ZS5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZyk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVBvc3QnO1xuICBpZiAoIXBvc3REb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBkZWxldGVJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgZm9ybWF0UG9zdElkLCB7XG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KSB8fCB7X2lkOiBmb3JtYXRQb3N0SWR9IGFzIFBvc3RUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3N0RWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGl0ZW1Eb2NJZDogc3RyaW5nLFxuICBlZGdlVHlwZTogc3RyaW5nID0gRURHRVMuSVNfUE9TVEVELFxuICBwcm9wcyA9IHt9XG4pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVQb3N0RWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKGVkZ2VUeXBlKTtcbiAgaWYgKCFwb3N0RG9jSWQgfHwgIWl0ZW1Eb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG4gIGNvbnN0IGZvcm1hdERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtRG9jSWQpO1xuXG4gIGlmICghZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBvc3RFZGdlLSR7Zm9ybWF0UG9zdElkfS0ke2Zvcm1hdERvY0lkfWApO1xuICBjb25zdCBlZGdlID0ge1xuICAgIF9mcm9tOiBmb3JtYXRQb3N0SWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0RG9jSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgLi4ucHJvcHNcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsInBhcnNlUG9zdCIsInBhcnNlUG9zdFByb3BzIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRGlzdGFuY2VRdWVyeSIsImJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkiLCJidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSIsImJ1aWxkUmVhY3Rpb25zUXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImJ1aWxkVXNlckluZm9RdWVyeSIsImdldExpbWl0IiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJldmVudENhdGVnb3J5IiwicmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QiLCJjb250ZXh0IiwiZXhwbGljaXRQZXJzb25hSWQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvblVzZXJJZCIsInByb3ZpZGVkUGVyc29uYUlkIiwic2Vzc2lvblVzZXJJZFBhcnNlZCIsInVuZGVmaW5lZCIsInVzZXIiLCJVU0VSUyIsIl9rZXkiLCJwZXJzb25hSWQiLCJmaWx0ZXJCbG9ja2VkUG9zdHMiLCJwb3N0cyIsInZpc2liaWxpdHkiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicG9zdCIsIlN0cmluZyIsImZpbHRlciIsIl9wb3N0IiwiaW5kZXgiLCJwYXJzZVBvc3RPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXJ0RGF0ZSIsInRvIiwidHlwZSIsImxpbWl0IiwiRVZFTlRfUE9TVF9UWVBFIiwiUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUiLCJQT1NUUyIsIk9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSIsImdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSIsInJlYWN0aW9uTmFtZSIsIlBJTiIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJPUFRJT05BTF9GSUVMRF9IQU5ETEVSUyIsImhhc1JzdnAiLCJhY3RvckRvY0lkIiwicXVlcnkiLCJSU1ZQIiwiSEFTX1JFQUNUSU9OIiwib2JqZWN0IiwiaXNTYXZlZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInZpZXdDb3VudCIsIlZJRVciLCJnZXRQb3N0T3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZXNzaW9uSWQiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJoYW5kbGVyIiwiUEVSU09OQVMiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSIsInBvc3REb2NJZCIsImdyb3VwSWQiLCJwcml2YWN5Iiwic2VsZWN0UXVlcmllcyIsInNlbGVjdE9iamVjdHMiLCJHUk9VUCIsImpvaW4iLCJHUk9VUFMiLCJIQVNfQ09OTkVDVElPTiIsIlBVQkxJQyIsImdldFBvc3RCeUlkIiwicG9zdElkIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZGF0YWJhc2UiLCJhcWxRcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsIl9pZCIsIkRFRkFVTFQiLCJwcml2YWN5QXFsUXJ5IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldFBvc3RMaXN0QnlBcmVhIiwiZm9ybWF0TGF0aXR1ZGUiLCJmb3JtYXRMb25naXR1ZGUiLCJsZW5ndGgiLCJnZXRQb3N0TGlzdEJ5TGF0ZXN0IiwicGFyZW50SWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJwcm9wcyIsInRpY2tldENvc3RDZW50cyIsImhhbmRsZVBvc3RUYWdzIiwidGFncyIsImNvbnRlbnRUYWdOYW1lcyIsInVzZXJUYWdzIiwidGFnIiwidGFnQnkiLCJjb250ZW50VGFncyIsIml0ZW1Eb2NJZCIsImFkZFBvc3QiLCJyZXNvbHZlZFBlcnNvbmFJZCIsImluc2VydCIsIkRhdGUiLCJzYXZlZFBvc3QiLCJ1cGRhdGVkVGFncyIsInVwZGF0ZVBvc3QiLCJwYXJzZWRQb3N0IiwidmFsdWUiLCJJTlZBTElEX0lEIiwidXBkYXRlIiwidXBkYXRlZFBvc3QiLCJvd25lcnNoaXAiLCJ1cGRhdGVkUG9zdElkIiwiZGVsZXRlUG9zdCIsImZvcm1hdFBvc3RJZCIsImNyZWF0ZVBvc3RFZGdlIiwiZWRnZVR5cGUiLCJJU19QT1NURUQiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJmb3JtYXREb2NJZCIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90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
@@ -20,10 +20,10 @@ interface SelectAccumulator {
20
20
  }
21
21
  export declare const getUserOptionalFields: (fields?: string[]) => SelectAccumulator;
22
22
  export declare const parseUserOptions: (options?: UserOptions) => {
23
- limit: import("../types/arangodb.types.js").ArangoDbLimit;
24
23
  from?: number;
25
24
  to?: number;
26
25
  username?: string;
26
+ limit: import("../types/arangodb.types.js").ArangoDbLimit;
27
27
  };
28
28
  export declare const addUser: (context: ApiContext, user: UserInput) => Promise<UserType | null>;
29
29
  export declare const updateUser: (context: ApiContext, user: UserType) => Promise<UserType>;
@@ -35,7 +35,7 @@ export declare const resetPassword: (context: ApiContext, { code, user }: {
35
35
  export declare const sendVerificationEmail: (context: ApiContext, user: UserType) => Promise<boolean>;
36
36
  export declare const confirmCode: (context: ApiContext, { code, type, value }: {
37
37
  code: number;
38
- type: "sms" | "email";
38
+ type: 'sms' | 'email';
39
39
  value: string;
40
40
  }) => Promise<boolean>;
41
41
  export declare const deleteUser: (context: ApiContext, user: UserType) => Promise<UserType>;
@@ -1,4 +1,5 @@
1
1
  import type { PostType } from '../types/posts.types.js';
2
+ export declare const parsePostProps: (props: unknown) => Record<string, unknown>;
2
3
  export declare class PostValidationError extends Error {
3
4
  field?: string;
4
5
  constructor(message: string, field?: string);
@@ -7,6 +7,8 @@ import { parseFile } from './fileAdapter.js';
7
7
  import { parseReaktorContent, parseReaktorDate, parseReaktorType } from './reaktorAdapter.js';
8
8
  import { parseTag } from './tagAdapter.js';
9
9
  const MAX_CONTENT_LENGTH = 100000;
10
+ const PostPropsSchema = z.record(z.string(), z.json());
11
+ export const parsePostProps = (props)=>PostPropsSchema.parse(props);
10
12
  export class PostValidationError extends Error {
11
13
  field;
12
14
  constructor(message, field){
@@ -26,6 +28,7 @@ const PostInputSchema = z.object({
26
28
  name: z.string().optional(),
27
29
  parentId: z.string().optional(),
28
30
  privacy: z.string().optional(),
31
+ props: PostPropsSchema.optional(),
29
32
  personaId: z.string().optional(),
30
33
  startDate: z.number().optional(),
31
34
  tags: z.array(z.any()).optional(),
@@ -82,7 +85,7 @@ const parsePostTags = (tags)=>{
82
85
  return parsedTags;
83
86
  };
84
87
  const performPostTransformation = (post)=>{
85
- const { _id, _key, content, endDate, files, groupId, id, latitude, location, longitude, name, parentId, postId, privacy, maxGuestsPerPersona, personaId, tags, ticketCostCents, type, userId } = post;
88
+ const { _id, _key, content, endDate, files, groupId, id, latitude, location, longitude, name, parentId, postId, privacy, props, maxGuestsPerPersona, personaId, tags, ticketCostCents, type, userId } = post;
86
89
  const transformed = removeEmptyKeys({
87
90
  ...parseDocument(post),
88
91
  ...content && {
@@ -121,6 +124,9 @@ const performPostTransformation = (post)=>{
121
124
  ...privacy && {
122
125
  privacy: parseVarChar(privacy, 16)
123
126
  },
127
+ ...props && {
128
+ props: parsePostProps(props)
129
+ },
124
130
  ...maxGuestsPerPersona !== undefined && {
125
131
  maxGuestsPerPersona: parseNum(maxGuestsPerPersona, 3)
126
132
  },
@@ -143,4 +149,4 @@ const performPostTransformation = (post)=>{
143
149
  return transformed;
144
150
  };
145
151
 
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL3Bvc3RBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5pbXBvcnQge3BhcnNlRG9jdW1lbnR9IGZyb20gJy4vYXJhbmdvQWRhcHRlci5qcyc7XG5pbXBvcnQge3BhcnNlRmlsZX0gZnJvbSAnLi9maWxlQWRhcHRlci5qcyc7XG5pbXBvcnQge1xuICBwYXJzZVJlYWt0b3JDb250ZW50LFxuICBwYXJzZVJlYWt0b3JEYXRlLFxuICBwYXJzZVJlYWt0b3JUeXBlXG59IGZyb20gJy4vcmVha3RvckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtwYXJzZVRhZ30gZnJvbSAnLi90YWdBZGFwdGVyLmpzJztcblxuaW1wb3J0IHR5cGUge1Bvc3RUeXBlfSBmcm9tICcuLi90eXBlcy9wb3N0cy50eXBlcy5qcyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSCA9IDEwMDAwMDtcblxuZXhwb3J0IGNsYXNzIFBvc3RWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1Bvc3RWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFBvc3RJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlbmREYXRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGZpbGVzOiB6LmFycmF5KHouYW55KCkpLm9wdGlvbmFsKCksXG4gIGdyb3VwSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcG9zdElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxhdGl0dWRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGxvY2F0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxvbmdpdHVkZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHBhcmVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByaXZhY3k6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcGVyc29uYUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXJ0RGF0ZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0YWdzOiB6LmFycmF5KHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlcklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9yZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX29sZFJldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfZnJvbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfdG86IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkucGFzc3Rocm91Z2goKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUG9zdElucHV0ID0gKHBvc3Q6IHVua25vd24pOiBQb3N0VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gUG9zdElucHV0U2NoZW1hLnBhcnNlKHBvc3QpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgUG9zdFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gZXJyb3IuaXNzdWVzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyk7XG4gICAgICB0aHJvdyBuZXcgUG9zdFZhbGlkYXRpb25FcnJvcihgUG9zdCB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRQb3N0T3V0cHV0ID0gKHBvc3Q6IFBvc3RUeXBlKTogUG9zdFR5cGUgPT4gcG9zdDtcblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdCA9IChwb3N0OiBQb3N0VHlwZSk6IFBvc3RUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGVyZm9ybVBvc3RUcmFuc2Zvcm1hdGlvbihwb3N0KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgUG9zdFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBQb3N0VmFsaWRhdGlvbkVycm9yKGBQb3N0IHBhcnNpbmcgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICB9XG59O1xuXG5jb25zdCBwYXJzZVBvc3RGaWxlcyA9IChmaWxlcz86IHVua25vd25bXSk6IHVua25vd25bXSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKCFBcnJheS5pc0FycmF5KGZpbGVzKSB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkRmlsZXM6IHVua25vd25bXSA9IFtdO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBwYXJzZWRGaWxlcy5wdXNoKHBhcnNlRmlsZShmaWxlc1tpXSBhcyBhbnkpKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWRGaWxlcztcbn07XG5cbmNvbnN0IHBhcnNlUG9zdFRhZ3MgPSAodGFncz86IHVua25vd25bXSk6IHVua25vd25bXSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKCFBcnJheS5pc0FycmF5KHRhZ3MpIHx8IHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFRhZ3M6IHVua25vd25bXSA9IFtdO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHBhcnNlZFRhZ3MucHVzaChwYXJzZVRhZyh0YWdzW2ldIGFzIGFueSkpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFRhZ3M7XG59O1xuXG5jb25zdCBwZXJmb3JtUG9zdFRyYW5zZm9ybWF0aW9uID0gKHBvc3Q6IFBvc3RUeXBlKTogUG9zdFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgY29udGVudCxcbiAgICBlbmREYXRlLFxuICAgIGZpbGVzLFxuICAgIGdyb3VwSWQsXG4gICAgaWQsXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9jYXRpb24sXG4gICAgbG9uZ2l0dWRlLFxuICAgIG5hbWUsXG4gICAgcGFyZW50SWQsXG4gICAgcG9zdElkLFxuICAgIHByaXZhY3ksXG4gICAgbWF4R3Vlc3RzUGVyUGVyc29uYSxcbiAgICBwZXJzb25hSWQsXG4gICAgdGFncyxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSxcbiAgICB1c2VySWRcbiAgfSA9IHBvc3Q7XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSByZW1vdmVFbXB0eUtleXMoe1xuICAgIC4uLnBhcnNlRG9jdW1lbnQocG9zdCksXG4gICAgLi4uKGNvbnRlbnQgJiYge2NvbnRlbnQ6IHBhcnNlUmVha3RvckNvbnRlbnQoY29udGVudCwgTUFYX0NPTlRFTlRfTEVOR1RIKX0pLFxuICAgIC4uLihlbmREYXRlICE9PSB1bmRlZmluZWQgJiYge2VuZERhdGU6IHBhcnNlUmVha3RvckRhdGUoZW5kRGF0ZSl9KSxcbiAgICAuLi4oZmlsZXM/Lmxlbmd0aCAmJiB7ZmlsZXM6IHBhcnNlUG9zdEZpbGVzKGZpbGVzIGFzIHVua25vd25bXSl9KSxcbiAgICAuLi4oZ3JvdXBJZCAmJiB7Z3JvdXBJZDogcGFyc2VJZChncm91cElkKX0pLFxuICAgIC4uLihsYXRpdHVkZSAhPT0gdW5kZWZpbmVkICYmIHtsYXRpdHVkZTogcGFyc2VOdW0obGF0aXR1ZGUsIDE1KX0pLFxuICAgIC4uLihsb2NhdGlvbiAmJiB7bG9jYXRpb246IHBhcnNlU3RyaW5nKGxvY2F0aW9uLCAxNjApfSksXG4gICAgLi4uKGxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkICYmIHtsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMTUpfSksXG4gICAgLi4uKG5hbWUgJiYge25hbWU6IHBhcnNlU3RyaW5nKG5hbWUsIDE2MCl9KSxcbiAgICAuLi4ocGFyZW50SWQgJiYge3BhcmVudElkOiBwYXJzZUlkKHBhcmVudElkKX0pLFxuICAgIC4uLigoX2lkIHx8IGlkIHx8IF9rZXkgfHwgcG9zdElkKSAmJiB7aWQ6IHBhcnNlQXJhbmdvSWQoX2lkIHx8IGlkIHx8IGBwb3N0cy8ke19rZXkgfHwgcG9zdElkIHx8ICcnfWApfSksXG4gICAgLi4uKChfa2V5IHx8IHBvc3RJZCkgJiYge3Bvc3RJZDogcGFyc2VJZChfa2V5IHx8IHBvc3RJZCB8fCAnJyl9KSxcbiAgICAuLi4ocHJpdmFjeSAmJiB7cHJpdmFjeTogcGFyc2VWYXJDaGFyKHByaXZhY3ksIDE2KX0pLFxuICAgIC4uLihtYXhHdWVzdHNQZXJQZXJzb25hICE9PSB1bmRlZmluZWQgJiYge21heEd1ZXN0c1BlclBlcnNvbmE6IHBhcnNlTnVtKG1heEd1ZXN0c1BlclBlcnNvbmEsIDMpfSksXG4gICAgLi4uKHBlcnNvbmFJZCAmJiB7cGVyc29uYUlkOiBwYXJzZUlkKHBlcnNvbmFJZCl9KSxcbiAgICAuLi4odGFncz8ubGVuZ3RoICYmIHt0YWdzOiBwYXJzZVBvc3RUYWdzKHRhZ3MgYXMgdW5rbm93bltdKX0pLFxuICAgIC4uLih0aWNrZXRDb3N0Q2VudHMgIT09IHVuZGVmaW5lZCAmJiB7dGlja2V0Q29zdENlbnRzOiBwYXJzZU51bSh0aWNrZXRDb3N0Q2VudHMsIDEyKX0pLFxuICAgIC4uLih0eXBlICYmIHt0eXBlOiBwYXJzZVJlYWt0b3JUeXBlKHR5cGUpfSksXG4gICAgLi4uKHVzZXJJZCAmJiB7dXNlcklkOiBwYXJzZUlkKHVzZXJJZCl9KVxuICB9KTtcblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsInoiLCJyZW1vdmVFbXB0eUtleXMiLCJwYXJzZURvY3VtZW50IiwicGFyc2VGaWxlIiwicGFyc2VSZWFrdG9yQ29udGVudCIsInBhcnNlUmVha3RvckRhdGUiLCJwYXJzZVJlYWt0b3JUeXBlIiwicGFyc2VUYWciLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJQb3N0VmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiUG9zdElucHV0U2NoZW1hIiwib2JqZWN0IiwiY29udGVudCIsInN0cmluZyIsIm9wdGlvbmFsIiwiZW5kRGF0ZSIsIm51bWJlciIsImZpbGVzIiwiYXJyYXkiLCJhbnkiLCJncm91cElkIiwicG9zdElkIiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInBhcmVudElkIiwicHJpdmFjeSIsInBlcnNvbmFJZCIsInN0YXJ0RGF0ZSIsInRhZ3MiLCJ0eXBlIiwidXNlcklkIiwiX2lkIiwiX2tleSIsIl9yZXYiLCJfb2xkUmV2IiwiX2Zyb20iLCJfdG8iLCJwYXNzdGhyb3VnaCIsInZhbGlkYXRlUG9zdElucHV0IiwicG9zdCIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0UG9zdE91dHB1dCIsInBhcnNlUG9zdCIsInBlcmZvcm1Qb3N0VHJhbnNmb3JtYXRpb24iLCJwYXJzZVBvc3RGaWxlcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInVuZGVmaW5lZCIsInBhcnNlZEZpbGVzIiwiaSIsInB1c2giLCJwYXJzZVBvc3RUYWdzIiwicGFyc2VkVGFncyIsImlkIiwibWF4R3Vlc3RzUGVyUGVyc29uYSIsInRpY2tldENvc3RDZW50cyIsInRyYW5zZm9ybWVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLGFBQWEsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksUUFBTywrQkFBK0I7QUFDL0YsU0FBUUMsQ0FBQyxRQUFPLE1BQU07QUFFdEIsU0FBUUMsZUFBZSxRQUFPLDJCQUEyQjtBQUN6RCxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBQ2pELFNBQVFDLFNBQVMsUUFBTyxtQkFBbUI7QUFDM0MsU0FDRUMsbUJBQW1CLEVBQ25CQyxnQkFBZ0IsRUFDaEJDLGdCQUFnQixRQUNYLHNCQUFzQjtBQUM3QixTQUFRQyxRQUFRLFFBQU8sa0JBQWtCO0FBSXpDLE1BQU1DLHFCQUFxQjtBQUUzQixPQUFPLE1BQU1DLDRCQUE0QkM7O0lBQ3ZDLFlBQVlDLE9BQWUsRUFBRSxBQUFPQyxLQUFjLENBQUU7UUFDbEQsS0FBSyxDQUFDRCxlQUQ0QkMsUUFBQUE7UUFFbEMsSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDZDtBQUNGO0FBRUEsTUFBTUMsa0JBQWtCZCxFQUFFZSxNQUFNLENBQUM7SUFDL0JDLFNBQVNoQixFQUFF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
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL3Bvc3RBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5pbXBvcnQge3BhcnNlRG9jdW1lbnR9IGZyb20gJy4vYXJhbmdvQWRhcHRlci5qcyc7XG5pbXBvcnQge3BhcnNlRmlsZX0gZnJvbSAnLi9maWxlQWRhcHRlci5qcyc7XG5pbXBvcnQge1xuICBwYXJzZVJlYWt0b3JDb250ZW50LFxuICBwYXJzZVJlYWt0b3JEYXRlLFxuICBwYXJzZVJlYWt0b3JUeXBlXG59IGZyb20gJy4vcmVha3RvckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtwYXJzZVRhZ30gZnJvbSAnLi90YWdBZGFwdGVyLmpzJztcblxuaW1wb3J0IHR5cGUge1Bvc3RUeXBlfSBmcm9tICcuLi90eXBlcy9wb3N0cy50eXBlcy5qcyc7XG5cbmNvbnN0IE1BWF9DT05URU5UX0xFTkdUSCA9IDEwMDAwMDtcbmNvbnN0IFBvc3RQcm9wc1NjaGVtYSA9IHoucmVjb3JkKHouc3RyaW5nKCksIHouanNvbigpKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdFByb3BzID0gKHByb3BzOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gUG9zdFByb3BzU2NoZW1hLnBhcnNlKHByb3BzKTtcblxuZXhwb3J0IGNsYXNzIFBvc3RWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1Bvc3RWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFBvc3RJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlbmREYXRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGZpbGVzOiB6LmFycmF5KHouYW55KCkpLm9wdGlvbmFsKCksXG4gIGdyb3VwSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcG9zdElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxhdGl0dWRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGxvY2F0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxvbmdpdHVkZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHBhcmVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByaXZhY3k6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvcHM6IFBvc3RQcm9wc1NjaGVtYS5vcHRpb25hbCgpLFxuICBwZXJzb25hSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhcnREYXRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRhZ3M6IHouYXJyYXkoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VySWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3Jldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfb2xkUmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9mcm9tOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF90bzogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5wYXNzdGhyb3VnaCgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQb3N0SW5wdXQgPSAocG9zdDogdW5rbm93bik6IFBvc3RUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBQb3N0SW5wdXRTY2hlbWEucGFyc2UocG9zdCk7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBQb3N0VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBQb3N0VmFsaWRhdGlvbkVycm9yKGBQb3N0IHZhbGlkYXRpb24gZmFpbGVkOiAke2ZpZWxkRXJyb3JzfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFBvc3RPdXRwdXQgPSAocG9zdDogUG9zdFR5cGUpOiBQb3N0VHlwZSA9PiBwb3N0O1xuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0ID0gKHBvc3Q6IFBvc3RUeXBlKTogUG9zdFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwZXJmb3JtUG9zdFRyYW5zZm9ybWF0aW9uKHBvc3QpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBQb3N0VmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBvc3RWYWxpZGF0aW9uRXJyb3IoYFBvc3QgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBhcnNlUG9zdEZpbGVzID0gKGZpbGVzPzogdW5rbm93bltdKTogdW5rbm93bltdIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYoIUFycmF5LmlzQXJyYXkoZmlsZXMpIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYXJzZWRGaWxlczogdW5rbm93bltdID0gW107XG4gIGZvcihsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHBhcnNlZEZpbGVzLnB1c2gocGFyc2VGaWxlKGZpbGVzW2ldIGFzIGFueSkpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZEZpbGVzO1xufTtcblxuY29uc3QgcGFyc2VQb3N0VGFncyA9ICh0YWdzPzogdW5rbm93bltdKTogdW5rbm93bltdIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYoIUFycmF5LmlzQXJyYXkodGFncykgfHwgdGFncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkVGFnczogdW5rbm93bltdID0gW107XG4gIGZvcihsZXQgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgcGFyc2VkVGFncy5wdXNoKHBhcnNlVGFnKHRhZ3NbaV0gYXMgYW55KSk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkVGFncztcbn07XG5cbmNvbnN0IHBlcmZvcm1Qb3N0VHJhbnNmb3JtYXRpb24gPSAocG9zdDogUG9zdFR5cGUpOiBQb3N0VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBjb250ZW50LFxuICAgIGVuZERhdGUsXG4gICAgZmlsZXMsXG4gICAgZ3JvdXBJZCxcbiAgICBpZCxcbiAgICBsYXRpdHVkZSxcbiAgICBsb2NhdGlvbixcbiAgICBsb25naXR1ZGUsXG4gICAgbmFtZSxcbiAgICBwYXJlbnRJZCxcbiAgICBwb3N0SWQsXG4gICAgcHJpdmFjeSxcbiAgICBwcm9wcyxcbiAgICBtYXhHdWVzdHNQZXJQZXJzb25hLFxuICAgIHBlcnNvbmFJZCxcbiAgICB0YWdzLFxuICAgIHRpY2tldENvc3RDZW50cyxcbiAgICB0eXBlLFxuICAgIHVzZXJJZFxuICB9ID0gcG9zdDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHJlbW92ZUVtcHR5S2V5cyh7XG4gICAgLi4ucGFyc2VEb2N1bWVudChwb3N0KSxcbiAgICAuLi4oY29udGVudCAmJiB7Y29udGVudDogcGFyc2VSZWFrdG9yQ29udGVudChjb250ZW50LCBNQVhfQ09OVEVOVF9MRU5HVEgpfSksXG4gICAgLi4uKGVuZERhdGUgIT09IHVuZGVmaW5lZCAmJiB7ZW5kRGF0ZTogcGFyc2VSZWFrdG9yRGF0ZShlbmREYXRlKX0pLFxuICAgIC4uLihmaWxlcz8ubGVuZ3RoICYmIHtmaWxlczogcGFyc2VQb3N0RmlsZXMoZmlsZXMgYXMgdW5rbm93bltdKX0pLFxuICAgIC4uLihncm91cElkICYmIHtncm91cElkOiBwYXJzZUlkKGdyb3VwSWQpfSksXG4gICAgLi4uKGxhdGl0dWRlICE9PSB1bmRlZmluZWQgJiYge2xhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMTUpfSksXG4gICAgLi4uKGxvY2F0aW9uICYmIHtsb2NhdGlvbjogcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCl9KSxcbiAgICAuLi4obG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgJiYge2xvbmdpdHVkZTogcGFyc2VOdW0obG9uZ2l0dWRlLCAxNSl9KSxcbiAgICAuLi4obmFtZSAmJiB7bmFtZTogcGFyc2VTdHJpbmcobmFtZSwgMTYwKX0pLFxuICAgIC4uLihwYXJlbnRJZCAmJiB7cGFyZW50SWQ6IHBhcnNlSWQocGFyZW50SWQpfSksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCBwb3N0SWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYHBvc3RzLyR7X2tleSB8fCBwb3N0SWQgfHwgJyd9YCl9KSxcbiAgICAuLi4oKF9rZXkgfHwgcG9zdElkKSAmJiB7cG9zdElkOiBwYXJzZUlkKF9rZXkgfHwgcG9zdElkIHx8ICcnKX0pLFxuICAgIC4uLihwcml2YWN5ICYmIHtwcml2YWN5OiBwYXJzZVZhckNoYXIocHJpdmFjeSwgMTYpfSksXG4gICAgLi4uKHByb3BzICYmIHtwcm9wczogcGFyc2VQb3N0UHJvcHMocHJvcHMpfSksXG4gICAgLi4uKG1heEd1ZXN0c1BlclBlcnNvbmEgIT09IHVuZGVmaW5lZCAmJiB7bWF4R3Vlc3RzUGVyUGVyc29uYTogcGFyc2VOdW0obWF4R3Vlc3RzUGVyUGVyc29uYSwgMyl9KSxcbiAgICAuLi4ocGVyc29uYUlkICYmIHtwZXJzb25hSWQ6IHBhcnNlSWQocGVyc29uYUlkKX0pLFxuICAgIC4uLih0YWdzPy5sZW5ndGggJiYge3RhZ3M6IHBhcnNlUG9zdFRhZ3ModGFncyBhcyB1bmtub3duW10pfSksXG4gICAgLi4uKHRpY2tldENvc3RDZW50cyAhPT0gdW5kZWZpbmVkICYmIHt0aWNrZXRDb3N0Q2VudHM6IHBhcnNlTnVtKHRpY2tldENvc3RDZW50cywgMTIpfSksXG4gICAgLi4uKHR5cGUgJiYge3R5cGU6IHBhcnNlUmVha3RvclR5cGUodHlwZSl9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH0pO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsInBhcnNlRG9jdW1lbnQiLCJwYXJzZUZpbGUiLCJwYXJzZVJlYWt0b3JDb250ZW50IiwicGFyc2VSZWFrdG9yRGF0ZSIsInBhcnNlUmVha3RvclR5cGUiLCJwYXJzZVRhZyIsIk1BWF9DT05URU5UX0xFTkdUSCIsIlBvc3RQcm9wc1NjaGVtYSIsInJlY29yZCIsInN0cmluZyIsImpzb24iLCJwYXJzZVBvc3RQcm9wcyIsInByb3BzIiwicGFyc2UiLCJQb3N0VmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiUG9zdElucHV0U2NoZW1hIiwib2JqZWN0IiwiY29udGVudCIsIm9wdGlvbmFsIiwiZW5kRGF0ZSIsIm51bWJlciIsImZpbGVzIiwiYXJyYXkiLCJhbnkiLCJncm91cElkIiwicG9zdElkIiwibGF0aXR1ZGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsInBhcmVudElkIiwicHJpdmFjeSIsInBlcnNvbmFJZCIsInN0YXJ0RGF0ZSIsInRhZ3MiLCJ0eXBlIiwidXNlcklkIiwiX2lkIiwiX2tleSIsIl9yZXYiLCJfb2xkUmV2IiwiX2Zyb20iLCJfdG8iLCJwYXNzdGhyb3VnaCIsInZhbGlkYXRlUG9zdElucHV0IiwicG9zdCIsInZhbGlkYXRlZCIsImVycm9yIiwiWm9kRXJyb3IiLCJmaWVsZEVycm9ycyIsImlzc3VlcyIsIm1hcCIsImUiLCJwYXRoIiwiam9pbiIsImZvcm1hdFBvc3RPdXRwdXQiLCJwYXJzZVBvc3QiLCJwZXJmb3JtUG9zdFRyYW5zZm9ybWF0aW9uIiwicGFyc2VQb3N0RmlsZXMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJwYXJzZWRGaWxlcyIsImkiLCJwdXNoIiwicGFyc2VQb3N0VGFncyIsInBhcnNlZFRhZ3MiLCJpZCIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJ0aWNrZXRDb3N0Q2VudHMiLCJ0cmFuc2Zvcm1lZCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxhQUFhLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLFFBQU8sK0JBQStCO0FBQy9GLFNBQVFDLENBQUMsUUFBTyxNQUFNO0FBRXRCLFNBQVFDLGVBQWUsUUFBTywyQkFBMkI7QUFDekQsU0FBUUMsYUFBYSxRQUFPLHFC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
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ /**
6
+ * ArangoDB Collection Names
7
+ * Centralized constants for all database collections
8
+ */
9
+ export declare const COLLECTIONS: {
10
+ readonly APPS: 'apps';
11
+ readonly CONVERSATIONS: 'conversations';
12
+ readonly CUSTOMER_NOTIFICATIONS: 'customerNotifications';
13
+ readonly CUSTOMER_ORDERS: 'customerOrders';
14
+ readonly FILES: 'files';
15
+ readonly GROUPS: 'groups';
16
+ readonly IMAGES: 'images';
17
+ readonly MAILING_LISTS: 'mailingLists';
18
+ readonly MESSAGES: 'messages';
19
+ readonly POSTS: 'posts';
20
+ readonly RUM_LOGS: 'rumLogs';
21
+ readonly PERSONAS: 'personas';
22
+ readonly SHOPIFY_PRODUCTS: 'shopifyProducts';
23
+ readonly SHOPIFY_WEBHOOK_EVENTS: 'shopifyWebhookEvents';
24
+ readonly SUPPORT_TICKET_EVENTS: 'supportTicketEvents';
25
+ readonly SUPPORT_TICKET_MESSAGES: 'supportTicketMessages';
26
+ readonly SUPPORT_TICKETS: 'supportTickets';
27
+ readonly TAGS: 'tags';
28
+ readonly USERS: 'users';
29
+ readonly VIDEOS: 'videos';
30
+ };
31
+ /**
32
+ * ArangoDB Edge Collection Names
33
+ * Centralized constants for all edge collections
34
+ */
35
+ export declare const EDGES: {
36
+ readonly HAS_CONNECTION: 'hasConnection';
37
+ readonly HAS_CONVERSATION: 'hasConversation';
38
+ readonly HAS_CUSTOMER_NOTIFICATION: 'hasCustomerNotification';
39
+ readonly HAS_CUSTOMER_ORDER: 'hasCustomerOrder';
40
+ readonly HAS_FILE: 'hasFile';
41
+ readonly HAS_MEDIA: 'hasMedia';
42
+ readonly HAS_MAILING_LIST: 'hasMailingList';
43
+ readonly HAS_PERSONA: 'hasPersona';
44
+ readonly HAS_PURCHASED_PRODUCT: 'hasPurchasedProduct';
45
+ readonly HAS_REACTION: 'hasReaction';
46
+ readonly HAS_SUPPORT_TICKET: 'hasSupportTicket';
47
+ readonly HAS_SUPPORT_TICKET_EVENT: 'hasSupportTicketEvent';
48
+ readonly HAS_SUPPORT_TICKET_MESSAGE: 'hasSupportTicketMessage';
49
+ readonly IS_POSTED: 'isPosted';
50
+ readonly IS_TAGGED: 'isTagged';
51
+ };
52
+ /**
53
+ * Privacy Level Constants
54
+ * Used across posts, groups, and other content types
55
+ */
56
+ export declare const PrivacyLevel: {
57
+ readonly PUBLIC: 'public';
58
+ readonly PRIVATE: 'private';
59
+ readonly GROUP: 'group';
60
+ readonly DEFAULT: 'default';
61
+ };
62
+ export type PrivacyLevelType = typeof PrivacyLevel[keyof typeof PrivacyLevel];
63
+ /**
64
+ * Reaction Type Constants
65
+ * Standard reaction types used throughout the application
66
+ */
67
+ export declare const ReactionType: {
68
+ readonly LIKE: 'like';
69
+ readonly RSVP: 'rsvp';
70
+ readonly PIN: 'pin';
71
+ readonly VIEW: 'view';
72
+ readonly DISLIKE: 'dislike';
73
+ };
74
+ export type ReactionTypeType = typeof ReactionType[keyof typeof ReactionType];
75
+ /**
76
+ * Connection Type Constants
77
+ * Types of connections between users and groups
78
+ */
79
+ export declare const ConnectionType: {
80
+ readonly ADMIN: 'admin';
81
+ readonly MEMBER: 'member';
82
+ readonly FOLLOWER: 'follower';
83
+ readonly FOLLOWING: 'following';
84
+ readonly BLOCKED: 'blocked';
85
+ };
86
+ export type ConnectionTypeType = typeof ConnectionType[keyof typeof ConnectionType];
@@ -4,5 +4,5 @@ export declare const mockConversation: {
4
4
  id: string;
5
5
  added: number;
6
6
  userId: string;
7
- users: any[];
7
+ users: undefined[];
8
8
  };
@@ -0,0 +1 @@
1
+ export declare const contentMutations: import("graphql-compose").ObjectTypeComposer<unknown, any>;
@@ -10,18 +10,18 @@ export const contentMutations = schemaComposer.createObjectTC({
10
10
  args: {
11
11
  content: contentInputType
12
12
  },
13
- resolve: (context, { content })=>addContent(context, content),
13
+ resolve: (_source, { content }, context)=>addContent(context, content),
14
14
  type: contentType
15
15
  },
16
16
  updateContent: {
17
17
  args: {
18
18
  content: contentInputType
19
19
  },
20
- resolve: (context, { content })=>updateContent(context, content),
20
+ resolve: (_source, { content }, context)=>updateContent(context, content),
21
21
  type: contentType
22
22
  }
23
23
  },
24
24
  name: 'ContentMutations'
25
25
  });
26
26
 
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL211dGF0aW9ucy9jb250ZW50L2NvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5cbmltcG9ydCB7YWRkQ29udGVudCwgdXBkYXRlQ29udGVudH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9jb250ZW50LmpzJztcbmltcG9ydCB7Y29udGVudElucHV0VHlwZSwgY29udGVudFR5cGV9IGZyb20gJy4uLy4uL29iamVjdFR5cGVzL2NvbnRlbnQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjb250ZW50TXV0YXRpb25zID0gc2NoZW1hQ29tcG9zZXIuY3JlYXRlT2JqZWN0VEMoe1xuICBmaWVsZHM6IHtcbiAgICBhZGRDb250ZW50OiB7XG4gICAgICBhcmdzOiB7XG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRJbnB1dFR5cGVcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoY29udGV4dDogQXBpQ29udGV4dCwge2NvbnRlbnR9KSA9PiBhZGRDb250ZW50KGNvbnRleHQsIGNvbnRlbnQpLFxuICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICB9LFxuICAgIHVwZGF0ZUNvbnRlbnQ6IHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgY29udGVudDogY29udGVudElucHV0VHlwZVxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IChjb250ZXh0OiBBcGlDb250ZXh0LCB7Y29udGVudH0pID0+IHVwZGF0ZUNvbnRlbnQoY29udGV4dCwgY29udGVudCksXG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH1cbiAgfSxcbiAgbmFtZTogJ0NvbnRlbnRNdXRhdGlvbnMnXG59KTsiXSwibmFtZXMiOlsic2NoZW1hQ29tcG9zZXIiLCJhZGRDb250ZW50IiwidXBkYXRlQ29udGVudCIsImNvbnRlbnRJbnB1dFR5cGUiLCJjb250ZW50VHlwZSIsImNvbnRlbnRNdXRhdGlvbnMiLCJjcmVhdGVPYmplY3RUQyIsImZpZWxkcyIsImFyZ3MiLCJjb250ZW50IiwicmVzb2x2ZSIsImNvbnRleHQiLCJ0eXBlIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsY0FBYyxRQUFPLGtCQUFrQjtBQUUvQyxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsUUFBTywyQkFBMkI7QUFDbkUsU0FBUUMsZ0JBQWdCLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFJM0UsT0FBTyxNQUFNQyxtQkFBbUJMLGVBQWVNLGNBQWMsQ0FBQztJQUM1REMsUUFBUTtRQUNOTixZQUFZO1lBQ1ZPLE1BQU07Z0JBQ0pDLFNBQVNOO1lBQ1g7WUFDQU8sU0FBUyxDQUFDQyxTQUFxQixFQUFDRixPQUFPLEVBQUMsR0FBS1IsV0FBV1UsU0FBU0Y7WUFDakVHLE1BQU1SO1FBQ1I7UUFDQUYsZUFBZTtZQUNiTSxNQUFNO2dCQUNKQyxTQUFTTjtZQUNYO1lBQ0FPLFNBQVMsQ0FBQ0MsU0FBcUIsRUFBQ0YsT0FBTyxFQUFDLEdBQUtQLGNBQWNTLFNBQVNGO1lBQ3BFRyxNQUFNUjtRQUNSO0lBQ0Y7SUFDQVMsTUFBTTtBQUNSLEdBQUcifQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL211dGF0aW9ucy9jb250ZW50L2NvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5cbmltcG9ydCB7YWRkQ29udGVudCwgdXBkYXRlQ29udGVudH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9jb250ZW50LmpzJztcbmltcG9ydCB7Y29udGVudElucHV0VHlwZSwgY29udGVudFR5cGV9IGZyb20gJy4uLy4uL29iamVjdFR5cGVzL2NvbnRlbnQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjb250ZW50TXV0YXRpb25zID0gc2NoZW1hQ29tcG9zZXIuY3JlYXRlT2JqZWN0VEMoe1xuICBmaWVsZHM6IHtcbiAgICBhZGRDb250ZW50OiB7XG4gICAgICBhcmdzOiB7XG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRJbnB1dFR5cGVcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoX3NvdXJjZTogdW5rbm93biwge2NvbnRlbnR9LCBjb250ZXh0OiBBcGlDb250ZXh0KSA9PiBhZGRDb250ZW50KGNvbnRleHQsIGNvbnRlbnQpLFxuICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICB9LFxuICAgIHVwZGF0ZUNvbnRlbnQ6IHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgY29udGVudDogY29udGVudElucHV0VHlwZVxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IChfc291cmNlOiB1bmtub3duLCB7Y29udGVudH0sIGNvbnRleHQ6IEFwaUNvbnRleHQpID0+IHVwZGF0ZUNvbnRlbnQoY29udGV4dCwgY29udGVudCksXG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH1cbiAgfSxcbiAgbmFtZTogJ0NvbnRlbnRNdXRhdGlvbnMnXG59KTtcbiJdLCJuYW1lcyI6WyJzY2hlbWFDb21wb3NlciIsImFkZENvbnRlbnQiLCJ1cGRhdGVDb250ZW50IiwiY29udGVudElucHV0VHlwZSIsImNvbnRlbnRUeXBlIiwiY29udGVudE11dGF0aW9ucyIsImNyZWF0ZU9iamVjdFRDIiwiZmllbGRzIiwiYXJncyIsImNvbnRlbnQiLCJyZXNvbHZlIiwiX3NvdXJjZSIsImNvbnRleHQiLCJ0eXBlIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsY0FBYyxRQUFPLGtCQUFrQjtBQUUvQyxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsUUFBTywyQkFBMkI7QUFDbkUsU0FBUUMsZ0JBQWdCLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFJM0UsT0FBTyxNQUFNQyxtQkFBbUJMLGVBQWVNLGNBQWMsQ0FBQztJQUM1REMsUUFBUTtRQUNOTixZQUFZO1lBQ1ZPLE1BQU07Z0JBQ0pDLFNBQVNOO1lBQ1g7WUFDQU8sU0FBUyxDQUFDQyxTQUFrQixFQUFDRixPQUFPLEVBQUMsRUFBRUcsVUFBd0JYLFdBQVdXLFNBQVNIO1lBQ25GSSxNQUFNVDtRQUNSO1FBQ0FGLGVBQWU7WUFDYk0sTUFBTTtnQkFDSkMsU0FBU047WUFDWDtZQUNBTyxTQUFTLENBQUNDLFNBQWtCLEVBQUNGLE9BQU8sRUFBQyxFQUFFRyxVQUF3QlYsY0FBY1UsU0FBU0g7WUFDdEZJLE1BQU1UO1FBQ1I7SUFDRjtJQUNBVSxNQUFNO0FBQ1IsR0FBRyJ9
@@ -0,0 +1 @@
1
+ export declare const eventMutations: import("graphql-compose").ObjectTypeComposer<unknown, any>;