@nlabs/reaktor 1.19.0 → 1.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +14 -0
  2. package/lib/actions/alfredFaq.js +1 -1
  3. package/lib/actions/analytics.js +1 -1
  4. package/lib/actions/apps.js +1 -1
  5. package/lib/actions/connections.js +1 -1
  6. package/lib/actions/content.js +1 -1
  7. package/lib/actions/contentGeneration.js +1 -1
  8. package/lib/actions/contentGenerationErrors.js +1 -1
  9. package/lib/actions/conversations.js +1 -1
  10. package/lib/actions/crm.js +1 -1
  11. package/lib/actions/crud.js +1 -1
  12. package/lib/actions/databaseAccounts.js +1 -1
  13. package/lib/actions/databaseProvisioningLease.js +1 -1
  14. package/lib/actions/dynamodb.js +1 -1
  15. package/lib/actions/email.js +1 -1
  16. package/lib/actions/files.js +1 -1
  17. package/lib/actions/flags.js +1 -1
  18. package/lib/actions/geminiVideo.js +1 -1
  19. package/lib/actions/groups.js +1 -1
  20. package/lib/actions/higgsfield.js +1 -1
  21. package/lib/actions/imageGeneration.js +1 -1
  22. package/lib/actions/images.js +1 -1
  23. package/lib/actions/index.js +1 -1
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +1 -1
  26. package/lib/actions/messages.js +1 -1
  27. package/lib/actions/notifications.js +1 -1
  28. package/lib/actions/ollamaGeneration.js +1 -1
  29. package/lib/actions/openaiResponseSession.js +1 -1
  30. package/lib/actions/payments.js +1 -1
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/phoneSupport.js +1 -1
  33. package/lib/actions/posts.js +1 -1
  34. package/lib/actions/query.js +1 -1
  35. package/lib/actions/reactions.js +1 -1
  36. package/lib/actions/rum.js +1 -1
  37. package/lib/actions/s3.d.ts +10 -7
  38. package/lib/actions/s3.js +59 -14
  39. package/lib/actions/search.js +1 -1
  40. package/lib/actions/sms.js +1 -1
  41. package/lib/actions/statistics.js +1 -1
  42. package/lib/actions/subscriptions.js +1 -1
  43. package/lib/actions/tags.js +1 -1
  44. package/lib/actions/users.js +1 -1
  45. package/lib/actions/videoGeneration.js +1 -1
  46. package/lib/actions/videos.js +1 -1
  47. package/lib/adapters/arangoAdapter.js +1 -1
  48. package/lib/adapters/contentAdapter.js +1 -1
  49. package/lib/adapters/fileAdapter.js +1 -1
  50. package/lib/adapters/geminiGenerationAdapter.js +1 -1
  51. package/lib/adapters/higgsfieldAdapter.js +1 -1
  52. package/lib/adapters/higgsfieldModelCatalog.js +1 -1
  53. package/lib/adapters/higgsfieldModels.js +1 -1
  54. package/lib/adapters/imageAdapter.js +1 -1
  55. package/lib/adapters/imageGenerationAdapter.js +1 -1
  56. package/lib/adapters/index.js +1 -1
  57. package/lib/adapters/messageAdapter.js +1 -1
  58. package/lib/adapters/postAdapter.js +1 -1
  59. package/lib/adapters/reaktorAdapter.js +1 -1
  60. package/lib/adapters/tagAdapter.js +1 -1
  61. package/lib/adapters/userAdapter.js +1 -1
  62. package/lib/assistant/core.js +1 -1
  63. package/lib/assistant/faq.js +1 -1
  64. package/lib/assistant/faqCore.js +1 -1
  65. package/lib/assistant/index.js +1 -1
  66. package/lib/assistant/service.js +1 -1
  67. package/lib/config.js +1 -1
  68. package/lib/constants/collections.js +1 -1
  69. package/lib/durableChat/conversations.js +1 -1
  70. package/lib/durableChat/errors.js +1 -1
  71. package/lib/durableChat/events.js +1 -1
  72. package/lib/durableChat/index.js +1 -1
  73. package/lib/durableChat/membership.js +1 -1
  74. package/lib/durableChat/messageTypes.js +1 -1
  75. package/lib/durableChat/messages.js +1 -1
  76. package/lib/durableChat/transaction.js +1 -1
  77. package/lib/durableChat/types.js +1 -1
  78. package/lib/handlers/graphqlHandler.js +1 -1
  79. package/lib/index.js +1 -1
  80. package/lib/lambdas/actions/websockets.js +1 -1
  81. package/lib/lambdas/authorizer.js +1 -1
  82. package/lib/lambdas/connection.js +1 -1
  83. package/lib/lambdas/utils/message.js +1 -1
  84. package/lib/lambdas/utils/websocket.js +1 -1
  85. package/lib/mocks/conversation.js +1 -1
  86. package/lib/mocks/file.js +1 -1
  87. package/lib/mocks/group.js +1 -1
  88. package/lib/mocks/image.js +1 -1
  89. package/lib/mocks/post.js +1 -1
  90. package/lib/mocks/tag.js +1 -1
  91. package/lib/mocks/user.js +1 -1
  92. package/lib/mocks/video.js +1 -1
  93. package/lib/mutations/analytics/analytics.js +1 -1
  94. package/lib/mutations/content/content.js +1 -1
  95. package/lib/mutations/crm/crm.js +1 -1
  96. package/lib/mutations/events/events.js +1 -1
  97. package/lib/mutations/flags/flags.js +1 -1
  98. package/lib/mutations/groups/groups.js +1 -1
  99. package/lib/mutations/higgsfield/higgsfield.js +1 -1
  100. package/lib/mutations/images/images.js +1 -1
  101. package/lib/mutations/index.js +1 -1
  102. package/lib/mutations/locations/locations.js +1 -1
  103. package/lib/mutations/messages/messages.js +1 -1
  104. package/lib/mutations/personas/personas.js +1 -1
  105. package/lib/mutations/posts/posts.js +1 -1
  106. package/lib/mutations/reactions/reactions.js +1 -1
  107. package/lib/mutations/rum/rum.js +1 -1
  108. package/lib/mutations/statistics/statistics.js +1 -1
  109. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  110. package/lib/mutations/tags/tags.js +1 -1
  111. package/lib/mutations/users/users.js +1 -1
  112. package/lib/mutations/videos/videos.js +1 -1
  113. package/lib/nativePush/graphql.js +1 -1
  114. package/lib/nativePush/index.js +1 -1
  115. package/lib/nativePush/migrations.js +1 -1
  116. package/lib/nativePush/nativePushContract.fixture.js +1 -1
  117. package/lib/nativePush/payload.js +1 -1
  118. package/lib/nativePush/repository.js +1 -1
  119. package/lib/nativePush/service.js +1 -1
  120. package/lib/nativePush/snsProvider.js +1 -1
  121. package/lib/nativePush/types.js +1 -1
  122. package/lib/objectTypes/analytics.js +1 -1
  123. package/lib/objectTypes/app.js +1 -1
  124. package/lib/objectTypes/bankAccount.js +1 -1
  125. package/lib/objectTypes/connection.js +1 -1
  126. package/lib/objectTypes/content.js +1 -1
  127. package/lib/objectTypes/contentGeneration.js +1 -1
  128. package/lib/objectTypes/conversation.js +1 -1
  129. package/lib/objectTypes/creditCard.js +1 -1
  130. package/lib/objectTypes/crm.js +1 -1
  131. package/lib/objectTypes/document.js +1 -1
  132. package/lib/objectTypes/error.js +1 -1
  133. package/lib/objectTypes/event.js +1 -1
  134. package/lib/objectTypes/external.js +1 -1
  135. package/lib/objectTypes/file.js +1 -1
  136. package/lib/objectTypes/filter.js +1 -1
  137. package/lib/objectTypes/flag.js +1 -1
  138. package/lib/objectTypes/group.js +1 -1
  139. package/lib/objectTypes/higgsfield.js +1 -1
  140. package/lib/objectTypes/iapSubscription.js +1 -1
  141. package/lib/objectTypes/image.js +1 -1
  142. package/lib/objectTypes/imageGeneration.js +1 -1
  143. package/lib/objectTypes/index.js +1 -1
  144. package/lib/objectTypes/location.js +1 -1
  145. package/lib/objectTypes/message.js +1 -1
  146. package/lib/objectTypes/passcode.js +1 -1
  147. package/lib/objectTypes/persona.js +1 -1
  148. package/lib/objectTypes/plan.js +1 -1
  149. package/lib/objectTypes/post.js +1 -1
  150. package/lib/objectTypes/query.js +1 -1
  151. package/lib/objectTypes/reaction.js +1 -1
  152. package/lib/objectTypes/relation.js +1 -1
  153. package/lib/objectTypes/rum.js +1 -1
  154. package/lib/objectTypes/search.js +1 -1
  155. package/lib/objectTypes/statistics.js +1 -1
  156. package/lib/objectTypes/subscription.js +1 -1
  157. package/lib/objectTypes/tag.js +1 -1
  158. package/lib/objectTypes/user.js +1 -1
  159. package/lib/objectTypes/video.js +1 -1
  160. package/lib/objectTypes/videoGeneration.js +1 -1
  161. package/lib/organizations/accountLifecycle.js +1 -1
  162. package/lib/organizations/authorization.js +1 -1
  163. package/lib/organizations/billing.js +1 -1
  164. package/lib/organizations/billingProvider.js +1 -1
  165. package/lib/organizations/billingUpdates.js +1 -1
  166. package/lib/organizations/index.js +1 -1
  167. package/lib/organizations/mail.js +1 -1
  168. package/lib/organizations/memberDirectory.js +1 -1
  169. package/lib/organizations/membership.js +1 -1
  170. package/lib/organizations/passwordRecovery.js +1 -1
  171. package/lib/organizations/plans.js +1 -1
  172. package/lib/organizations/providerPagination.js +1 -1
  173. package/lib/organizations/reconciliation.js +1 -1
  174. package/lib/organizations/signup.js +1 -1
  175. package/lib/organizations/store.js +1 -1
  176. package/lib/organizations/types.js +1 -1
  177. package/lib/organizations/verification.js +1 -1
  178. package/lib/queries/analytics/analytics.js +1 -1
  179. package/lib/queries/content/content.js +1 -1
  180. package/lib/queries/crm/crm.js +1 -1
  181. package/lib/queries/events/events.js +1 -1
  182. package/lib/queries/flags/flags.js +1 -1
  183. package/lib/queries/groups/groups.js +1 -1
  184. package/lib/queries/higgsfield/higgsfield.js +1 -1
  185. package/lib/queries/images/images.js +1 -1
  186. package/lib/queries/index.js +1 -1
  187. package/lib/queries/locations/locations.js +1 -1
  188. package/lib/queries/messages/messages.js +1 -1
  189. package/lib/queries/personas/personas.js +1 -1
  190. package/lib/queries/posts/posts.js +1 -1
  191. package/lib/queries/query/query.js +1 -1
  192. package/lib/queries/reactions/reactions.js +1 -1
  193. package/lib/queries/statistics/statistics.js +1 -1
  194. package/lib/queries/subscriptions/subscriptions.js +1 -1
  195. package/lib/queries/tags/tags.js +1 -1
  196. package/lib/queries/users/users.js +1 -1
  197. package/lib/queries/videos/videos.js +1 -1
  198. package/lib/templates/email/layout.js +1 -1
  199. package/lib/templates/email/passwordForgot.js +1 -1
  200. package/lib/templates/email/passwordRecovery.js +1 -1
  201. package/lib/templates/email/verifyEmail.js +1 -1
  202. package/lib/templates/email/welcome.js +1 -1
  203. package/lib/templates/sms/passwordForgot.js +1 -1
  204. package/lib/templates/sms/passwordRecovery.js +1 -1
  205. package/lib/templates/sms/verifyEmail.js +1 -1
  206. package/lib/templates/sms/verifyPhone.js +1 -1
  207. package/lib/templates/sms/welcome.js +1 -1
  208. package/lib/types/analytics.types.js +1 -1
  209. package/lib/types/apps.types.js +1 -1
  210. package/lib/types/arangodb.types.js +1 -1
  211. package/lib/types/auth.types.js +1 -1
  212. package/lib/types/connections.types.js +1 -1
  213. package/lib/types/content.types.js +1 -1
  214. package/lib/types/conversations.types.js +1 -1
  215. package/lib/types/crm.types.js +1 -1
  216. package/lib/types/databaseCredentials.types.js +1 -1
  217. package/lib/types/email.types.js +1 -1
  218. package/lib/types/error.types.js +1 -1
  219. package/lib/types/files.types.js +1 -1
  220. package/lib/types/flags.types.js +1 -1
  221. package/lib/types/google.types.js +1 -1
  222. package/lib/types/groups.types.js +1 -1
  223. package/lib/types/images.types.js +1 -1
  224. package/lib/types/index.js +1 -1
  225. package/lib/types/locations.types.js +1 -1
  226. package/lib/types/messages.types.js +1 -1
  227. package/lib/types/notifications.types.js +1 -1
  228. package/lib/types/payments.types.js +1 -1
  229. package/lib/types/personas.types.js +1 -1
  230. package/lib/types/posts.types.js +1 -1
  231. package/lib/types/rum.types.js +1 -1
  232. package/lib/types/statistics.types.js +1 -1
  233. package/lib/types/tags.types.js +1 -1
  234. package/lib/types/users.types.js +1 -1
  235. package/lib/types/videos.types.js +1 -1
  236. package/lib/types/websockets.types.js +1 -1
  237. package/lib/upload.js +1 -1
  238. package/lib/utils/adapterUtils.js +1 -1
  239. package/lib/utils/analyticsUtils.js +1 -1
  240. package/lib/utils/appContext.js +1 -1
  241. package/lib/utils/aqlHelpers.js +1 -1
  242. package/lib/utils/arangodbUtils.js +1 -1
  243. package/lib/utils/authUtils.js +1 -1
  244. package/lib/utils/awsUtils.js +1 -1
  245. package/lib/utils/collectionRegistry.js +1 -1
  246. package/lib/utils/contextUtils.js +1 -1
  247. package/lib/utils/databaseCredentials.js +1 -1
  248. package/lib/utils/dbI18n.example.js +1 -1
  249. package/lib/utils/dbI18n.js +1 -1
  250. package/lib/utils/generationCallback.js +1 -1
  251. package/lib/utils/googleTranslate.js +1 -1
  252. package/lib/utils/graphqlUtils.js +1 -1
  253. package/lib/utils/imageUtils.js +1 -1
  254. package/lib/utils/index.js +1 -1
  255. package/lib/utils/languageDetection.js +1 -1
  256. package/lib/utils/localeUtils.example.js +1 -1
  257. package/lib/utils/localeUtils.js +1 -1
  258. package/lib/utils/mediaAccess.js +1 -1
  259. package/lib/utils/middlewareUtils.js +1 -1
  260. package/lib/utils/nodeRealtime.js +1 -1
  261. package/lib/utils/opaqueToken.js +1 -1
  262. package/lib/utils/queryBuilder.js +1 -1
  263. package/lib/utils/schemaUtils.js +1 -1
  264. package/lib/utils/secretDatabase.js +1 -1
  265. package/lib/utils/sessionUtils.js +1 -1
  266. package/lib/utils/stripeUtils.js +1 -1
  267. package/lib/utils/stripeUtils.ts.bak +1 -1
  268. package/lib/utils/templateUtils.js +1 -1
  269. package/lib/utils/testUtils.js +1 -1
  270. package/lib/utils/translationQueue.example.js +1 -1
  271. package/lib/utils/translationQueue.js +1 -1
  272. package/lib/videoProcessing.js +1 -1
  273. package/package.json +1 -1
@@ -209,4 +209,4 @@ export const searchContent = async (context, options = {})=>{
209
209
  return contentList.map((content)=>parseContentFromDb(content));
210
210
  };
211
211
 
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcblxuaW1wb3J0IHtwYXJzZUNvbnRlbnRGcm9tRGIsIHBhcnNlQ29udGVudElucHV0fSBmcm9tICcuLi9hZGFwdGVycy9jb250ZW50QWRhcHRlci5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7dHJhbnNsYXRlVGV4dH0gZnJvbSAnLi4vdXRpbHMvZ29vZ2xlVHJhbnNsYXRlLmpzJztcbmltcG9ydCB7ZXh0cmFjdExhbmd1YWdlLCBpc1JlZ2lvbmFsTG9jYWxlfSBmcm9tICcuLi91dGlscy9sb2NhbGVVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29udGVudElucHV0VHlwZSwgQ29udGVudE9wdGlvbnMsIENvbnRlbnRUeXBlLCBMb2NhbGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudE9wdGlvbnMgPSAob3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgaXNBY3RpdmUgPSB0cnVlLFxuICAgIGtleSxcbiAgICBsb2NhbGVcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZCxcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXk6IGtleSA/IHBhcnNlU3RyaW5nKGtleSwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICBsb2NhbGVcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQ29udGVudEZpbHRlcnMgPSAob3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fSk6IEZpbHRlckdyb3VwIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qge2NhdGVnb3J5LCBpc0FjdGl2ZSwga2V5LCBsb2NhbGV9ID0gcGFyc2VDb250ZW50T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZmlsdGVyczogYW55W10gPSBbXTtcblxuICBpZihrZXkpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAna2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBrZXl9KTtcbiAgfVxuXG4gIGlmKGxvY2FsZSkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdsb2NhbGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGxvY2FsZX0pO1xuICB9XG5cbiAgaWYoY2F0ZWdvcnkpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAnY2F0ZWdvcnknLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGNhdGVnb3J5fSk7XG4gIH1cblxuICBpZihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2lzQWN0aXZlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBpc0FjdGl2ZX0pO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID4gMCA/IHtvcGVyYXRvcjogJ0FORCcsIGZpbHRlcnN9IGFzIGFueSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGJ1aWxkQ29udGVudE11dGF0aW9uID0gKFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGUsXG4gIG9wdGlvbnM6IHtyZWFkb25seSBpbmNsdWRlSWRlbnRpdHk/OiBib29sZWFufSA9IHt9XG4pOiBQYXJ0aWFsPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7XG4gICAgY2F0ZWdvcnksXG4gICAgY29udGVudCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpc0FjdGl2ZSxcbiAgICBrZXksXG4gICAgbG9jYWxlOiBwYXJzZWRMb2NhbGVcbiAgfSA9IHBhcnNlZENvbnRlbnQ7XG4gIGNvbnN0IHtpbmNsdWRlSWRlbnRpdHkgPSBmYWxzZX0gPSBvcHRpb25zO1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9IHBhcnNlZExvY2FsZSB8fCAnZW4nO1xuXG4gIHJldHVybiB7XG4gICAgLi4uKGluY2x1ZGVJZGVudGl0eSAmJiB7a2V5OiBrZXkgPyBwYXJzZVN0cmluZyhrZXksIDIwMCkgOiB1bmRlZmluZWQsIGxvY2FsZX0pLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnQgIT09IHVuZGVmaW5lZCA/IHBhcnNlU3RyaW5nKGNvbnRlbnQsIDEwMDAwKSA6IHVuZGVmaW5lZCxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCA/IChkZXNjcmlwdGlvbiA/IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkKSBhcyBzdHJpbmcgOiB1bmRlZmluZWQsXG4gICAgY2F0ZWdvcnk6IGNhdGVnb3J5ICE9PSB1bmRlZmluZWQgPyAoY2F0ZWdvcnkgPyBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nIDogdW5kZWZpbmVkLFxuICAgIGlzQWN0aXZlXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIGxvY2FsZTogTG9jYWxlID0gJ2VuJ1xuKTogUHJvbWlzZTxDb250ZW50VHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGdldEl0ZW1CeTxDb250ZW50VHlwZT4oY29udGV4dCwgJ2NvbnRlbnQnLCBidWlsZENvbnRlbnRGaWx0ZXJzKHtrZXksIGxvY2FsZSwgaXNBY3RpdmU6IHRydWV9KSk7XG4gIHJldHVybiBjb250ZW50ID8gcGFyc2VDb250ZW50RnJvbURiKGNvbnRlbnQpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50V2l0aEZhbGxiYWNrID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgZmFsbGJhY2tDb250ZW50OiBzdHJpbmcsXG4gIGxvY2FsZTogTG9jYWxlID0gJ2VuJ1xuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYXBwTG9jYWxlID0gKENvbmZpZy5nZXQoJ2FwcC5sb2NhbGUnKSB8fCAnZW4nKSBhcyBMb2NhbGU7XG5cbiAgdHJ5IHtcbiAgICBsZXQgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBsb2NhbGUpO1xuXG4gICAgaWYoY29udGVudD8uY29udGVudCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQuY29udGVudDtcbiAgICB9XG5cbiAgICBpZihpc1JlZ2lvbmFsTG9jYWxlKGxvY2FsZSkpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gZXh0cmFjdExhbmd1YWdlKGxvY2FsZSk7XG4gICAgICBjb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGxhbmd1YWdlIGFzIExvY2FsZSk7XG5cbiAgICAgIGlmKGNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQuY29udGVudCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFeHRyYWN0ZWQgZnJvbSAke2xhbmd1YWdlfWBcbiAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBleHRyYWN0ZWQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udGVudC5jb250ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGxvY2FsZSA9PT0gYXBwTG9jYWxlKSB7XG4gICAgICBpZihmYWxsYmFja0NvbnRlbnQpIHtcbiAgICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGNvbnRlbnQ6IGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBdXRvLWdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrJ1xuICAgICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGZhbGxiYWNrIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbGV0IHNvdXJjZUNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgYXBwTG9jYWxlKTtcbiAgICAgIGxldCBzb3VyY2VUZXh0OiBzdHJpbmc7XG5cbiAgICAgIGlmKHNvdXJjZUNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgc291cmNlVGV4dCA9IHNvdXJjZUNvbnRlbnQuY29udGVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGlzUmVnaW9uYWxMb2NhbGUoYXBwTG9jYWxlKSkge1xuICAgICAgICAgIGNvbnN0IGFwcExhbmd1YWdlID0gZXh0cmFjdExhbmd1YWdlKGFwcExvY2FsZSk7XG4gICAgICAgICAgc291cmNlQ29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBhcHBMYW5ndWFnZSBhcyBMb2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoc291cmNlQ29udGVudD8uY29udGVudCkge1xuICAgICAgICAgIHNvdXJjZVRleHQgPSBzb3VyY2VDb250ZW50LmNvbnRlbnQ7XG4gICAgICAgIH0gZWxzZSBpZihmYWxsYmFja0NvbnRlbnQpIHtcbiAgICAgICAgICBzb3VyY2VUZXh0ID0gZmFsbGJhY2tDb250ZW50O1xuXG4gICAgICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBjb250ZW50OiBmYWxsYmFja0NvbnRlbnQsXG4gICAgICAgICAgICBsb2NhbGU6IGFwcExvY2FsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgZnJvbSBmYWxsYmFjaydcbiAgICAgICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZmFsbGJhY2sgYXMgZGVmYXVsdCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVkVGV4dCA9IGF3YWl0IHRyYW5zbGF0ZVRleHQoc291cmNlVGV4dCwgZXh0cmFjdExhbmd1YWdlKGxvY2FsZSksIGV4dHJhY3RMYW5ndWFnZShhcHBMb2NhbGUpKTtcblxuICAgICAgYWRkQ29udGVudChjb250ZXh0LCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgY29udGVudDogdHJhbnNsYXRlZFRleHQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBBdXRvLXRyYW5zbGF0ZWQgZnJvbSAke2FwcExvY2FsZX1gXG4gICAgICB9KS5jYXRjaCgoc2F2ZUVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyB0cmFuc2xhdGVkIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZFRleHQ7XG4gICAgfSBjYXRjaCh0cmFuc2xhdGlvbkVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUcmFuc2xhdGlvbiBlcnJvcjonLCB0cmFuc2xhdGlvbkVycm9yKTtcblxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGVudCBmcm9tIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnRlbnRJbnB1dDogQ29udGVudElucHV0VHlwZVxuKTogUHJvbWlzZTxDb250ZW50VHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRDb250ZW50ID0gcGFyc2VDb250ZW50SW5wdXQoY29udGVudElucHV0KTtcbiAgY29uc3Qge1xuICAgIGNhdGVnb3J5LFxuICAgIGNvbnRlbnQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgaXNBY3RpdmUsXG4gICAga2V5LFxuICAgIGxvY2FsZTogcGFyc2VkTG9jYWxlXG4gIH0gPSBwYXJzZWRDb250ZW50O1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9IHBhcnNlZExvY2FsZSB8fCAnZW4nO1xuICBjb25zdCBjb250ZW50SWQgPSBjcmVhdGVIYXNoKGBjb250ZW50LSR7a2V5fS0ke2xvY2FsZX1gKTtcbiAgY29uc3QgaW5zZXJ0OiBDb250ZW50VHlwZSA9IHtcbiAgICBfa2V5OiBjb250ZW50SWQsXG4gICAga2V5OiBwYXJzZVN0cmluZyhrZXksIDIwMCksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGNvbnRlbnQsIDEwMDAwKSxcbiAgICAuLi4oZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8gcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCkgOiB1bmRlZmluZWR9KSxcbiAgICAuLi4oY2F0ZWdvcnkgIT09IHVuZGVmaW5lZCAmJiB7Y2F0ZWdvcnk6IGNhdGVnb3J5ID8gcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCkgOiB1bmRlZmluZWR9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICB1c2VySWQ6IHNlc3Npb24/LnVzZXJJZCBhcyBzdHJpbmdcbiAgfTtcblxuICBjb25zdCBzYXZlZENvbnRlbnQgPSBhd2FpdCBhZGRJdGVtPENvbnRlbnRUeXBlPihjb250ZXh0LCAnY29udGVudCcsIGluc2VydCk7XG4gIHJldHVybiBwYXJzZUNvbnRlbnRGcm9tRGIoc2F2ZWRDb250ZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGVcbik6IFByb21pc2U8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtjb250ZW50SWR9ID0gcGFyc2VkQ29udGVudDtcblxuICBpZighY29udGVudElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb250ZW50IElEIGlzIHJlcXVpcmVkIGZvciB1cGRhdGUnKTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRDb250ZW50ID0gYXdhaXQgdXBkYXRlSXRlbTxDb250ZW50VHlwZT4oY29udGV4dCwgJ2NvbnRlbnQnLCBjb250ZW50SWQsIGJ1aWxkQ29udGVudE11dGF0aW9uKGNvbnRlbnRJbnB1dCkpO1xuXG4gIGlmKCF1cGRhdGVkQ29udGVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBub3QgZm91bmQgb3IgYWNjZXNzIGRlbmllZCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlQ29udGVudEZyb21EYih1cGRhdGVkQ29udGVudCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VhcmNoQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgb3B0aW9uczogQ29udGVudE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxDb250ZW50VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnRMaXN0ID0gYXdhaXQgZ2V0TGlzdEJ5PENvbnRlbnRUeXBlPihcbiAgICBjb250ZXh0LFxuICAgICdjb250ZW50JyxcbiAgICBidWlsZENvbnRlbnRGaWx0ZXJzKG9wdGlvbnMpLFxuICAgIHtzb3J0OiBbe2ZpZWxkOiAna2V5JywgZGlyZWN0aW9uOiAnQVNDJ30sIHtmaWVsZDogJ2xvY2FsZScsIGRpcmVjdGlvbjogJ0FTQyd9XX1cbiAgKTtcblxuICByZXR1cm4gY29udGVudExpc3QubWFwKChjb250ZW50KSA9PiBwYXJzZUNvbnRlbnRGcm9tRGIoY29udGVudCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VTdHJpbmciLCJwYXJzZUNvbnRlbnRGcm9tRGIiLCJwYXJzZUNvbnRlbnRJbnB1dCIsIkNvbmZpZyIsInRyYW5zbGF0ZVRleHQiLCJleHRyYWN0TGFuZ3VhZ2UiLCJpc1JlZ2lvbmFsTG9jYWxlIiwiYWRkSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJwYXJzZUNvbnRlbnRPcHRpb25zIiwib3B0aW9ucyIsImNhdGVnb3J5IiwiaXNBY3RpdmUiLCJrZXkiLCJsb2NhbGUiLCJ1bmRlZmluZWQiLCJidWlsZENvbnRlbnRGaWx0ZXJzIiwiZmlsdGVycyIsInB1c2giLCJmaWVsZCIsIm9wZXJhdG9yIiwidmFsdWUiLCJsZW5ndGgiLCJidWlsZENvbnRlbnRNdXRhdGlvbiIsImNvbnRlbnRJbnB1dCIsInBhcnNlZENvbnRlbnQiLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJwYXJzZWRMb2NhbGUiLCJpbmNsdWRlSWRlbnRpdHkiLCJnZXRDb250ZW50IiwiY29udGV4dCIsImdldENvbnRlbnRXaXRoRmFsbGJhY2siLCJmYWxsYmFja0NvbnRlbnQiLCJhcHBMb2NhbGUiLCJnZXQiLCJsYW5ndWFnZSIsImFkZENvbnRlbnQiLCJjYXRjaCIsInNhdmVFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInNvdXJjZUNvbnRlbnQiLCJzb3VyY2VUZXh0IiwiYXBwTGFuZ3VhZ2UiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0aW9uRXJyb3IiLCJzZXNzaW9uIiwiY29udGVudElkIiwiaW5zZXJ0IiwiX2tleSIsInVzZXJJZCIsInNhdmVkQ29udGVudCIsInVwZGF0ZUNvbnRlbnQiLCJFcnJvciIsInVwZGF0ZWRDb250ZW50Iiwic2VhcmNoQ29udGVudCIsImNvbnRlbnRMaXN0Iiwic29ydCIsImRpcmVjdGlvbiIsIm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBRXJFLFNBQVFDLGtCQUFrQixFQUFFQyxpQkFBaUIsUUFBTyxnQ0FBZ0M7QUFDcEYsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsYUFBYSxRQUFPLDhCQUE4QjtBQUMxRCxTQUFRQyxlQUFlLEVBQUVDLGdCQUFnQixRQUFPLDBCQUEwQjtBQUMxRSxTQUFRQyxPQUFPLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxVQUFVLFFBQU8sWUFBWTtBQU1wRSxPQUFPLE1BQU1DLHNCQUFzQixDQUFDQyxVQUEwQixDQUFDLENBQUM7SUFDOUQsTUFBTSxFQUNKQyxRQUFRLEVBQ1JDLFdBQVcsSUFBSSxFQUNmQyxHQUFHLEVBQ0hDLE1BQU0sRUFDUCxHQUFHSjtJQUVKLE9BQU87UUFDTEMsVUFBVUEsV0FBV2IsWUFBWWEsVUFBVSxPQUFPSTtRQUNsREg7UUFDQUMsS0FBS0EsTUFBTWYsWUFBWWUsS0FBSyxPQUFPRTtRQUNuQ0Q7SUFDRjtBQUNGLEVBQUU7QUFFRixNQUFNRSxzQkFBc0IsQ0FBQ04sVUFBMEIsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sRUFBQ0MsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLEdBQUcsRUFBRUMsTUFBTSxFQUFDLEdBQUdMLG9CQUFvQkM7SUFDOUQsTUFBTU8sVUFBaUIsRUFBRTtJQUV6QixJQUFHSixLQUFLO1FBQ05JLFFBQVFDLElBQUksQ0FBQztZQUFDQyxPQUFPO1lBQU9DLFVBQVU7WUFBTUMsT0FBT1I7UUFBRztJQUN4RDtJQUVBLElBQUdDLFFBQVE7UUFDVEcsUUFBUUMsSUFBSSxDQUFDO1lBQUNDLE9BQU87WUFBVUMsVUFBVTtZQUFNQyxPQUFPUDtRQUFNO0lBQzlEO0lBRUEsSUFBR0gsVUFBVTtRQUNYTSxRQUFRQyxJQUFJLENBQUM7WUFBQ0MsT0FBTztZQUFZQyxVQUFVO1lBQU1DLE9BQU9WO1FBQVE7SUFDbEU7SUFFQSxJQUFHQyxhQUFhRyxXQUFXO1FBQ3pCRSxRQUFRQyxJQUFJLENBQUM7WUFBQ0MsT0FBTztZQUFZQyxVQUFVO1lBQU1DLE9BQU9UO1FBQVE7SUFDbEU7SUFFQSxPQUFPSyxRQUFRSyxNQUFNLEdBQUcsSUFBSTtRQUFDRixVQUFVO1FBQU9IO0lBQU8sSUFBV0Y7QUFDbEU7QUFFQSxNQUFNUSx1QkFBdUIsQ0FDM0JDLGNBQ0FkLFVBQWdELENBQUMsQ0FBQztJQUVsRCxNQUFNZSxnQkFBZ0J6QixrQkFBa0J3QjtJQUN4QyxNQUFNLEVBQ0piLFFBQVEsRUFDUmUsT0FBTyxFQUNQQyxXQUFXLEVBQ1hmLFFBQVEsRUFDUkMsR0FBRyxFQUNIQyxRQUFRYyxZQUFZLEVBQ3JCLEdBQUdIO0lBQ0osTUFBTSxFQUFDSSxrQkFBa0IsS0FBSyxFQUFDLEdBQUduQjtJQUNsQyxNQUFNSSxTQUFpQmMsZ0JBQWdCO0lBRXZDLE9BQU87UUFDTCxHQUFJQyxtQkFBbUI7WUFBQ2hCLEtBQUtBLE1BQU1mLFlBQVllLEtBQUssT0FBT0U7WUFBV0Q7UUFBTSxDQUFDO1FBQzdFWSxTQUFTQSxZQUFZWCxZQUFZakIsWUFBWTRCLFNBQVMsU0FBU1g7UUFDL0RZLGFBQWFBLGdCQUFnQlosWUFBYVksY0FBYzdCLFlBQVk2QixhQUFhLE9BQU9aLFlBQXVCQTtRQUMvR0osVUFBVUEsYUFBYUksWUFBYUosV0FBV2IsWUFBWWEsVUFBVSxPQUFPSSxZQUF1QkE7UUFDbkdIO0lBQ0Y7QUFDRjtBQUVBLE9BQU8sTUFBTWtCLGFBQWEsT0FDeEJDLFNBQ0FsQixLQUNBQyxTQUFpQixJQUFJO0lBRXJCLE1BQU1ZLFVBQVUsTUFBTXBCLFVBQXVCeUIsU0FBUyxXQUFXZixvQkFBb0I7UUFBQ0g7UUFBS0M7UUFBUUYsVUFBVTtJQUFJO0lBQ2pILE9BQU9jLFVBQVUzQixtQkFBbUIyQixXQUFXO0FBQ2pELEVBQUU7QUFFRixPQUFPLE1BQU1NLHlCQUF5QixPQUNwQ0QsU0FDQWxCLEtBQ0FvQixpQkFDQW5CLFNBQWlCLElBQUk7SUFFckIsTUFBTW9CLFlBQWFqQyxPQUFPa0MsR0FBRyxDQUFDLGlCQUFpQjtJQUUvQyxJQUFJO1FBQ0YsSUFBSVQsVUFBVSxNQUFNSSxXQUFXQyxTQUFTbEIsS0FBS0M7UUFFN0MsSUFBR1ksU0FBU0EsU0FBUztZQUNuQixPQUFPQSxRQUFRQSxPQUFPO1FBQ3hCO1FBRUEsSUFBR3RCLGlCQUFpQlUsU0FBUztZQUMzQixNQUFNc0IsV0FBV2pDLGdCQUFnQlc7WUFDakNZLFVBQVUsTUFBTUksV0FBV0MsU0FBU2xCLEtBQUt1QjtZQUV6QyxJQUFHVixTQUFTQSxTQUFTO2dCQUNuQlcsV0FBV04sU0FBUztvQkFDbEJsQjtvQkFDQWEsU0FBU0EsUUFBUUEsT0FBTztvQkFDeEJaO29CQUNBYSxhQUFhLENBQUMsZUFBZSxFQUFFUyxVQUFVO2dCQUMzQyxHQUFHRSxLQUFLLENBQUMsQ0FBQ0M7b0JBQ1JDLFFBQVFDLEtBQUssQ0FBQyxtQ0FBbUNGO2dCQUNuRDtnQkFFQSxPQUFPYixRQUFRQSxPQUFPO1lBQ3hCO1FBQ0Y7UUFFQSxJQUFHWixXQUFXb0IsV0FBVztZQUN2QixJQUFHRCxpQkFBaUI7Z0JBQ2xCSSxXQUFXTixTQUFTO29CQUNsQmxCO29CQUNBYSxTQUFTTztvQkFDVG5CO29CQUNBYSxhQUFhO2dCQUNmLEdBQUdXLEtBQUssQ0FBQyxDQUFDQztvQkFDUkMsUUFBUUMsS0FBSyxDQUFDLGtDQUFrQ0Y7Z0JBQ2xEO1lBQ0Y7WUFFQSxPQUFPTixtQkFBbUJwQjtRQUM1QjtRQUNBLElBQUk7WUFDRixJQUFJNkIsZ0JBQWdCLE1BQU1aLFdBQVdDLFNBQVNsQixLQUFLcUI7WUFDbkQsSUFBSVM7WUFFSixJQUFHRCxlQUFlaEIsU0FBUztnQkFDekJpQixhQUFhRCxjQUFjaEIsT0FBTztZQUNwQyxPQUFPO2dCQUNMLElBQUd0QixpQkFBaUI4QixZQUFZO29CQUM5QixNQUFNVSxjQUFjekMsZ0JBQWdCK0I7b0JBQ3BDUSxnQkFBZ0IsTUFBTVosV0FBV0MsU0FBU2xCLEtBQUsrQjtnQkFDakQ7Z0JBRUEsSUFBR0YsZUFBZWhCLFNBQVM7b0JBQ3pCaUIsYUFBYUQsY0FBY2hCLE9BQU87Z0JBQ3BDLE9BQU8sSUFBR08saUJBQWlCO29CQUN6QlUsYUFBYVY7b0JBRWJJLFdBQVdOLFNBQVM7d0JBQ2xCbEI7d0JBQ0FhLFNBQVNPO3dCQUNUbkIsUUFBUW9CO3dCQUNSUCxhQUFhO29CQUNmLEdBQUdXLEtBQUssQ0FBQyxDQUFDQzt3QkFDUkMsUUFBUUMsS0FBSyxDQUFDLDZDQUE2Q0Y7b0JBQzdEO2dCQUNGLE9BQU87b0JBQ0wsT0FBTzFCO2dCQUNUO1lBQ0Y7WUFFQSxNQUFNZ0MsaUJBQWlCLE1BQU0zQyxjQUFjeUMsWUFBWXhDLGdCQUFnQlcsU0FBU1gsZ0JBQWdCK0I7WUFFaEdHLFdBQVdOLFNBQVM7Z0JBQ2xCbEI7Z0JBQ0FhLFNBQVNtQjtnQkFDVC9CO2dCQUNBYSxhQUFhLENBQUMscUJBQXFCLEVBQUVPLFdBQVc7WUFDbEQsR0FBR0ksS0FBSyxDQUFDLENBQUNDO2dCQUNSQyxRQUFRQyxLQUFLLENBQUMsb0NBQW9DRjtZQUNwRDtZQUVBLE9BQU9NO1FBQ1QsRUFBRSxPQUFNQyxrQkFBa0I7WUFDeEJOLFFBQVFDLEtBQUssQ0FBQyxzQkFBc0JLO1lBRXBDLE9BQU9iLG1CQUFtQnBCO1FBQzVCO0lBQ0YsRUFBRSxPQUFNNEIsT0FBTztRQUNiRCxRQUFRQyxLQUFLLENBQUMseUNBQXlDQTtRQUN2RCxPQUFPUixtQkFBbUJwQjtJQUM1QjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU13QixhQUFhLE9BQ3hCTixTQUNBUDtJQUVBLE1BQU0sRUFBQ3VCLE9BQU8sRUFBQyxHQUFHaEI7SUFDbEIsTUFBTU4sZ0JBQWdCekIsa0JBQWtCd0I7SUFDeEMsTUFBTSxFQUNKYixRQUFRLEVBQ1JlLE9BQU8sRUFDUEMsV0FBVyxFQUNYZixRQUFRLEVBQ1JDLEdBQUcsRUFDSEMsUUFBUWMsWUFBWSxFQUNyQixHQUFHSDtJQUNKLE1BQU1YLFNBQWlCYyxnQkFBZ0I7SUFDdkMsTUFBTW9CLFlBQVluRCxXQUFXLENBQUMsUUFBUSxFQUFFZ0IsSUFBSSxDQUFDLEVBQUVDLFFBQVE7SUFDdkQsTUFBTW1DLFNBQXNCO1FBQzFCQyxNQUFNRjtRQUNObkMsS0FBS2YsWUFBWWUsS0FBSztRQUN0QkM7UUFDQVksU0FBUzVCLFlBQVk0QixTQUFTO1FBQzlCLEdBQUlDLGdCQUFnQlosYUFBYTtZQUFDWSxhQUFhQSxjQUFjN0IsWUFBWTZCLGFBQWEsT0FBT1o7UUFBUyxDQUFDO1FBQ3ZHLEdBQUlKLGFBQWFJLGFBQWE7WUFBQ0osVUFBVUEsV0FBV2IsWUFBWWEsVUFBVSxPQUFPSTtRQUFTLENBQUM7UUFDM0YsR0FBSUgsYUFBYUcsYUFBYTtZQUFDSDtRQUFRLENBQUM7UUFDeEN1QyxRQUFRSixTQUFTSTtJQUNuQjtJQUVBLE1BQU1DLGVBQWUsTUFBTS9DLFFBQXFCMEIsU0FBUyxXQUFXa0I7SUFDcEUsT0FBT2xELG1CQUFtQnFEO0FBQzVCLEVBQUU7QUFFRixPQUFPLE1BQU1DLGdCQUFnQixPQUMzQnRCLFNBQ0FQO0lBRUEsTUFBTUMsZ0JBQWdCekIsa0JBQWtCd0I7SUFDeEMsTUFBTSxFQUFDd0IsU0FBUyxFQUFDLEdBQUd2QjtJQUVwQixJQUFHLENBQUN1QixXQUFXO1FBQ2IsTUFBTSxJQUFJTSxNQUFNO0lBQ2xCO0lBRUEsTUFBTUMsaUJBQWlCLE1BQU0vQyxXQUF3QnVCLFNBQVMsV0FBV2lCLFdBQVd6QixxQkFBcUJDO0lBRXpHLElBQUcsQ0FBQytCLGdCQUFnQjtRQUNsQixNQUFNLElBQUlELE1BQU07SUFDbEI7SUFFQSxPQUFPdkQsbUJBQW1Cd0Q7QUFDNUIsRUFBRTtBQUVGLE9BQU8sTUFBTUMsZ0JBQWdCLE9BQzNCekIsU0FDQXJCLFVBQTBCLENBQUMsQ0FBQztJQUU1QixNQUFNK0MsY0FBYyxNQUFNbEQsVUFDeEJ3QixTQUNBLFdBQ0FmLG9CQUFvQk4sVUFDcEI7UUFBQ2dELE1BQU07WUFBQztnQkFBQ3ZDLE9BQU87Z0JBQU93QyxXQUFXO1lBQUs7WUFBRztnQkFBQ3hDLE9BQU87Z0JBQVV3QyxXQUFXO1lBQUs7U0FBRTtJQUFBO0lBR2hGLE9BQU9GLFlBQVlHLEdBQUcsQ0FBQyxDQUFDbEMsVUFBWTNCLG1CQUFtQjJCO0FBQ3pELEVBQUUifQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udGVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5cbmltcG9ydCB7cGFyc2VDb250ZW50RnJvbURiLCBwYXJzZUNvbnRlbnRJbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvY29udGVudEFkYXB0ZXIuanMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge3RyYW5zbGF0ZVRleHR9IGZyb20gJy4uL3V0aWxzL2dvb2dsZVRyYW5zbGF0ZS5qcyc7XG5pbXBvcnQge2V4dHJhY3RMYW5ndWFnZSwgaXNSZWdpb25hbExvY2FsZX0gZnJvbSAnLi4vdXRpbHMvbG9jYWxlVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0NvbnRlbnRJbnB1dFR5cGUsIENvbnRlbnRPcHRpb25zLCBDb250ZW50VHlwZSwgTG9jYWxlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRPcHRpb25zID0gKG9wdGlvbnM6IENvbnRlbnRPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlID0gdHJ1ZSxcbiAgICBrZXksXG4gICAgbG9jYWxlXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgY2F0ZWdvcnk6IGNhdGVnb3J5ID8gcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCkgOiB1bmRlZmluZWQsXG4gICAgaXNBY3RpdmUsXG4gICAga2V5OiBrZXkgPyBwYXJzZVN0cmluZyhrZXksIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgbG9jYWxlXG4gIH07XG59O1xuXG5jb25zdCBidWlsZENvbnRlbnRGaWx0ZXJzID0gKG9wdGlvbnM6IENvbnRlbnRPcHRpb25zID0ge30pOiBGaWx0ZXJHcm91cCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHtjYXRlZ29yeSwgaXNBY3RpdmUsIGtleSwgbG9jYWxlfSA9IHBhcnNlQ29udGVudE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZpbHRlcnM6IGFueVtdID0gW107XG5cbiAgaWYoa2V5KSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZToga2V5fSk7XG4gIH1cblxuICBpZihsb2NhbGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goe2ZpZWxkOiAnbG9jYWxlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBsb2NhbGV9KTtcbiAgfVxuXG4gIGlmKGNhdGVnb3J5KSB7XG4gICAgZmlsdGVycy5wdXNoKHtmaWVsZDogJ2NhdGVnb3J5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBjYXRlZ29yeX0pO1xuICB9XG5cbiAgaWYoaXNBY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgIGZpbHRlcnMucHVzaCh7ZmllbGQ6ICdpc0FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogaXNBY3RpdmV9KTtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA+IDAgPyB7b3BlcmF0b3I6ICdBTkQnLCBmaWx0ZXJzfSBhcyBhbnkgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBidWlsZENvbnRlbnRNdXRhdGlvbiA9IChcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlLFxuICBvcHRpb25zOiB7cmVhZG9ubHkgaW5jbHVkZUlkZW50aXR5PzogYm9vbGVhbn0gPSB7fVxuKTogUGFydGlhbDxDb250ZW50VHlwZT4gPT4ge1xuICBjb25zdCBwYXJzZWRDb250ZW50ID0gcGFyc2VDb250ZW50SW5wdXQoY29udGVudElucHV0KTtcbiAgY29uc3Qge1xuICAgIGNhdGVnb3J5LFxuICAgIGNvbnRlbnQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgaXNBY3RpdmUsXG4gICAga2V5LFxuICAgIGxvY2FsZTogcGFyc2VkTG9jYWxlXG4gIH0gPSBwYXJzZWRDb250ZW50O1xuICBjb25zdCB7aW5jbHVkZUlkZW50aXR5ID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgY29uc3QgbG9jYWxlOiBMb2NhbGUgPSBwYXJzZWRMb2NhbGUgfHwgJ2VuJztcblxuICByZXR1cm4ge1xuICAgIC4uLihpbmNsdWRlSWRlbnRpdHkgJiYge2tleToga2V5ID8gcGFyc2VTdHJpbmcoa2V5LCAyMDApIDogdW5kZWZpbmVkLCBsb2NhbGV9KSxcbiAgICBjb250ZW50OiBjb250ZW50ICE9PSB1bmRlZmluZWQgPyBwYXJzZVN0cmluZyhjb250ZW50LCAxMDAwMCkgOiB1bmRlZmluZWQsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyAoZGVzY3JpcHRpb24gPyBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZCkgYXMgc3RyaW5nIDogdW5kZWZpbmVkLFxuICAgIGNhdGVnb3J5OiBjYXRlZ29yeSAhPT0gdW5kZWZpbmVkID8gKGNhdGVnb3J5ID8gcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCkgOiB1bmRlZmluZWQpIGFzIHN0cmluZyA6IHVuZGVmaW5lZCxcbiAgICBpc0FjdGl2ZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbik6IFByb21pc2U8Q29udGVudFR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBnZXRJdGVtQnk8Q29udGVudFR5cGU+KGNvbnRleHQsICdjb250ZW50JywgYnVpbGRDb250ZW50RmlsdGVycyh7a2V5LCBsb2NhbGUsIGlzQWN0aXZlOiB0cnVlfSkpO1xuICByZXR1cm4gY29udGVudCA/IHBhcnNlQ29udGVudEZyb21EYihjb250ZW50KSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGVudFdpdGhGYWxsYmFjayA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAga2V5OiBzdHJpbmcsXG4gIGZhbGxiYWNrQ29udGVudDogc3RyaW5nLFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGFwcExvY2FsZSA9IChDb25maWcuZ2V0KCdhcHAubG9jYWxlJykgfHwgJ2VuJykgYXMgTG9jYWxlO1xuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgbG9jYWxlKTtcblxuICAgIGlmKGNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBjb250ZW50LmNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYoaXNSZWdpb25hbExvY2FsZShsb2NhbGUpKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGV4dHJhY3RMYW5ndWFnZShsb2NhbGUpO1xuICAgICAgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnQoY29udGV4dCwga2V5LCBsYW5ndWFnZSBhcyBMb2NhbGUpO1xuXG4gICAgICBpZihjb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb250ZW50OiBjb250ZW50LmNvbnRlbnQsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgRXh0cmFjdGVkIGZyb20gJHtsYW5ndWFnZX1gXG4gICAgICAgIH0pLmNhdGNoKChzYXZlRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgZXh0cmFjdGVkIGNvbnRlbnQ6Jywgc2F2ZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQuY29udGVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihsb2NhbGUgPT09IGFwcExvY2FsZSkge1xuICAgICAgaWYoZmFsbGJhY2tDb250ZW50KSB7XG4gICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjb250ZW50OiBmYWxsYmFja0NvbnRlbnQsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgZnJvbSBmYWxsYmFjaydcbiAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBmYWxsYmFjayBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsbGJhY2tDb250ZW50IHx8IGtleTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzb3VyY2VDb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChjb250ZXh0LCBrZXksIGFwcExvY2FsZSk7XG4gICAgICBsZXQgc291cmNlVGV4dDogc3RyaW5nO1xuXG4gICAgICBpZihzb3VyY2VDb250ZW50Py5jb250ZW50KSB7XG4gICAgICAgIHNvdXJjZVRleHQgPSBzb3VyY2VDb250ZW50LmNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihpc1JlZ2lvbmFsTG9jYWxlKGFwcExvY2FsZSkpIHtcbiAgICAgICAgICBjb25zdCBhcHBMYW5ndWFnZSA9IGV4dHJhY3RMYW5ndWFnZShhcHBMb2NhbGUpO1xuICAgICAgICAgIHNvdXJjZUNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KGNvbnRleHQsIGtleSwgYXBwTGFuZ3VhZ2UgYXMgTG9jYWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNvdXJjZUNvbnRlbnQ/LmNvbnRlbnQpIHtcbiAgICAgICAgICBzb3VyY2VUZXh0ID0gc291cmNlQ29udGVudC5jb250ZW50O1xuICAgICAgICB9IGVsc2UgaWYoZmFsbGJhY2tDb250ZW50KSB7XG4gICAgICAgICAgc291cmNlVGV4dCA9IGZhbGxiYWNrQ29udGVudDtcblxuICAgICAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY29udGVudDogZmFsbGJhY2tDb250ZW50LFxuICAgICAgICAgICAgbG9jYWxlOiBhcHBMb2NhbGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dG8tZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2snXG4gICAgICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIGZhbGxiYWNrIGFzIGRlZmF1bHQgY29udGVudDonLCBzYXZlRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNsYXRlZFRleHQgPSBhd2FpdCB0cmFuc2xhdGVUZXh0KHNvdXJjZVRleHQsIGV4dHJhY3RMYW5ndWFnZShsb2NhbGUpLCBleHRyYWN0TGFuZ3VhZ2UoYXBwTG9jYWxlKSk7XG5cbiAgICAgIGFkZENvbnRlbnQoY29udGV4dCwge1xuICAgICAgICBrZXksXG4gICAgICAgIGNvbnRlbnQ6IHRyYW5zbGF0ZWRUZXh0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQXV0by10cmFuc2xhdGVkIGZyb20gJHthcHBMb2NhbGV9YFxuICAgICAgfSkuY2F0Y2goKHNhdmVFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgdHJhbnNsYXRlZCBjb250ZW50OicsIHNhdmVFcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRUZXh0O1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignVHJhbnNsYXRpb24gZXJyb3I6JywgdHJhbnNsYXRpb25FcnJvcik7XG5cbiAgICAgIHJldHVybiBmYWxsYmFja0NvbnRlbnQgfHwga2V5O1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNvbnRlbnQgZnJvbSBkYXRhYmFzZTonLCBlcnJvcik7XG4gICAgcmV0dXJuIGZhbGxiYWNrQ29udGVudCB8fCBrZXk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb250ZW50SW5wdXQ6IENvbnRlbnRJbnB1dFR5cGVcbik6IFByb21pc2U8Q29udGVudFR5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3QgcGFyc2VkQ29udGVudCA9IHBhcnNlQ29udGVudElucHV0KGNvbnRlbnRJbnB1dCk7XG4gIGNvbnN0IHtcbiAgICBjYXRlZ29yeSxcbiAgICBjb250ZW50LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGlzQWN0aXZlLFxuICAgIGtleSxcbiAgICBsb2NhbGU6IHBhcnNlZExvY2FsZVxuICB9ID0gcGFyc2VkQ29udGVudDtcbiAgY29uc3QgbG9jYWxlOiBMb2NhbGUgPSBwYXJzZWRMb2NhbGUgfHwgJ2VuJztcbiAgY29uc3QgY29udGVudElkID0gY3JlYXRlSGFzaChgY29udGVudC0ke2tleX0tJHtsb2NhbGV9YCk7XG4gIGNvbnN0IGluc2VydDogQ29udGVudFR5cGUgPSB7XG4gICAgX2tleTogY29udGVudElkLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCAxMDAwMCksXG4gICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYge2Rlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApIDogdW5kZWZpbmVkfSksXG4gICAgLi4uKGNhdGVnb3J5ICE9PSB1bmRlZmluZWQgJiYge2NhdGVnb3J5OiBjYXRlZ29yeSA/IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApIDogdW5kZWZpbmVkfSksXG4gICAgLi4uKGlzQWN0aXZlICE9PSB1bmRlZmluZWQgJiYge2lzQWN0aXZlfSksXG4gICAgdXNlcklkOiBzZXNzaW9uPy51c2VySWQgYXMgc3RyaW5nXG4gIH07XG5cbiAgY29uc3Qgc2F2ZWRDb250ZW50ID0gYXdhaXQgYWRkSXRlbTxDb250ZW50VHlwZT4oY29udGV4dCwgJ2NvbnRlbnQnLCBpbnNlcnQpO1xuICByZXR1cm4gcGFyc2VDb250ZW50RnJvbURiKHNhdmVkQ29udGVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udGVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udGVudElucHV0OiBDb250ZW50SW5wdXRUeXBlXG4pOiBQcm9taXNlPENvbnRlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBwYXJzZUNvbnRlbnRJbnB1dChjb250ZW50SW5wdXQpO1xuICBjb25zdCB7Y29udGVudElkfSA9IHBhcnNlZENvbnRlbnQ7XG5cbiAgaWYoIWNvbnRlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBJRCBpcyByZXF1aXJlZCBmb3IgdXBkYXRlJyk7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkQ29udGVudCA9IGF3YWl0IHVwZGF0ZUl0ZW08Q29udGVudFR5cGU+KGNvbnRleHQsICdjb250ZW50JywgY29udGVudElkLCBidWlsZENvbnRlbnRNdXRhdGlvbihjb250ZW50SW5wdXQpKTtcblxuICBpZighdXBkYXRlZENvbnRlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRlbnQgbm90IGZvdW5kIG9yIGFjY2VzcyBkZW5pZWQnKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUNvbnRlbnRGcm9tRGIodXBkYXRlZENvbnRlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaENvbnRlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IENvbnRlbnRPcHRpb25zID0ge31cbik6IFByb21pc2U8Q29udGVudFR5cGVbXT4gPT4ge1xuICBjb25zdCBjb250ZW50TGlzdCA9IGF3YWl0IGdldExpc3RCeTxDb250ZW50VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAnY29udGVudCcsXG4gICAgYnVpbGRDb250ZW50RmlsdGVycyhvcHRpb25zKSxcbiAgICB7c29ydDogW3tmaWVsZDogJ2tleScsIGRpcmVjdGlvbjogJ0FTQyd9LCB7ZmllbGQ6ICdsb2NhbGUnLCBkaXJlY3Rpb246ICdBU0MnfV19XG4gICk7XG5cbiAgcmV0dXJuIGNvbnRlbnRMaXN0Lm1hcCgoY29udGVudCkgPT4gcGFyc2VDb250ZW50RnJvbURiKGNvbnRlbnQpKTtcbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlU3RyaW5nIiwicGFyc2VDb250ZW50RnJvbURiIiwicGFyc2VDb250ZW50SW5wdXQiLCJDb25maWciLCJ0cmFuc2xhdGVUZXh0IiwiZXh0cmFjdExhbmd1YWdlIiwiaXNSZWdpb25hbExvY2FsZSIsImFkZEl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwicGFyc2VDb250ZW50T3B0aW9ucyIsIm9wdGlvbnMiLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwia2V5IiwibG9jYWxlIiwidW5kZWZpbmVkIiwiYnVpbGRDb250ZW50RmlsdGVycyIsImZpbHRlcnMiLCJwdXNoIiwiZmllbGQiLCJvcGVyYXRvciIsInZhbHVlIiwibGVuZ3RoIiwiYnVpbGRDb250ZW50TXV0YXRpb24iLCJjb250ZW50SW5wdXQiLCJwYXJzZWRDb250ZW50IiwiY29udGVudCIsImRlc2NyaXB0aW9uIiwicGFyc2VkTG9jYWxlIiwiaW5jbHVkZUlkZW50aXR5IiwiZ2V0Q29udGVudCIsImNvbnRleHQiLCJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwiZmFsbGJhY2tDb250ZW50IiwiYXBwTG9jYWxlIiwiZ2V0IiwibGFuZ3VhZ2UiLCJhZGRDb250ZW50IiwiY2F0Y2giLCJzYXZlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJzb3VyY2VDb250ZW50Iiwic291cmNlVGV4dCIsImFwcExhbmd1YWdlIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGlvbkVycm9yIiwic2Vzc2lvbiIsImNvbnRlbnRJZCIsImluc2VydCIsIl9rZXkiLCJ1c2VySWQiLCJzYXZlZENvbnRlbnQiLCJ1cGRhdGVDb250ZW50IiwiRXJyb3IiLCJ1cGRhdGVkQ29udGVudCIsInNlYXJjaENvbnRlbnQiLCJjb250ZW50TGlzdCIsInNvcnQiLCJkaXJlY3Rpb24iLCJtYXAiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUVyRSxTQUFRQyxrQkFBa0IsRUFBRUMsaUJBQWlCLFFBQU8sZ0NBQWdDO0FBQ3BGLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLGFBQWEsUUFBTyw4QkFBOEI7QUFDMUQsU0FBUUMsZUFBZSxFQUFFQyxnQkFBZ0IsUUFBTywwQkFBMEI7QUFDMUUsU0FBUUMsT0FBTyxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxRQUFPLFlBQVk7QUFNcEUsT0FBTyxNQUFNQyxzQkFBc0IsQ0FBQ0MsVUFBMEIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sRUFDSkMsUUFBUSxFQUNSQyxXQUFXLElBQUksRUFDZkMsR0FBRyxFQUNIQyxNQUFNLEVBQ1AsR0FBR0o7SUFFSixPQUFPO1FBQ0xDLFVBQVVBLFdBQVdiLFlBQVlhLFVBQVUsT0FBT0k7UUFDbERIO1FBQ0FDLEtBQUtBLE1BQU1mLFlBQVllLEtBQUssT0FBT0U7UUFDbkNEO0lBQ0Y7QUFDRixFQUFFO0FBRUYsTUFBTUUsc0JBQXNCLENBQUNOLFVBQTBCLENBQUMsQ0FBQztJQUN2RCxNQUFNLEVBQUNDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxHQUFHLEVBQUVDLE1BQU0sRUFBQyxHQUFHTCxvQkFBb0JDO0lBQzlELE1BQU1PLFVBQWlCLEVBQUU7SUFFekIsSUFBR0osS0FBSztRQUNOSSxRQUFRQyxJQUFJLENBQUM7WUFBQ0MsT0FBTztZQUFPQyxVQUFVO1lBQU1DLE9BQU9SO1FBQUc7SUFDeEQ7SUFFQSxJQUFHQyxRQUFRO1FBQ1RHLFFBQVFDLElBQUksQ0FBQztZQUFDQyxPQUFPO1lBQVVDLFVBQVU7WUFBTUMsT0FBT1A7UUFBTTtJQUM5RDtJQUVBLElBQUdILFVBQVU7UUFDWE0sUUFBUUMsSUFBSSxDQUFDO1lBQUNDLE9BQU87WUFBWUMsVUFBVTtZQUFNQyxPQUFPVjtRQUFRO0lBQ2xFO0lBRUEsSUFBR0MsYUFBYUcsV0FBVztRQUN6QkUsUUFBUUMsSUFBSSxDQUFDO1lBQUNDLE9BQU87WUFBWUMsVUFBVTtZQUFNQyxPQUFPVDtRQUFRO0lBQ2xFO0lBRUEsT0FBT0ssUUFBUUssTUFBTSxHQUFHLElBQUk7UUFBQ0YsVUFBVTtRQUFPSDtJQUFPLElBQVdGO0FBQ2xFO0FBRUEsTUFBTVEsdUJBQXVCLENBQzNCQyxjQUNBZCxVQUFnRCxDQUFDLENBQUM7SUFFbEQsTUFBTWUsZ0JBQWdCekIsa0JBQWtCd0I7SUFDeEMsTUFBTSxFQUNKYixRQUFRLEVBQ1JlLE9BQU8sRUFDUEMsV0FBVyxFQUNYZixRQUFRLEVBQ1JDLEdBQUcsRUFDSEMsUUFBUWMsWUFBWSxFQUNyQixHQUFHSDtJQUNKLE1BQU0sRUFBQ0ksa0JBQWtCLEtBQUssRUFBQyxHQUFHbkI7SUFDbEMsTUFBTUksU0FBaUJjLGdCQUFnQjtJQUV2QyxPQUFPO1FBQ0wsR0FBSUMsbUJBQW1CO1lBQUNoQixLQUFLQSxNQUFNZixZQUFZZSxLQUFLLE9BQU9FO1lBQVdEO1FBQU0sQ0FBQztRQUM3RVksU0FBU0EsWUFBWVgsWUFBWWpCLFlBQVk0QixTQUFTLFNBQVNYO1FBQy9EWSxhQUFhQSxnQkFBZ0JaLFlBQWFZLGNBQWM3QixZQUFZNkIsYUFBYSxPQUFPWixZQUF1QkE7UUFDL0dKLFVBQVVBLGFBQWFJLFlBQWFKLFdBQVdiLFlBQVlhLFVBQVUsT0FBT0ksWUFBdUJBO1FBQ25HSDtJQUNGO0FBQ0Y7QUFFQSxPQUFPLE1BQU1rQixhQUFhLE9BQ3hCQyxTQUNBbEIsS0FDQUMsU0FBaUIsSUFBSTtJQUVyQixNQUFNWSxVQUFVLE1BQU1wQixVQUF1QnlCLFNBQVMsV0FBV2Ysb0JBQW9CO1FBQUNIO1FBQUtDO1FBQVFGLFVBQVU7SUFBSTtJQUNqSCxPQUFPYyxVQUFVM0IsbUJBQW1CMkIsV0FBVztBQUNqRCxFQUFFO0FBRUYsT0FBTyxNQUFNTSx5QkFBeUIsT0FDcENELFNBQ0FsQixLQUNBb0IsaUJBQ0FuQixTQUFpQixJQUFJO0lBRXJCLE1BQU1vQixZQUFhakMsT0FBT2tDLEdBQUcsQ0FBQyxpQkFBaUI7SUFFL0MsSUFBSTtRQUNGLElBQUlULFVBQVUsTUFBTUksV0FBV0MsU0FBU2xCLEtBQUtDO1FBRTdDLElBQUdZLFNBQVNBLFNBQVM7WUFDbkIsT0FBT0EsUUFBUUEsT0FBTztRQUN4QjtRQUVBLElBQUd0QixpQkFBaUJVLFNBQVM7WUFDM0IsTUFBTXNCLFdBQVdqQyxnQkFBZ0JXO1lBQ2pDWSxVQUFVLE1BQU1JLFdBQVdDLFNBQVNsQixLQUFLdUI7WUFFekMsSUFBR1YsU0FBU0EsU0FBUztnQkFDbkJXLFdBQVdOLFNBQVM7b0JBQ2xCbEI7b0JBQ0FhLFNBQVNBLFFBQVFBLE9BQU87b0JBQ3hCWjtvQkFDQWEsYUFBYSxDQUFDLGVBQWUsRUFBRVMsVUFBVTtnQkFDM0MsR0FBR0UsS0FBSyxDQUFDLENBQUNDO29CQUNSQyxRQUFRQyxLQUFLLENBQUMsbUNBQW1DRjtnQkFDbkQ7Z0JBRUEsT0FBT2IsUUFBUUEsT0FBTztZQUN4QjtRQUNGO1FBRUEsSUFBR1osV0FBV29CLFdBQVc7WUFDdkIsSUFBR0QsaUJBQWlCO2dCQUNsQkksV0FBV04sU0FBUztvQkFDbEJsQjtvQkFDQWEsU0FBU087b0JBQ1RuQjtvQkFDQWEsYUFBYTtnQkFDZixHQUFHVyxLQUFLLENBQUMsQ0FBQ0M7b0JBQ1JDLFFBQVFDLEtBQUssQ0FBQyxrQ0FBa0NGO2dCQUNsRDtZQUNGO1lBRUEsT0FBT04sbUJBQW1CcEI7UUFDNUI7UUFDQSxJQUFJO1lBQ0YsSUFBSTZCLGdCQUFnQixNQUFNWixXQUFXQyxTQUFTbEIsS0FBS3FCO1lBQ25ELElBQUlTO1lBRUosSUFBR0QsZUFBZWhCLFNBQVM7Z0JBQ3pCaUIsYUFBYUQsY0FBY2hCLE9BQU87WUFDcEMsT0FBTztnQkFDTCxJQUFHdEIsaUJBQWlCOEIsWUFBWTtvQkFDOUIsTUFBTVUsY0FBY3pDLGdCQUFnQitCO29CQUNwQ1EsZ0JBQWdCLE1BQU1aLFdBQVdDLFNBQVNsQixLQUFLK0I7Z0JBQ2pEO2dCQUVBLElBQUdGLGVBQWVoQixTQUFTO29CQUN6QmlCLGFBQWFELGNBQWNoQixPQUFPO2dCQUNwQyxPQUFPLElBQUdPLGlCQUFpQjtvQkFDekJVLGFBQWFWO29CQUViSSxXQUFXTixTQUFTO3dCQUNsQmxCO3dCQUNBYSxTQUFTTzt3QkFDVG5CLFFBQVFvQjt3QkFDUlAsYUFBYTtvQkFDZixHQUFHVyxLQUFLLENBQUMsQ0FBQ0M7d0JBQ1JDLFFBQVFDLEtBQUssQ0FBQyw2Q0FBNkNGO29CQUM3RDtnQkFDRixPQUFPO29CQUNMLE9BQU8xQjtnQkFDVDtZQUNGO1lBRUEsTUFBTWdDLGlCQUFpQixNQUFNM0MsY0FBY3lDLFlBQVl4QyxnQkFBZ0JXLFNBQVNYLGdCQUFnQitCO1lBRWhHRyxXQUFXTixTQUFTO2dCQUNsQmxCO2dCQUNBYSxTQUFTbUI7Z0JBQ1QvQjtnQkFDQWEsYUFBYSxDQUFDLHFCQUFxQixFQUFFTyxXQUFXO1lBQ2xELEdBQUdJLEtBQUssQ0FBQyxDQUFDQztnQkFDUkMsUUFBUUMsS0FBSyxDQUFDLG9DQUFvQ0Y7WUFDcEQ7WUFFQSxPQUFPTTtRQUNULEVBQUUsT0FBTUMsa0JBQWtCO1lBQ3hCTixRQUFRQyxLQUFLLENBQUMsc0JBQXNCSztZQUVwQyxPQUFPYixtQkFBbUJwQjtRQUM1QjtJQUNGLEVBQUUsT0FBTTRCLE9BQU87UUFDYkQsUUFBUUMsS0FBSyxDQUFDLHlDQUF5Q0E7UUFDdkQsT0FBT1IsbUJBQW1CcEI7SUFDNUI7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNd0IsYUFBYSxPQUN4Qk4sU0FDQVA7SUFFQSxNQUFNLEVBQUN1QixPQUFPLEVBQUMsR0FBR2hCO0lBQ2xCLE1BQU1OLGdCQUFnQnpCLGtCQUFrQndCO0lBQ3hDLE1BQU0sRUFDSmIsUUFBUSxFQUNSZSxPQUFPLEVBQ1BDLFdBQVcsRUFDWGYsUUFBUSxFQUNSQyxHQUFHLEVBQ0hDLFFBQVFjLFlBQVksRUFDckIsR0FBR0g7SUFDSixNQUFNWCxTQUFpQmMsZ0JBQWdCO0lBQ3ZDLE1BQU1vQixZQUFZbkQsV0FBVyxDQUFDLFFBQVEsRUFBRWdCLElBQUksQ0FBQyxFQUFFQyxRQUFRO0lBQ3ZELE1BQU1tQyxTQUFzQjtRQUMxQkMsTUFBTUY7UUFDTm5DLEtBQUtmLFlBQVllLEtBQUs7UUFDdEJDO1FBQ0FZLFNBQVM1QixZQUFZNEIsU0FBUztRQUM5QixHQUFJQyxnQkFBZ0JaLGFBQWE7WUFBQ1ksYUFBYUEsY0FBYzdCLFlBQVk2QixhQUFhLE9BQU9aO1FBQVMsQ0FBQztRQUN2RyxHQUFJSixhQUFhSSxhQUFhO1lBQUNKLFVBQVVBLFdBQVdiLFlBQVlhLFVBQVUsT0FBT0k7UUFBUyxDQUFDO1FBQzNGLEdBQUlILGFBQWFHLGFBQWE7WUFBQ0g7UUFBUSxDQUFDO1FBQ3hDdUMsUUFBUUosU0FBU0k7SUFDbkI7SUFFQSxNQUFNQyxlQUFlLE1BQU0vQyxRQUFxQjBCLFNBQVMsV0FBV2tCO0lBQ3BFLE9BQU9sRCxtQkFBbUJxRDtBQUM1QixFQUFFO0FBRUYsT0FBTyxNQUFNQyxnQkFBZ0IsT0FDM0J0QixTQUNBUDtJQUVBLE1BQU1DLGdCQUFnQnpCLGtCQUFrQndCO0lBQ3hDLE1BQU0sRUFBQ3dCLFNBQVMsRUFBQyxHQUFHdkI7SUFFcEIsSUFBRyxDQUFDdUIsV0FBVztRQUNiLE1BQU0sSUFBSU0sTUFBTTtJQUNsQjtJQUVBLE1BQU1DLGlCQUFpQixNQUFNL0MsV0FBd0J1QixTQUFTLFdBQVdpQixXQUFXekIscUJBQXFCQztJQUV6RyxJQUFHLENBQUMrQixnQkFBZ0I7UUFDbEIsTUFBTSxJQUFJRCxNQUFNO0lBQ2xCO0lBRUEsT0FBT3ZELG1CQUFtQndEO0FBQzVCLEVBQUU7QUFFRixPQUFPLE1BQU1DLGdCQUFnQixPQUMzQnpCLFNBQ0FyQixVQUEwQixDQUFDLENBQUM7SUFFNUIsTUFBTStDLGNBQWMsTUFBTWxELFVBQ3hCd0IsU0FDQSxXQUNBZixvQkFBb0JOLFVBQ3BCO1FBQUNnRCxNQUFNO1lBQUM7Z0JBQUN2QyxPQUFPO2dCQUFPd0MsV0FBVztZQUFLO1lBQUc7Z0JBQUN4QyxPQUFPO2dCQUFVd0MsV0FBVztZQUFLO1NBQUU7SUFBQTtJQUdoRixPQUFPRixZQUFZRyxHQUFHLENBQUMsQ0FBQ2xDLFVBQVkzQixtQkFBbUIyQjtBQUN6RCxFQUFFIn0=
@@ -421,4 +421,4 @@ const validMessageContent = (message)=>{
421
421
  };
422
422
  };
423
423
 
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50R2VuZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dlbmVyYXRlT2xsYW1hQ29udGVudH0gZnJvbSAnLi9vbGxhbWFHZW5lcmF0aW9uLmpzJztcbmltcG9ydCB7Q29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yLCBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3J9IGZyb20gJy4vY29udGVudEdlbmVyYXRpb25FcnJvcnMuanMnO1xuZXhwb3J0IHtDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IsIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcn0gZnJvbSAnLi9jb250ZW50R2VuZXJhdGlvbkVycm9ycy5qcyc7XG5pbXBvcnQge3Bvc3R9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRpb25Db25maWcge1xuICBjbGF1ZGVLZXk/OiBzdHJpbmc7XG4gIGNsYXVkZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlJbWFnZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBncm9rS2V5Pzogc3RyaW5nO1xuICBncm9rTW9kZWw/OiBzdHJpbmc7XG4gIG9sbGFtYT86IHtlbmRwb2ludDogc3RyaW5nOyBwcm90b2NvbDogJ2dlbmVyYXRlJyB8ICdjaGF0JyB8ICdvcGVuYWktY2hhdCd9O1xuICBvcGVuYWlLZXk/OiBzdHJpbmc7XG4gIG9wZW5haU1vZGVsPzogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgQ29udGVudEdlbmVyYXRpb25QYXJ0ID0ge3RleHQ6IHN0cmluZzsgdHlwZTogJ3RleHQnfSB8IHtcbiAgZGV0YWlsPzogJ2F1dG8nIHwgJ2hpZ2gnIHwgJ2xvdyc7XG4gIHR5cGU6ICdpbWFnZSc7XG4gIHVybDogc3RyaW5nO1xufTtcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRpb25NZXNzYWdlIHtcbiAgY29udGVudDogc3RyaW5nIHwgQ29udGVudEdlbmVyYXRpb25QYXJ0W107XG4gIHJvbGU6ICdhc3Npc3RhbnQnIHwgJ2RldmVsb3BlcicgfCAnc3lzdGVtJyB8ICd1c2VyJztcbn1cbmV4cG9ydCB0eXBlIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VGb3JtYXQgPSB7dHlwZTogJ2pzb25fb2JqZWN0JyB8ICd0ZXh0J30gfCB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0cmljdD86IGJvb2xlYW47XG4gIHR5cGU6ICdqc29uX3NjaGVtYSc7XG59O1xuZXhwb3J0IHR5cGUgQ29udGVudEdlbmVyYXRpb25SZWFzb25pbmdFZmZvcnQgPSAnbm9uZScgfCAnbWluaW1hbCcgfCAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ3hoaWdoJyB8ICdtYXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRHZW5lcmF0aW9uSW5wdXQge1xuICBhc3BlY3RSYXRpbz86IHN0cmluZztcbiAgaW1hZ2VzPzoge2J5dGVzOiBCdWZmZXI7IG1pbWU6IHN0cmluZ31bXTtcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICBtZXNzYWdlcz86IENvbnRlbnRHZW5lcmF0aW9uTWVzc2FnZVtdO1xuICBtb2RhbGl0eT86ICdpbWFnZScgfCAndGV4dCc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBvdXRwdXRUZXh0RmlsdGVyPzogJ25vbmJsYW5rJztcbiAgb3V0cHV0VGV4dE1vZGU/OiAncHJlc2VydmUnIHwgJ3RyaW0nO1xuICBvdXRwdXRUZXh0U2VwYXJhdG9yPzogJycgfCAnXFxuJztcbiAgcHJvbXB0Pzogc3RyaW5nO1xuICBwcm92aWRlcjogJ2NsYXVkZScgfCAnZ2VtaW5pJyB8ICdncm9rJyB8ICdvbGxhbWEnIHwgJ29wZW5haSc7XG4gIHJlYXNvbmluZ0VmZm9ydD86IENvbnRlbnRHZW5lcmF0aW9uUmVhc29uaW5nRWZmb3J0O1xuICByZXNwb25zZUZvcm1hdD86IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VGb3JtYXQ7XG4gIHNlYXJjaD86IGJvb2xlYW47XG4gIHN5c3RlbT86IHN0cmluZztcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG4gIHRoaW5raW5nTGV2ZWw/OiAnbWluaW1hbCcgfCAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHRvcFA/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZENvbnRlbnQge1xuICBpbWFnZT86IHtieXRlczogQnVmZmVyOyBtaW1lOiAnaW1hZ2UvanBlZycgfCAnaW1hZ2UvcG5nJ307XG4gIHNlYXJjaFN1Z2dlc3Rpb25zSHRtbD86IHN0cmluZztcbiAgc291cmNlczoge3RpdGxlOiBzdHJpbmc7IHVybDogc3RyaW5nfVtdO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgR2VtaW5pUGFydCB7aW5saW5lRGF0YT86IHtkYXRhOiBzdHJpbmc7IG1pbWVUeXBlOiBzdHJpbmd9OyB0ZXh0Pzogc3RyaW5nOyB0aG91Z2h0PzogYm9vbGVhbn1cbmludGVyZmFjZSBHZW1pbmlSZXNwb25zZSB7XG4gIGNhbmRpZGF0ZXM/OiB7XG4gICAgY29udGVudD86IHtwYXJ0cz86IEdlbWluaVBhcnRbXX07XG4gICAgZmluaXNoUmVhc29uPzogc3RyaW5nO1xuICAgIGdyb3VuZGluZ01ldGFkYXRhPzoge1xuICAgICAgZ3JvdW5kaW5nQ2h1bmtzPzoge3dlYj86IHt0aXRsZT86IHN0cmluZzsgdXJpPzogc3RyaW5nfX1bXTtcbiAgICAgIHNlYXJjaEVudHJ5UG9pbnQ/OiB7cmVuZGVyZWRDb250ZW50Pzogc3RyaW5nfTtcbiAgICB9O1xuICB9W107XG4gIGVycm9yPzoge2NvZGU/OiBudW1iZXJ9O1xuICBwcm9tcHRGZWVkYmFjaz86IHtibG9ja1JlYXNvbj86IHN0cmluZ307XG59XG5cbmNvbnN0IHZhbGlkTWVzc2FnZUNvbnRlbnQgPSAobWVzc2FnZTogQ29udGVudEdlbmVyYXRpb25NZXNzYWdlKTogYm9vbGVhbiA9PiB7XG4gIGlmKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICEhbWVzc2FnZS5jb250ZW50LnRyaW0oKTtcbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpICYmIG1lc3NhZ2UuY29udGVudC5sZW5ndGggPiAwICYmIG1lc3NhZ2UuY29udGVudC5ldmVyeSgocGFydCkgPT4ge1xuICAgIGlmKCFwYXJ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmKHBhcnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnQudGV4dCA9PT0gJ3N0cmluZycgJiYgISFwYXJ0LnRleHQudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydC50eXBlID09PSAnaW1hZ2UnICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ3VzZXInICYmIHR5cGVvZiBwYXJ0LnVybCA9PT0gJ3N0cmluZydcbiAgICAgICYmIC9eKGh0dHBzPzpcXC9cXC9bXlxcc10rfGRhdGE6aW1hZ2VcXC8ocG5nfGpwZWd8d2VicHxnaWYpO2Jhc2U2NCxbQS1aYS16MC05Ky9dKz17MCwyfSkkLy50ZXN0KHBhcnQudXJsKVxuICAgICAgJiYgKHBhcnQuZGV0YWlsID09PSB1bmRlZmluZWQgfHwgWydhdXRvJywgJ2hpZ2gnLCAnbG93J10uaW5jbHVkZXMocGFydC5kZXRhaWwpKTtcbiAgfSk7XG59O1xuXG4vKiogU2luZ2xlIHN1Ym1pc3Npb24gdGhyb3VnaCBSaXAtSHVudGVyOyBjYWxsZXJzIG93biBkdXJhYmxlIGpvYnMgYW5kIHJlY29uY2lsaWF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlQ29udGVudCA9IGFzeW5jIChcbiAgaW5wdXQ6IENvbnRlbnRHZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogQ29udGVudEdlbmVyYXRpb25Db25maWcgPSBDb25maWcuZ2V0PENvbnRlbnRHZW5lcmF0aW9uQ29uZmlnPignY29udGVudEdlbmVyYXRpb24nKSB8fCB7fVxuKTogUHJvbWlzZTxHZW5lcmF0ZWRDb250ZW50PiA9PiB7XG4gIGlmKCFbJ2NsYXVkZScsICdnZW1pbmknLCAnZ3JvaycsICdvbGxhbWEnLCAnb3BlbmFpJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignQSBzdXBwb3J0ZWQgcHJvdmlkZXIgaXMgcmVxdWlyZWQuJyk7XG4gIH1cbiAgaWYoaW5wdXQub3V0cHV0VGV4dE1vZGUgIT09IHVuZGVmaW5lZFxuICAgICYmICghWydjbGF1ZGUnLCAnZ2VtaW5pJywgJ29wZW5haScsICdncm9rJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpIHx8IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnIHx8ICFbJ3ByZXNlcnZlJywgJ3RyaW0nXS5pbmNsdWRlcyhpbnB1dC5vdXRwdXRUZXh0TW9kZSkpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignb3V0cHV0VGV4dE1vZGUgcmVxdWlyZXMgYSBDbGF1ZGUsIEdlbWluaSwgT3BlbkFJIG9yIEdyb2sgdGV4dCByZXF1ZXN0IGFuZCBwcmVzZXJ2ZSBvciB0cmltLicpO1xuICB9XG4gIGlmKGlucHV0Lm91dHB1dFRleHRTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCAmJiAoaW5wdXQub3V0cHV0VGV4dE1vZGUgIT09ICdwcmVzZXJ2ZScgfHwgIVsnY2xhdWRlJywgJ2dlbWluaSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSB8fCAhWycnLCAnXFxuJ10uaW5jbHVkZXMoaW5wdXQub3V0cHV0VGV4dFNlcGFyYXRvcikpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignb3V0cHV0VGV4dFNlcGFyYXRvciByZXF1aXJlcyBDbGF1ZGUgb3IgR2VtaW5pIHByZXNlcnZlIG1vZGUgYW5kIGFuIGVtcHR5IG9yIG5ld2xpbmUgc2VwYXJhdG9yLicpO1xuICB9XG4gIGlmKGlucHV0Lm91dHB1dFRleHRGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiAoaW5wdXQub3V0cHV0VGV4dEZpbHRlciAhPT0gJ25vbmJsYW5rJyB8fCBpbnB1dC5vdXRwdXRUZXh0TW9kZSAhPT0gJ3ByZXNlcnZlJyB8fCAhWydjbGF1ZGUnLCAnZ2VtaW5pJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ291dHB1dFRleHRGaWx0ZXIgcmVxdWlyZXMgQ2xhdWRlIG9yIEdlbWluaSBwcmVzZXJ2ZSBtb2RlIGFuZCBub25ibGFuay4nKTtcbiAgfVxuICBpZihpbnB1dC50aGlua2luZ0xldmVsICE9PSB1bmRlZmluZWQgJiYgKGlucHV0LnByb3ZpZGVyICE9PSAnZ2VtaW5pJyB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyB8fCAhWydtaW5pbWFsJywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCddLmluY2x1ZGVzKGlucHV0LnRoaW5raW5nTGV2ZWwpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ3RoaW5raW5nTGV2ZWwgcmVxdWlyZXMgYSBHZW1pbmkgdGV4dCByZXF1ZXN0IGFuZCBhIHN1cHBvcnRlZCBsZXZlbC4nKTtcbiAgfVxuICBpZihpbnB1dC5tZXNzYWdlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYoaW5wdXQucHJvbXB0ICE9PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkoaW5wdXQubWVzc2FnZXMpIHx8ICFpbnB1dC5tZXNzYWdlcy5sZW5ndGhcbiAgICAgIHx8IGlucHV0Lm1lc3NhZ2VzLnNvbWUoKG1lc3NhZ2UpID0+XG4gICAgICAgICFtZXNzYWdlIHx8ICFbJ2Fzc2lzdGFudCcsICdkZXZlbG9wZXInLCAnc3lzdGVtJywgJ3VzZXInXS5pbmNsdWRlcyhtZXNzYWdlLnJvbGUpIHx8ICF2YWxpZE1lc3NhZ2VDb250ZW50KG1lc3NhZ2UpKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignU3VwcGx5IGVpdGhlciBhIG5vbi1lbXB0eSBwcm9tcHQgb3Igbm9uLWVtcHR5IHRleHQgbWVzc2FnZXMgd2l0aCBzdXBwb3J0ZWQgcm9sZXMuJyk7XG4gICAgfVxuICB9IGVsc2UgaWYodHlwZW9mIGlucHV0LnByb21wdCAhPT0gJ3N0cmluZycgfHwgIWlucHV0LnByb21wdC50cmltKCkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdBIG5vbi1lbXB0eSBwcm9tcHQgaXMgcmVxdWlyZWQuJyk7XG4gIH1cbiAgaWYoaW5wdXQucHJvdmlkZXIgIT09ICdvcGVuYWknXG4gICAgJiYgKChpbnB1dC5tZXNzYWdlcyAhPT0gdW5kZWZpbmVkICYmIGlucHV0LnByb3ZpZGVyICE9PSAnZ2VtaW5pJykgfHwgaW5wdXQucmVhc29uaW5nRWZmb3J0ICE9PSB1bmRlZmluZWRcbiAgICAgIHx8IChbJ2NsYXVkZScsICdncm9rJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpICYmIGlucHV0LnJlc3BvbnNlRm9ybWF0ICE9PSB1bmRlZmluZWQpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoXG4gICAgICAnTWVzc2FnZXMgYW5kIHJlYXNvbmluZyBlZmZvcnQgcmVxdWlyZSBPcGVuQUk7IENsYXVkZSBhbmQgR3JvayBkbyBub3Qgc3VwcG9ydCByZXNwb25zZSBmb3JtYXQgb3B0aW9ucy4nXG4gICAgKTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciA9PT0gJ2dlbWluaScgJiYgaW5wdXQubWVzc2FnZXMgIT09IHVuZGVmaW5lZCAmJiAoaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgaW5wdXQuaW1hZ2VzICE9PSB1bmRlZmluZWQgfHwgaW5wdXQubWVzc2FnZXMuc29tZShtZXNzYWdlID0+ICFbJ3VzZXInLCAnYXNzaXN0YW50J10uaW5jbHVkZXMobWVzc2FnZS5yb2xlKSB8fCAoQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpICYmIG1lc3NhZ2UuY29udGVudC5zb21lKHBhcnQgPT4gcGFydC50eXBlICE9PSAndGV4dCcpKSkpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignR2VtaW5pIG1lc3NhZ2VzIHJlcXVpcmUgdXNlciBvciBhc3Npc3RhbnQgcm9sZXMgd2l0aCB0ZXh0LW9ubHkgY29udGVudC4nKTtcbiAgfVxuICBpZihpbnB1dC50aW1lb3V0TXMgIT09IHVuZGVmaW5lZFxuICAgICYmICghTnVtYmVyLmlzSW50ZWdlcihpbnB1dC50aW1lb3V0TXMpIHx8IGlucHV0LnRpbWVvdXRNcyA8IDEgfHwgaW5wdXQudGltZW91dE1zID4gMl8xNDdfNDgzXzY0NykpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCd0aW1lb3V0TXMgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyLicpO1xuICB9XG4gIGlmKGlucHV0LnJlYXNvbmluZ0VmZm9ydCAhPT0gdW5kZWZpbmVkICYmICFbJ25vbmUnLCAnbWluaW1hbCcsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAneGhpZ2gnLCAnbWF4J10uaW5jbHVkZXMoaW5wdXQucmVhc29uaW5nRWZmb3J0KSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ1Vuc3VwcG9ydGVkIHJlYXNvbmluZyBlZmZvcnQuJyk7XG4gIH1cbiAgY29uc3QgZm9ybWF0ID0gaW5wdXQucmVzcG9uc2VGb3JtYXQ7XG4gIGlmKGZvcm1hdCAhPT0gdW5kZWZpbmVkICYmICghZm9ybWF0IHx8ICFbJ3RleHQnLCAnanNvbl9vYmplY3QnLCAnanNvbl9zY2hlbWEnXS5pbmNsdWRlcyhmb3JtYXQudHlwZSkgfHwgKGZvcm1hdC50eXBlID09PSAnanNvbl9zY2hlbWEnICYmIChcbiAgICB0eXBlb2YgZm9ybWF0Lm5hbWUgIT09ICdzdHJpbmcnIHx8ICEvXlthLXpBLVowLTlfLV17MSw2NH0kLy50ZXN0KGZvcm1hdC5uYW1lKSB8fCAhZm9ybWF0LnNjaGVtYSB8fCB0eXBlb2YgZm9ybWF0LnNjaGVtYSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShmb3JtYXQuc2NoZW1hKVxuICAgIHx8IChmb3JtYXQuc3RyaWN0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGZvcm1hdC5zdHJpY3QgIT09ICdib29sZWFuJylcbiAgKSkpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignSW52YWxpZCByZXNwb25zZSBmb3JtYXQuIEpTT04gc2NoZW1hcyByZXF1aXJlIGEgbmFtZSBhbmQgc2NoZW1hIG9iamVjdC4nKTtcbiAgfVxuICBpZihbJ2dlbWluaScsICdvbGxhbWEnXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgJiYgZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgKGZvcm1hdC50eXBlID09PSAnanNvbl9zY2hlbWEnIHx8IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ1RoaXMgcHJvdmlkZXIgc3VwcG9ydHMgdGV4dCBvciBqc29uX29iamVjdCBmb3IgdGV4dCBnZW5lcmF0aW9uIG9ubHkuJyk7XG4gIH1cbiAgaWYoaW5wdXQudG9wUCAhPT0gdW5kZWZpbmVkICYmICghWydnZW1pbmknLCAnb2xsYW1hJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpIHx8IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnIHx8ICFOdW1iZXIuaXNGaW5pdGUoaW5wdXQudG9wUCkgfHwgaW5wdXQudG9wUCA8IDAgfHwgaW5wdXQudG9wUCA+IDEpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcigndG9wUCByZXF1aXJlcyBhIEdlbWluaSBvciBPbGxhbWEgdGV4dCByZXF1ZXN0IGFuZCBhIGZpbml0ZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuJyk7XG4gIH1cbiAgaWYoaW5wdXQudGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCAmJiAoIVsnZ2VtaW5pJywgJ29sbGFtYSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyB8fCAhTnVtYmVyLmlzRmluaXRlKGlucHV0LnRlbXBlcmF0dXJlKSB8fCBpbnB1dC50ZW1wZXJhdHVyZSA8IDAgfHwgKGlucHV0LnByb3ZpZGVyID09PSAnZ2VtaW5pJyAmJiBpbnB1dC50ZW1wZXJhdHVyZSA+IDIpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ3RlbXBlcmF0dXJlIHJlcXVpcmVzIGEgbm9ubmVnYXRpdmUgZmluaXRlIHZhbHVlIGZvciBPbGxhbWEgdGV4dCBvciBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMiBmb3IgR2VtaW5pIHRleHQuJyk7XG4gIH1cbiAgaWYoaW5wdXQubWF4VG9rZW5zICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlucHV0Lm1heFRva2VucykgfHwgaW5wdXQubWF4VG9rZW5zIDwgMSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdtYXhUb2tlbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG4gIH1cbiAgaWYoaW5wdXQucHJvdmlkZXIgIT09ICdnZW1pbmknXG4gICAgJiYgKChpbnB1dC5pbWFnZXM/Lmxlbmd0aCAmJiAhWydncm9rJywgJ29sbGFtYSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSkgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgaW5wdXQuc2VhcmNoKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ1RoaXMgcHJvdmlkZXIgb3BlcmF0aW9uIHN1cHBvcnRzIHRleHQgaW5wdXQgYW5kIG91dHB1dCBvbmx5LicpO1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnb2xsYW1hJykgcmV0dXJuIGdlbmVyYXRlT2xsYW1hQ29udGVudChpbnB1dCwgY29uZmlnKTtcbiAgY29uc3Qge3Byb21wdCwgaW1hZ2VzID0gW119ID0gaW5wdXQ7XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnY2xhdWRlJykge1xuICAgIGlmKCFjb25maWcuY2xhdWRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdDbGF1ZGUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBzZXJ2ZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCgnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcycsIHtcbiAgICAgIG1heF90b2tlbnM6IGlucHV0Lm1heFRva2VucyA/PyA0MDk2LFxuICAgICAgbWVzc2FnZXM6IFt7Y29udGVudDogcHJvbXB0LCByb2xlOiAndXNlcid9XSxcbiAgICAgIG1vZGVsOiBpbnB1dC5tb2RlbCB8fCBjb25maWcuY2xhdWRlTW9kZWwgfHwgJ2NsYXVkZS1zb25uZXQtNScsXG4gICAgICBzeXN0ZW06IGlucHV0LnN5c3RlbVxuICAgIH0sIHtjYWNoZTogZmFsc2UsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsnYW50aHJvcGljLXZlcnNpb24nOiAnMjAyMy0wNi0wMScsICd4LWFwaS1rZXknOiBjb25maWcuY2xhdWRlS2V5fSksIHRpbWVvdXQ6IGlucHV0LnRpbWVvdXRNcyA/PyAxMjBfMDAwfSkgYXMge1xuICAgICAgY29udGVudD86IHt0ZXh0Pzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfVtdO1xuICAgICAgZXJyb3I/OiB7dHlwZT86IHN0cmluZ307XG4gICAgICBzdG9wX3JlYXNvbj86IHN0cmluZztcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBpZihyZXNwb25zZS5lcnJvciAmJiBbJ2F1dGhlbnRpY2F0aW9uX2Vycm9yJywgJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicsICdub3RfZm91bmRfZXJyb3InLCAncGVybWlzc2lvbl9lcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLmVycm9yLnR5cGUgfHwgJycpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdDbGF1ZGUgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuIENoZWNrIHRoZSBtb2RlbCBhbmQgYWNjb3VudCBhY2Nlc3MuJyk7XG4gICAgfVxuICAgIGNvbnN0IHByZXNlcnZlID0gaW5wdXQub3V0cHV0VGV4dE1vZGUgPT09ICdwcmVzZXJ2ZSc7XG4gICAgaWYocHJlc2VydmUgJiYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmNvbnRlbnQpIHx8IHJlc3BvbnNlLmNvbnRlbnQuc29tZSgocGFydCkgPT5cbiAgICAgICFwYXJ0IHx8ICFbJ3RleHQnLCAndGhpbmtpbmcnLCAncmVkYWN0ZWRfdGhpbmtpbmcnXS5pbmNsdWRlcyhwYXJ0LnR5cGUgfHwgJycpIHx8IChwYXJ0LnR5cGUgPT09ICd0ZXh0JyAmJiB0eXBlb2YgcGFydC50ZXh0ICE9PSAnc3RyaW5nJykpKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignQ2xhdWRlIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGNodW5rcyA9IChyZXNwb25zZS5jb250ZW50Py5maWx0ZXIoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gJ3RleHQnKS5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykgfHwgW10pLmZpbHRlcih0ZXh0ID0+IGlucHV0Lm91dHB1dFRleHRGaWx0ZXIgIT09ICdub25ibGFuaycgfHwgISF0ZXh0LnRyaW0oKSk7XG4gICAgY29uc3QgdGV4dCA9IHByZXNlcnZlID8gY2h1bmtzLmpvaW4oaW5wdXQub3V0cHV0VGV4dFNlcGFyYXRvciA/PyAnJykgOiBjaHVua3Muam9pbignXFxuJykudHJpbSgpO1xuICAgIGlmKHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLnR5cGUgIT09ICdtZXNzYWdlJyB8fCByZXNwb25zZS5zdG9wX3JlYXNvbiAhPT0gJ2VuZF90dXJuJyB8fCAhdGV4dC50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0NsYXVkZSByZXNwb25zZSBjb3VsZCBub3QgYmUgY29uZmlybWVkLicpO1xuICAgIH1cbiAgICByZXR1cm4ge3NvdXJjZXM6IFtdLCB0ZXh0fTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciA9PT0gJ29wZW5haScgfHwgaW5wdXQucHJvdmlkZXIgPT09ICdncm9rJykge1xuICAgIGNvbnN0IGdyb2sgPSBpbnB1dC5wcm92aWRlciA9PT0gJ2dyb2snO1xuICAgIGNvbnN0IGtleSA9IGdyb2sgPyBjb25maWcuZ3Jva0tleSA6IGNvbmZpZy5vcGVuYWlLZXk7XG4gICAgaWYoIWtleSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcihgJHtncm9rID8gJ0dyb2snIDogJ09wZW5BSSd9IGlzIG5vdCBjb25maWd1cmVkIG9uIHRoaXMgc2VydmVyLmApO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3QoZ3JvayA/ICdodHRwczovL2FwaS54LmFpL3YxL3Jlc3BvbnNlcycgOiAnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9yZXNwb25zZXMnLCB7XG4gICAgICBpbnB1dDogZ3JvayAmJiBpbWFnZXMubGVuZ3RoID8gW3tjb250ZW50OiBbe3RleHQ6IHByb21wdCwgdHlwZTogJ2lucHV0X3RleHQnfSwgLi4uaW1hZ2VzLm1hcCgoaW1hZ2UpID0+ICh7aW1hZ2VfdXJsOiBgZGF0YToke2ltYWdlLm1pbWV9O2Jhc2U2NCwke2ltYWdlLmJ5dGVzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLCB0eXBlOiAnaW5wdXRfaW1hZ2UnfSkpXSwgcm9sZTogJ3VzZXInfV0gOiBpbnB1dC5tZXNzYWdlcz8ubWFwKChtZXNzYWdlKSA9PiAoe2NvbnRlbnQ6IHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gbWVzc2FnZS5jb250ZW50IDogbWVzc2FnZS5jb250ZW50Lm1hcCgocGFydCkgPT4gKHBhcnQudHlwZSA9PT0gJ3RleHQnXG4gICAgICAgID8ge3RleHQ6IHBhcnQudGV4dCwgdHlwZTogJ2lucHV0X3RleHQnfSA6IHtkZXRhaWw6IHBhcnQuZGV0YWlsID8/ICdhdXRvJywgaW1hZ2VfdXJsOiBwYXJ0LnVybCwgdHlwZTogJ2lucHV0X2ltYWdlJ30pKSwgcm9sZTogbWVzc2FnZS5yb2xlID09PSAnc3lzdGVtJyA/ICdkZXZlbG9wZXInIDogbWVzc2FnZS5yb2xlfSkpID8/IHByb21wdCxcbiAgICAgIGluc3RydWN0aW9uczogaW5wdXQuc3lzdGVtLFxuICAgICAgbWF4X291dHB1dF90b2tlbnM6IGlucHV0Lm1heFRva2VucyA/PyA0MDk2LFxuICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsIHx8IChncm9rID8gY29uZmlnLmdyb2tNb2RlbCB8fCAnZ3Jvay00LjcnIDogY29uZmlnLm9wZW5haU1vZGVsIHx8ICdncHQtNi1hc3RyYScpLFxuICAgICAgLi4uKGlucHV0LnJlYXNvbmluZ0VmZm9ydCA/IHtyZWFzb25pbmc6IHtlZmZvcnQ6IGlucHV0LnJlYXNvbmluZ0VmZm9ydH19IDoge30pLFxuICAgICAgc3RvcmU6IGZhbHNlLFxuICAgICAgLi4uKGZvcm1hdCA/IHt0ZXh0OiB7Zm9ybWF0fX0gOiB7fSksXG4gICAgICAuLi4oIWdyb2sgPyB7dHJ1bmNhdGlvbjogJ2Rpc2FibGVkJ30gOiB7fSlcbiAgICB9LCB7Y2FjaGU6IGZhbHNlLCBoZWFkZXJzOiBuZXcgSGVhZGVycyh7QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2tleX1gfSksIHRpbWVvdXQ6IGlucHV0LnRpbWVvdXRNcyA/PyAxMjBfMDAwfSkgYXMge1xuICAgICAgZXJyb3I/OiB7Y29kZT86IHN0cmluZzsgdHlwZT86IHN0cmluZ307XG4gICAgICBvdXRwdXQ/OiB7Y29udGVudD86IHt0ZXh0Pzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfVtdOyBzdGF0dXM/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmd9W107XG4gICAgICBzdGF0dXM/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBpZihyZXNwb25zZS5lcnJvciAmJiBbJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicsICdhdXRoZW50aWNhdGlvbl9lcnJvcicsICdwZXJtaXNzaW9uX2Vycm9yJ10uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IudHlwZSB8fCAnJykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoYCR7Z3JvayA/ICdHcm9rJyA6ICdPcGVuQUknfSByZWplY3RlZCB0aGUgcmVxdWVzdC4gQ2hlY2sgdGhlIG1vZGVsIGFuZCBhY2NvdW50IGFjY2Vzcy5gKTtcbiAgICB9XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzICE9PSAnY29tcGxldGVkJyB8fCByZXNwb25zZS5vdXRwdXQ/LnNvbWUoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnaW5jb21wbGV0ZScpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKGAke2dyb2sgPyAnR3JvaycgOiAnT3BlbkFJJ30gcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZDogZ2VuZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlLmApO1xuICAgIH1cbiAgICBpZihyZXNwb25zZS5vdXRwdXQ/LnNvbWUoKGl0ZW0pID0+IGl0ZW0uY29udGVudD8uc29tZSgocGFydCkgPT4gcGFydC50eXBlID09PSAncmVmdXNhbCcpKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcihgJHtncm9rID8gJ0dyb2snIDogJ09wZW5BSSd9IGRlY2xpbmVkIHRoZSByZXF1ZXN0LmApO1xuICAgIH1cbiAgICBpZihyZXNwb25zZS5vdXRwdXQ/LnNvbWUoKGl0ZW0pID0+IGl0ZW0udHlwZSAmJiAhWydtZXNzYWdlJywgJ3JlYXNvbmluZyddLmluY2x1ZGVzKGl0ZW0udHlwZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKGAke2dyb2sgPyAnR3JvaycgOiAnT3BlbkFJJ30gcmV0dXJuZWQgYW4gdW5zdXBwb3J0ZWQgb3V0cHV0IGl0ZW0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSByZXNwb25zZS5vdXRwdXQ/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnbWVzc2FnZScgfHwgKGdyb2sgJiYgIWl0ZW0udHlwZSkpLmZsYXRNYXAoKGl0ZW0pID0+IGl0ZW0uY29udGVudCB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gJ291dHB1dF90ZXh0JykubWFwKChwYXJ0KSA9PiBwYXJ0LnRleHQgfHwgJycpLmpvaW4oJycpIHx8ICcnO1xuICAgIGlmKCF0ZXh0LnRyaW0oKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcihgJHtncm9rID8gJ0dyb2snIDogJ09wZW5BSSd9IHJldHVybmVkIGVtcHR5IG91dHB1dC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtzb3VyY2VzOiBbXSwgdGV4dDogaW5wdXQub3V0cHV0VGV4dE1vZGUgPT09ICdwcmVzZXJ2ZScgPyB0ZXh0IDogdGV4dC50cmltKCl9O1xuICB9XG4gIGlmKCFjb25maWcuZ2VtaW5pS2V5KSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignR2VtaW5pIGlzIG5vdCBjb25maWd1cmVkIG9uIHRoaXMgc2VydmVyLicpO1xuICB9XG4gIGNvbnN0IHBhcnRzOiB1bmtub3duW10gPSBbe3RleHQ6IHByb21wdH0sIC4uLmltYWdlcy5tYXAoKGltYWdlKSA9PiAoe2lubGluZURhdGE6IHtkYXRhOiBpbWFnZS5ieXRlcy50b1N0cmluZygnYmFzZTY0JyksIG1pbWVUeXBlOiBpbWFnZS5taW1lfX0pKV07XG4gIGNvbnN0IG1vZGVsID0gaW5wdXQubW9kZWwgfHwgKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gY29uZmlnLmdlbWluaUltYWdlTW9kZWwgfHwgJ2dlbWluaS0zLjEtZmxhc2gtaW1hZ2UnIDogY29uZmlnLmdlbWluaU1vZGVsIHx8ICdnZW1pbmktMy44LWZsYXNoJyk7XG4gIGlmKCEvXlthLXpBLVowLTkuXy1dKyQvLnRlc3QobW9kZWwpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignSW52YWxpZCBHZW1pbmkgbW9kZWwgY29uZmlndXJhdGlvbi4nKTtcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3QoYGh0dHBzOi8vZ2VuZXJhdGl2ZWxhbmd1YWdlLmdvb2dsZWFwaXMuY29tL3YxYmV0YS9tb2RlbHMvJHttb2RlbH06Z2VuZXJhdGVDb250ZW50YCwge1xuICAgIGNvbnRlbnRzOiBpbnB1dC5tZXNzYWdlcz8ubWFwKG1lc3NhZ2UgPT4gKHtwYXJ0czogdHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycgPyBbe3RleHQ6IG1lc3NhZ2UuY29udGVudH1dIDogbWVzc2FnZS5jb250ZW50Lm1hcChwYXJ0ID0+ICh7dGV4dDogKHBhcnQgYXMgRXh0cmFjdDxDb250ZW50R2VuZXJhdGlvblBhcnQsIHt0eXBlOiAndGV4dCd9PikudGV4dH0pKSwgcm9sZTogbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyA/ICdtb2RlbCcgOiAndXNlcid9KSkgPz8gW3twYXJ0cywgcm9sZTogJ3VzZXInfV0sXG4gICAgLi4uKGlucHV0LnN5c3RlbSA/IHtzeXN0ZW1JbnN0cnVjdGlvbjoge3BhcnRzOiBbe3RleHQ6IGlucHV0LnN5c3RlbX1dfX0gOiB7fSksXG4gICAgZ2VuZXJhdGlvbkNvbmZpZzogaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgPyB7Li4uKGlucHV0LmFzcGVjdFJhdGlvID8ge2ltYWdlQ29uZmlnOiB7YXNwZWN0UmF0aW86IGlucHV0LmFzcGVjdFJhdGlvfX0gOiB7fSksIHJlc3BvbnNlTW9kYWxpdGllczogWydURVhUJywgJ0lNQUdFJ119IDoge1xuICAgICAgbWF4T3V0cHV0VG9rZW5zOiBpbnB1dC5tYXhUb2tlbnMgPz8gNDA5NixcbiAgICAgIC4uLihmb3JtYXQgPyB7cmVzcG9uc2VNaW1lVHlwZTogZm9ybWF0LnR5cGUgPT09ICdqc29uX29iamVjdCcgPyAnYXBwbGljYXRpb24vanNvbicgOiAndGV4dC9wbGFpbid9IDoge30pLFxuICAgICAgLi4uKGlucHV0LnRlbXBlcmF0dXJlICE9PSB1bmRlZmluZWQgPyB7dGVtcGVyYXR1cmU6IGlucHV0LnRlbXBlcmF0dXJlfSA6IHt9KSxcbiAgICAgIC4uLihpbnB1dC50b3BQICE9PSB1bmRlZmluZWQgPyB7dG9wUDogaW5wdXQudG9wUH0gOiB7fSksXG4gICAgICAuLi4oaW5wdXQudGhpbmtpbmdMZXZlbCAhPT0gdW5kZWZpbmVkID8ge3RoaW5raW5nQ29uZmlnOiB7dGhpbmtpbmdMZXZlbDogaW5wdXQudGhpbmtpbmdMZXZlbH19IDoge30pXG4gICAgfSxcbiAgICAuLi4oaW5wdXQuc2VhcmNoID8ge3Rvb2xzOiBbe2dvb2dsZVNlYXJjaDoge319XX0gOiB7fSlcbiAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoeyd4LWdvb2ctYXBpLWtleSc6IGNvbmZpZy5nZW1pbmlLZXl9KSwgdGltZW91dDogaW5wdXQudGltZW91dE1zID8/IDEyMF8wMDB9KSBhcyBHZW1pbmlSZXNwb25zZTtcbiAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWzQwMCwgNDAxLCA0MDMsIDQwNF0uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IuY29kZSB8fCAwKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0dlbWluaSByZWplY3RlZCB0aGUgcmVxdWVzdC4gQ2hlY2sgdGhlIHJlZmVyZW5jZSBmb3JtYXQgYW5kIG1vZGVsIGFjY2Vzcy4nKTtcbiAgfVxuICBpZihyZXNwb25zZS5wcm9tcHRGZWVkYmFjaz8uYmxvY2tSZWFzb24gfHwgcmVzcG9uc2UuZXJyb3IgfHwgIXJlc3BvbnNlLmNhbmRpZGF0ZXM/Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0dlbWluaSByZXNwb25zZSBjb3VsZCBub3QgYmUgY29uZmlybWVkLicpO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHJlc3BvbnNlLmNhbmRpZGF0ZXNbMF0hO1xuICBpZihjYW5kaWRhdGUuZmluaXNoUmVhc29uICE9PSAnU1RPUCcpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdHZW1pbmkgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZDogZ2VuZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlLicpO1xuICB9XG4gIGNvbnN0IHByZXNlcnZlID0gaW5wdXQub3V0cHV0VGV4dE1vZGUgPT09ICdwcmVzZXJ2ZSc7XG4gIGlmKHByZXNlcnZlICYmICghQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuY29udGVudD8ucGFydHMpIHx8IGNhbmRpZGF0ZS5jb250ZW50LnBhcnRzLnNvbWUocGFydCA9PiAhcGFydCB8fCAocGFydC50aG91Z2h0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHBhcnQudGhvdWdodCAhPT0gJ2Jvb2xlYW4nKSB8fCBPYmplY3Qua2V5cyhwYXJ0KS5zb21lKGtleSA9PiAhWyd0ZXh0JywgJ3Rob3VnaHQnLCAndGhvdWdodFNpZ25hdHVyZSddLmluY2x1ZGVzKGtleSkpIHx8ICghcGFydC50aG91Z2h0ICYmIHR5cGVvZiBwYXJ0LnRleHQgIT09ICdzdHJpbmcnKSkpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignR2VtaW5pIHJlc3BvbnNlIHRleHQgcGFydHMgY291bGQgbm90IGJlIGNvbmZpcm1lZC4nKTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSAoY2FuZGlkYXRlLmNvbnRlbnQ/LnBhcnRzIHx8IFtdKS5maWx0ZXIoKHBhcnQpID0+ICFwYXJ0LnRob3VnaHQpO1xuICBjb25zdCBpbmxpbmUgPSBvdXRwdXQuZmluZCgocGFydCkgPT4gcGFydC5pbmxpbmVEYXRhKT8uaW5saW5lRGF0YTtcbiAgbGV0IGltYWdlOiBHZW5lcmF0ZWRDb250ZW50WydpbWFnZSddO1xuICBpZihpbmxpbmUgJiYgWydpbWFnZS9wbmcnLCAnaW1hZ2UvanBlZyddLmluY2x1ZGVzKGlubGluZS5taW1lVHlwZSkpIHtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKGlubGluZS5kYXRhLCAnYmFzZTY0Jyk7XG4gICAgaWYoIWJ5dGVzLmxlbmd0aCB8fCBieXRlcy5sZW5ndGggPiAyMCAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdJbnZhbGlkIGltYWdlIG91dHB1dC4nKTtcbiAgICB9XG4gICAgaW1hZ2UgPSB7Ynl0ZXMsIG1pbWU6IGlubGluZS5taW1lVHlwZSBhcyAnaW1hZ2UvcG5nJyB8ICdpbWFnZS9qcGVnJ307XG4gIH1cbiAgY29uc3QgY2h1bmtzID0gb3V0cHV0Lm1hcCgocGFydCkgPT4gcGFydC50ZXh0IHx8ICcnKS5maWx0ZXIodGV4dCA9PiBpbnB1dC5vdXRwdXRUZXh0RmlsdGVyICE9PSAnbm9uYmxhbmsnIHx8ICEhdGV4dC50cmltKCkpO1xuICBjb25zdCB0ZXh0ID0gcHJlc2VydmUgPyBjaHVua3Muam9pbihpbnB1dC5vdXRwdXRUZXh0U2VwYXJhdG9yID8/ICcnKSA6IGNodW5rcy5qb2luKCdcXG4nKS50cmltKCk7XG4gIGlmKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gIWltYWdlIDogIXRleHQudHJpbSgpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignVGhlIHJlcXVlc3RlZCBvdXRwdXQgd2FzIG5vdCByZXR1cm5lZC4nKTtcbiAgfVxuICBjb25zdCBzb3VyY2VzID0gKGNhbmRpZGF0ZS5ncm91bmRpbmdNZXRhZGF0YT8uZ3JvdW5kaW5nQ2h1bmtzIHx8IFtdKS5mbGF0TWFwKCh7d2VifSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdlYj8udXJpIHx8ICcnKTtcbiAgICAgIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gW3t0aXRsZTogd2ViPy50aXRsZSB8fCB1cmwuaG9zdG5hbWUsIHVybDogdXJsLmhyZWZ9XSA6IFtdO1xuICAgIH0gY2F0Y2h7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpbWFnZSwgc2VhcmNoU3VnZ2VzdGlvbnNIdG1sOiBjYW5kaWRhdGUuZ3JvdW5kaW5nTWV0YWRhdGE/LnNlYXJjaEVudHJ5UG9pbnQ/LnJlbmRlcmVkQ29udGVudCwgc291cmNlcywgdGV4dFxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9sbGFtYUNvbnRlbnQiLCJDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IiLCJDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IiLCJwb3N0IiwiQ29uZmlnIiwidmFsaWRNZXNzYWdlQ29udGVudCIsIm1lc3NhZ2UiLCJjb250ZW50IiwidHJpbSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImV2ZXJ5IiwicGFydCIsInR5cGUiLCJ0ZXh0Iiwicm9sZSIsInVybCIsInRlc3QiLCJkZXRhaWwiLCJ1bmRlZmluZWQiLCJpbmNsdWRlcyIsImdlbmVyYXRlQ29udGVudCIsImlucHV0IiwiY29uZmlnIiwiZ2V0IiwicHJvdmlkZXIiLCJvdXRwdXRUZXh0TW9kZSIsIm1vZGFsaXR5Iiwib3V0cHV0VGV4dFNlcGFyYXRvciIsIm91dHB1dFRleHRGaWx0ZXIiLCJ0aGlua2luZ0xldmVsIiwibWVzc2FnZXMiLCJwcm9tcHQiLCJzb21lIiwicmVhc29uaW5nRWZmb3J0IiwicmVzcG9uc2VGb3JtYXQiLCJpbWFnZXMiLCJ0aW1lb3V0TXMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJmb3JtYXQiLCJuYW1lIiwic2NoZW1hIiwic3RyaWN0IiwidG9wUCIsImlzRmluaXRlIiwidGVtcGVyYXR1cmUiLCJtYXhUb2tlbnMiLCJzZWFyY2giLCJjbGF1ZGVLZXkiLCJyZXNwb25zZSIsIm1heF90b2tlbnMiLCJtb2RlbCIsImNsYXVkZU1vZGVsIiwic3lzdGVtIiwiY2FjaGUiLCJoZWFkZXJzIiwiSGVhZGVycyIsInRpbWVvdXQiLCJlcnJvciIsInByZXNlcnZlIiwiY2h1bmtzIiwiZmlsdGVyIiwibWFwIiwiam9pbiIsInN0b3BfcmVhc29uIiwic291cmNlcyIsImdyb2siLCJrZXkiLCJncm9rS2V5Iiwib3BlbmFpS2V5IiwiaW1hZ2UiLCJpbWFnZV91cmwiLCJtaW1lIiwiYnl0ZXMiLCJ0b1N0cmluZyIsImluc3RydWN0aW9ucyIsIm1heF9vdXRwdXRfdG9rZW5zIiwiZ3Jva01vZGVsIiwib3BlbmFpTW9kZWwiLCJyZWFzb25pbmciLCJlZmZvcnQiLCJzdG9yZSIsInRydW5jYXRpb24iLCJBdXRob3JpemF0aW9uIiwic3RhdHVzIiwib3V0cHV0IiwiaXRlbSIsImZsYXRNYXAiLCJnZW1pbmlLZXkiLCJwYXJ0cyIsImlubGluZURhdGEiLCJkYXRhIiwibWltZVR5cGUiLCJnZW1pbmlJbWFnZU1vZGVsIiwiZ2VtaW5pTW9kZWwiLCJjb250ZW50cyIsInN5c3RlbUluc3RydWN0aW9uIiwiZ2VuZXJhdGlvbkNvbmZpZyIsImFzcGVjdFJhdGlvIiwiaW1hZ2VDb25maWciLCJyZXNwb25zZU1vZGFsaXRpZXMiLCJtYXhPdXRwdXRUb2tlbnMiLCJyZXNwb25zZU1pbWVUeXBlIiwidGhpbmtpbmdDb25maWciLCJ0b29scyIsImdvb2dsZVNlYXJjaCIsImNvZGUiLCJwcm9tcHRGZWVkYmFjayIsImJsb2NrUmVhc29uIiwiY2FuZGlkYXRlcyIsImNhbmRpZGF0ZSIsImZpbmlzaFJlYXNvbiIsInRob3VnaHQiLCJPYmplY3QiLCJrZXlzIiwiaW5saW5lIiwiZmluZCIsIkJ1ZmZlciIsImZyb20iLCJncm91bmRpbmdNZXRhZGF0YSIsImdyb3VuZGluZ0NodW5rcyIsIndlYiIsIlVSTCIsInVyaSIsInByb3RvY29sIiwidGl0bGUiLCJob3N0bmFtZSIsImhyZWYiLCJzZWFyY2hTdWdnZXN0aW9uc0h0bWwiLCJzZWFyY2hFbnRyeVBvaW50IiwicmVuZGVyZWRDb250ZW50Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxxQkFBcUIsUUFBTyx3QkFBd0I7QUFDNUQsU0FBUUMsOEJBQThCLEVBQUVDLDhCQUE4QixRQUFPLCtCQUErQjtBQUM1RyxTQUFRRCw4QkFBOEIsRUFBRUMsOEJBQThCLFFBQU8sK0JBQStCO0FBQzVHLFNBQVFDLElBQUksUUFBTyxvQkFBb0I7QUFFdkMsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUF5RXBDLE1BQU1DLHNCQUFzQixDQUFDQztJQUMzQixJQUFHLE9BQU9BLFFBQVFDLE9BQU8sS0FBSyxVQUFVO1FBQ3RDLE9BQU8sQ0FBQyxDQUFDRCxRQUFRQyxPQUFPLENBQUNDLElBQUk7SUFD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
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udGVudEdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZW5lcmF0ZU9sbGFtYUNvbnRlbnR9IGZyb20gJy4vb2xsYW1hR2VuZXJhdGlvbi5qcyc7XG5pbXBvcnQge0NvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvciwgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yfSBmcm9tICcuL2NvbnRlbnRHZW5lcmF0aW9uRXJyb3JzLmpzJztcbmV4cG9ydCB7Q29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yLCBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3J9IGZyb20gJy4vY29udGVudEdlbmVyYXRpb25FcnJvcnMuanMnO1xuaW1wb3J0IHtwb3N0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRHZW5lcmF0aW9uQ29uZmlnIHtcbiAgY2xhdWRlS2V5Pzogc3RyaW5nO1xuICBjbGF1ZGVNb2RlbD86IHN0cmluZztcbiAgZ2VtaW5pSW1hZ2VNb2RlbD86IHN0cmluZztcbiAgZ2VtaW5pS2V5Pzogc3RyaW5nO1xuICBnZW1pbmlNb2RlbD86IHN0cmluZztcbiAgZ3Jva0tleT86IHN0cmluZztcbiAgZ3Jva01vZGVsPzogc3RyaW5nO1xuICBvbGxhbWE/OiB7ZW5kcG9pbnQ6IHN0cmluZzsgcHJvdG9jb2w6ICdnZW5lcmF0ZScgfCAnY2hhdCcgfCAnb3BlbmFpLWNoYXQnfTtcbiAgb3BlbmFpS2V5Pzogc3RyaW5nO1xuICBvcGVuYWlNb2RlbD86IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIENvbnRlbnRHZW5lcmF0aW9uUGFydCA9IHt0ZXh0OiBzdHJpbmc7IHR5cGU6ICd0ZXh0J30gfCB7XG4gIGRldGFpbD86ICdhdXRvJyB8ICdoaWdoJyB8ICdsb3cnO1xuICB0eXBlOiAnaW1hZ2UnO1xuICB1cmw6IHN0cmluZztcbn07XG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRHZW5lcmF0aW9uTWVzc2FnZSB7XG4gIGNvbnRlbnQ6IHN0cmluZyB8IENvbnRlbnRHZW5lcmF0aW9uUGFydFtdO1xuICByb2xlOiAnYXNzaXN0YW50JyB8ICdkZXZlbG9wZXInIHwgJ3N5c3RlbScgfCAndXNlcic7XG59XG5leHBvcnQgdHlwZSBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRm9ybWF0ID0ge3R5cGU6ICdqc29uX29iamVjdCcgfCAndGV4dCd9IHwge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdHJpY3Q/OiBib29sZWFuO1xuICB0eXBlOiAnanNvbl9zY2hlbWEnO1xufTtcbmV4cG9ydCB0eXBlIENvbnRlbnRHZW5lcmF0aW9uUmVhc29uaW5nRWZmb3J0ID0gJ25vbmUnIHwgJ21pbmltYWwnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICd4aGlnaCcgfCAnbWF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50R2VuZXJhdGlvbklucHV0IHtcbiAgYXNwZWN0UmF0aW8/OiBzdHJpbmc7XG4gIGltYWdlcz86IHtieXRlczogQnVmZmVyOyBtaW1lOiBzdHJpbmd9W107XG4gIG1heFRva2Vucz86IG51bWJlcjtcbiAgbWVzc2FnZXM/OiBDb250ZW50R2VuZXJhdGlvbk1lc3NhZ2VbXTtcbiAgbW9kYWxpdHk/OiAnaW1hZ2UnIHwgJ3RleHQnO1xuICBtb2RlbD86IHN0cmluZztcbiAgb3V0cHV0VGV4dEZpbHRlcj86ICdub25ibGFuayc7XG4gIG91dHB1dFRleHRNb2RlPzogJ3ByZXNlcnZlJyB8ICd0cmltJztcbiAgb3V0cHV0VGV4dFNlcGFyYXRvcj86ICcnIHwgJ1xcbic7XG4gIHByb21wdD86IHN0cmluZztcbiAgcHJvdmlkZXI6ICdjbGF1ZGUnIHwgJ2dlbWluaScgfCAnZ3JvaycgfCAnb2xsYW1hJyB8ICdvcGVuYWknO1xuICByZWFzb25pbmdFZmZvcnQ/OiBDb250ZW50R2VuZXJhdGlvblJlYXNvbmluZ0VmZm9ydDtcbiAgcmVzcG9uc2VGb3JtYXQ/OiBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRm9ybWF0O1xuICBzZWFyY2g/OiBib29sZWFuO1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICB0aGlua2luZ0xldmVsPzogJ21pbmltYWwnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICB0b3BQPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRDb250ZW50IHtcbiAgaW1hZ2U/OiB7Ynl0ZXM6IEJ1ZmZlcjsgbWltZTogJ2ltYWdlL2pwZWcnIHwgJ2ltYWdlL3BuZyd9O1xuICBzZWFyY2hTdWdnZXN0aW9uc0h0bWw/OiBzdHJpbmc7XG4gIHNvdXJjZXM6IHt0aXRsZTogc3RyaW5nOyB1cmw6IHN0cmluZ31bXTtcbiAgdGV4dDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEdlbWluaVBhcnQge2lubGluZURhdGE/OiB7ZGF0YTogc3RyaW5nOyBtaW1lVHlwZTogc3RyaW5nfTsgdGV4dD86IHN0cmluZzsgdGhvdWdodD86IGJvb2xlYW59XG5pbnRlcmZhY2UgR2VtaW5pUmVzcG9uc2Uge1xuICBjYW5kaWRhdGVzPzoge1xuICAgIGNvbnRlbnQ/OiB7cGFydHM/OiBHZW1pbmlQYXJ0W119O1xuICAgIGZpbmlzaFJlYXNvbj86IHN0cmluZztcbiAgICBncm91bmRpbmdNZXRhZGF0YT86IHtcbiAgICAgIGdyb3VuZGluZ0NodW5rcz86IHt3ZWI/OiB7dGl0bGU/OiBzdHJpbmc7IHVyaT86IHN0cmluZ319W107XG4gICAgICBzZWFyY2hFbnRyeVBvaW50Pzoge3JlbmRlcmVkQ29udGVudD86IHN0cmluZ307XG4gICAgfTtcbiAgfVtdO1xuICBlcnJvcj86IHtjb2RlPzogbnVtYmVyfTtcbiAgcHJvbXB0RmVlZGJhY2s/OiB7YmxvY2tSZWFzb24/OiBzdHJpbmd9O1xufVxuXG5jb25zdCB2YWxpZE1lc3NhZ2VDb250ZW50ID0gKG1lc3NhZ2U6IENvbnRlbnRHZW5lcmF0aW9uTWVzc2FnZSk6IGJvb2xlYW4gPT4ge1xuICBpZih0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAhIW1lc3NhZ2UuY29udGVudC50cmltKCk7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSAmJiBtZXNzYWdlLmNvbnRlbnQubGVuZ3RoID4gMCAmJiBtZXNzYWdlLmNvbnRlbnQuZXZlcnkoKHBhcnQpID0+IHtcbiAgICBpZighcGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZihwYXJ0LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0LnRleHQgPT09ICdzdHJpbmcnICYmICEhcGFydC50ZXh0LnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnQudHlwZSA9PT0gJ2ltYWdlJyAmJiBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyAmJiB0eXBlb2YgcGFydC51cmwgPT09ICdzdHJpbmcnXG4gICAgICAmJiAvXihodHRwcz86XFwvXFwvW15cXHNdK3xkYXRhOmltYWdlXFwvKHBuZ3xqcGVnfHdlYnB8Z2lmKTtiYXNlNjQsW0EtWmEtejAtOSsvXSs9ezAsMn0pJC8udGVzdChwYXJ0LnVybClcbiAgICAgICYmIChwYXJ0LmRldGFpbCA9PT0gdW5kZWZpbmVkIHx8IFsnYXV0bycsICdoaWdoJywgJ2xvdyddLmluY2x1ZGVzKHBhcnQuZGV0YWlsKSk7XG4gIH0pO1xufTtcblxuLyoqIFNpbmdsZSBzdWJtaXNzaW9uIHRocm91Z2ggUmlwLUh1bnRlcjsgY2FsbGVycyBvd24gZHVyYWJsZSBqb2JzIGFuZCByZWNvbmNpbGlhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUNvbnRlbnQgPSBhc3luYyAoXG4gIGlucHV0OiBDb250ZW50R2VuZXJhdGlvbklucHV0LFxuICBjb25maWc6IENvbnRlbnRHZW5lcmF0aW9uQ29uZmlnID0gQ29uZmlnLmdldDxDb250ZW50R2VuZXJhdGlvbkNvbmZpZz4oJ2NvbnRlbnRHZW5lcmF0aW9uJykgfHwge31cbik6IFByb21pc2U8R2VuZXJhdGVkQ29udGVudD4gPT4ge1xuICBpZighWydjbGF1ZGUnLCAnZ2VtaW5pJywgJ2dyb2snLCAnb2xsYW1hJywgJ29wZW5haSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0Egc3VwcG9ydGVkIHByb3ZpZGVyIGlzIHJlcXVpcmVkLicpO1xuICB9XG4gIGlmKGlucHV0Lm91dHB1dFRleHRNb2RlICE9PSB1bmRlZmluZWRcbiAgICAmJiAoIVsnY2xhdWRlJywgJ2dlbWluaScsICdvcGVuYWknLCAnZ3JvayddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyB8fCAhWydwcmVzZXJ2ZScsICd0cmltJ10uaW5jbHVkZXMoaW5wdXQub3V0cHV0VGV4dE1vZGUpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ291dHB1dFRleHRNb2RlIHJlcXVpcmVzIGEgQ2xhdWRlLCBHZW1pbmksIE9wZW5BSSBvciBHcm9rIHRleHQgcmVxdWVzdCBhbmQgcHJlc2VydmUgb3IgdHJpbS4nKTtcbiAgfVxuICBpZihpbnB1dC5vdXRwdXRUZXh0U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgJiYgKGlucHV0Lm91dHB1dFRleHRNb2RlICE9PSAncHJlc2VydmUnIHx8ICFbJ2NsYXVkZScsICdnZW1pbmknXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgfHwgIVsnJywgJ1xcbiddLmluY2x1ZGVzKGlucHV0Lm91dHB1dFRleHRTZXBhcmF0b3IpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ291dHB1dFRleHRTZXBhcmF0b3IgcmVxdWlyZXMgQ2xhdWRlIG9yIEdlbWluaSBwcmVzZXJ2ZSBtb2RlIGFuZCBhbiBlbXB0eSBvciBuZXdsaW5lIHNlcGFyYXRvci4nKTtcbiAgfVxuICBpZihpbnB1dC5vdXRwdXRUZXh0RmlsdGVyICE9PSB1bmRlZmluZWQgJiYgKGlucHV0Lm91dHB1dFRleHRGaWx0ZXIgIT09ICdub25ibGFuaycgfHwgaW5wdXQub3V0cHV0VGV4dE1vZGUgIT09ICdwcmVzZXJ2ZScgfHwgIVsnY2xhdWRlJywgJ2dlbWluaSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdvdXRwdXRUZXh0RmlsdGVyIHJlcXVpcmVzIENsYXVkZSBvciBHZW1pbmkgcHJlc2VydmUgbW9kZSBhbmQgbm9uYmxhbmsuJyk7XG4gIH1cbiAgaWYoaW5wdXQudGhpbmtpbmdMZXZlbCAhPT0gdW5kZWZpbmVkICYmIChpbnB1dC5wcm92aWRlciAhPT0gJ2dlbWluaScgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgIVsnbWluaW1hbCcsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnXS5pbmNsdWRlcyhpbnB1dC50aGlua2luZ0xldmVsKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCd0aGlua2luZ0xldmVsIHJlcXVpcmVzIGEgR2VtaW5pIHRleHQgcmVxdWVzdCBhbmQgYSBzdXBwb3J0ZWQgbGV2ZWwuJyk7XG4gIH1cbiAgaWYoaW5wdXQubWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmKGlucHV0LnByb21wdCAhPT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KGlucHV0Lm1lc3NhZ2VzKSB8fCAhaW5wdXQubWVzc2FnZXMubGVuZ3RoXG4gICAgICB8fCBpbnB1dC5tZXNzYWdlcy5zb21lKChtZXNzYWdlKSA9PlxuICAgICAgICAhbWVzc2FnZSB8fCAhWydhc3Npc3RhbnQnLCAnZGV2ZWxvcGVyJywgJ3N5c3RlbScsICd1c2VyJ10uaW5jbHVkZXMobWVzc2FnZS5yb2xlKSB8fCAhdmFsaWRNZXNzYWdlQ29udGVudChtZXNzYWdlKSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ1N1cHBseSBlaXRoZXIgYSBub24tZW1wdHkgcHJvbXB0IG9yIG5vbi1lbXB0eSB0ZXh0IG1lc3NhZ2VzIHdpdGggc3VwcG9ydGVkIHJvbGVzLicpO1xuICAgIH1cbiAgfSBlbHNlIGlmKHR5cGVvZiBpbnB1dC5wcm9tcHQgIT09ICdzdHJpbmcnIHx8ICFpbnB1dC5wcm9tcHQudHJpbSgpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignQSBub24tZW1wdHkgcHJvbXB0IGlzIHJlcXVpcmVkLicpO1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyICE9PSAnb3BlbmFpJ1xuICAgICYmICgoaW5wdXQubWVzc2FnZXMgIT09IHVuZGVmaW5lZCAmJiBpbnB1dC5wcm92aWRlciAhPT0gJ2dlbWluaScpIHx8IGlucHV0LnJlYXNvbmluZ0VmZm9ydCAhPT0gdW5kZWZpbmVkXG4gICAgICB8fCAoWydjbGF1ZGUnLCAnZ3JvayddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSAmJiBpbnB1dC5yZXNwb25zZUZvcm1hdCAhPT0gdW5kZWZpbmVkKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKFxuICAgICAgJ01lc3NhZ2VzIGFuZCByZWFzb25pbmcgZWZmb3J0IHJlcXVpcmUgT3BlbkFJOyBDbGF1ZGUgYW5kIEdyb2sgZG8gbm90IHN1cHBvcnQgcmVzcG9uc2UgZm9ybWF0IG9wdGlvbnMuJ1xuICAgICk7XG4gIH1cbiAgaWYoaW5wdXQucHJvdmlkZXIgPT09ICdnZW1pbmknICYmIGlucHV0Lm1lc3NhZ2VzICE9PSB1bmRlZmluZWQgJiYgKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnIHx8IGlucHV0LmltYWdlcyAhPT0gdW5kZWZpbmVkIHx8IGlucHV0Lm1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiAhWyd1c2VyJywgJ2Fzc2lzdGFudCddLmluY2x1ZGVzKG1lc3NhZ2Uucm9sZSkgfHwgKEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSAmJiBtZXNzYWdlLmNvbnRlbnQuc29tZShwYXJ0ID0+IHBhcnQudHlwZSAhPT0gJ3RleHQnKSkpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0dlbWluaSBtZXNzYWdlcyByZXF1aXJlIHVzZXIgb3IgYXNzaXN0YW50IHJvbGVzIHdpdGggdGV4dC1vbmx5IGNvbnRlbnQuJyk7XG4gIH1cbiAgaWYoaW5wdXQudGltZW91dE1zICE9PSB1bmRlZmluZWRcbiAgICAmJiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQudGltZW91dE1zKSB8fCBpbnB1dC50aW1lb3V0TXMgPCAxIHx8IGlucHV0LnRpbWVvdXRNcyA+IDJfMTQ3XzQ4M182NDcpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcigndGltZW91dE1zIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlci4nKTtcbiAgfVxuICBpZihpbnB1dC5yZWFzb25pbmdFZmZvcnQgIT09IHVuZGVmaW5lZCAmJiAhWydub25lJywgJ21pbmltYWwnLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ3hoaWdoJywgJ21heCddLmluY2x1ZGVzKGlucHV0LnJlYXNvbmluZ0VmZm9ydCkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdVbnN1cHBvcnRlZCByZWFzb25pbmcgZWZmb3J0LicpO1xuICB9XG4gIGNvbnN0IGZvcm1hdCA9IGlucHV0LnJlc3BvbnNlRm9ybWF0O1xuICBpZihmb3JtYXQgIT09IHVuZGVmaW5lZCAmJiAoIWZvcm1hdCB8fCAhWyd0ZXh0JywgJ2pzb25fb2JqZWN0JywgJ2pzb25fc2NoZW1hJ10uaW5jbHVkZXMoZm9ybWF0LnR5cGUpIHx8IChmb3JtYXQudHlwZSA9PT0gJ2pzb25fc2NoZW1hJyAmJiAoXG4gICAgdHlwZW9mIGZvcm1hdC5uYW1lICE9PSAnc3RyaW5nJyB8fCAhL15bYS16QS1aMC05Xy1dezEsNjR9JC8udGVzdChmb3JtYXQubmFtZSkgfHwgIWZvcm1hdC5zY2hlbWEgfHwgdHlwZW9mIGZvcm1hdC5zY2hlbWEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZm9ybWF0LnNjaGVtYSlcbiAgICB8fCAoZm9ybWF0LnN0cmljdCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBmb3JtYXQuc3RyaWN0ICE9PSAnYm9vbGVhbicpXG4gICkpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgZm9ybWF0LiBKU09OIHNjaGVtYXMgcmVxdWlyZSBhIG5hbWUgYW5kIHNjaGVtYSBvYmplY3QuJyk7XG4gIH1cbiAgaWYoWydnZW1pbmknLCAnb2xsYW1hJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpICYmIGZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIChmb3JtYXQudHlwZSA9PT0gJ2pzb25fc2NoZW1hJyB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJykpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdUaGlzIHByb3ZpZGVyIHN1cHBvcnRzIHRleHQgb3IganNvbl9vYmplY3QgZm9yIHRleHQgZ2VuZXJhdGlvbiBvbmx5LicpO1xuICB9XG4gIGlmKGlucHV0LnRvcFAgIT09IHVuZGVmaW5lZCAmJiAoIVsnZ2VtaW5pJywgJ29sbGFtYSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyB8fCAhTnVtYmVyLmlzRmluaXRlKGlucHV0LnRvcFApIHx8IGlucHV0LnRvcFAgPCAwIHx8IGlucHV0LnRvcFAgPiAxKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ3RvcFAgcmVxdWlyZXMgYSBHZW1pbmkgb3IgT2xsYW1hIHRleHQgcmVxdWVzdCBhbmQgYSBmaW5pdGUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLicpO1xuICB9XG4gIGlmKGlucHV0LnRlbXBlcmF0dXJlICE9PSB1bmRlZmluZWQgJiYgKCFbJ2dlbWluaScsICdvbGxhbWEnXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgIU51bWJlci5pc0Zpbml0ZShpbnB1dC50ZW1wZXJhdHVyZSkgfHwgaW5wdXQudGVtcGVyYXR1cmUgPCAwIHx8IChpbnB1dC5wcm92aWRlciA9PT0gJ2dlbWluaScgJiYgaW5wdXQudGVtcGVyYXR1cmUgPiAyKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCd0ZW1wZXJhdHVyZSByZXF1aXJlcyBhIG5vbm5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSBmb3IgT2xsYW1hIHRleHQgb3IgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDIgZm9yIEdlbWluaSB0ZXh0LicpO1xuICB9XG4gIGlmKGlucHV0Lm1heFRva2VucyAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzSW50ZWdlcihpbnB1dC5tYXhUb2tlbnMpIHx8IGlucHV0Lm1heFRva2VucyA8IDEpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignbWF4VG9rZW5zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLicpO1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyICE9PSAnZ2VtaW5pJ1xuICAgICYmICgoaW5wdXQuaW1hZ2VzPy5sZW5ndGggJiYgIVsnZ3JvaycsICdvbGxhbWEnXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikpIHx8IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnIHx8IGlucHV0LnNlYXJjaCkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdUaGlzIHByb3ZpZGVyIG9wZXJhdGlvbiBzdXBwb3J0cyB0ZXh0IGlucHV0IGFuZCBvdXRwdXQgb25seS4nKTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciA9PT0gJ29sbGFtYScpIHJldHVybiBnZW5lcmF0ZU9sbGFtYUNvbnRlbnQoaW5wdXQsIGNvbmZpZyk7XG4gIGNvbnN0IHtwcm9tcHQsIGltYWdlcyA9IFtdfSA9IGlucHV0O1xuICBpZihpbnB1dC5wcm92aWRlciA9PT0gJ2NsYXVkZScpIHtcbiAgICBpZighY29uZmlnLmNsYXVkZUtleSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignQ2xhdWRlIGlzIG5vdCBjb25maWd1cmVkIG9uIHRoaXMgc2VydmVyLicpO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3QoJ2h0dHBzOi8vYXBpLmFudGhyb3BpYy5jb20vdjEvbWVzc2FnZXMnLCB7XG4gICAgICBtYXhfdG9rZW5zOiBpbnB1dC5tYXhUb2tlbnMgPz8gNDA5NixcbiAgICAgIG1lc3NhZ2VzOiBbe2NvbnRlbnQ6IHByb21wdCwgcm9sZTogJ3VzZXInfV0sXG4gICAgICBtb2RlbDogaW5wdXQubW9kZWwgfHwgY29uZmlnLmNsYXVkZU1vZGVsIHx8ICdjbGF1ZGUtc29ubmV0LTUnLFxuICAgICAgc3lzdGVtOiBpbnB1dC5zeXN0ZW1cbiAgICB9LCB7Y2FjaGU6IGZhbHNlLCBoZWFkZXJzOiBuZXcgSGVhZGVycyh7J2FudGhyb3BpYy12ZXJzaW9uJzogJzIwMjMtMDYtMDEnLCAneC1hcGkta2V5JzogY29uZmlnLmNsYXVkZUtleX0pLCB0aW1lb3V0OiBpbnB1dC50aW1lb3V0TXMgPz8gMTIwXzAwMH0pIGFzIHtcbiAgICAgIGNvbnRlbnQ/OiB7dGV4dD86IHN0cmluZzsgdHlwZT86IHN0cmluZ31bXTtcbiAgICAgIGVycm9yPzoge3R5cGU/OiBzdHJpbmd9O1xuICAgICAgc3RvcF9yZWFzb24/OiBzdHJpbmc7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgIH07XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWydhdXRoZW50aWNhdGlvbl9lcnJvcicsICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InLCAnbm90X2ZvdW5kX2Vycm9yJywgJ3Blcm1pc3Npb25fZXJyb3InXS5pbmNsdWRlcyhyZXNwb25zZS5lcnJvci50eXBlIHx8ICcnKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignQ2xhdWRlIHJlamVjdGVkIHRoZSByZXF1ZXN0LiBDaGVjayB0aGUgbW9kZWwgYW5kIGFjY291bnQgYWNjZXNzLicpO1xuICAgIH1cbiAgICBjb25zdCBwcmVzZXJ2ZSA9IGlucHV0Lm91dHB1dFRleHRNb2RlID09PSAncHJlc2VydmUnO1xuICAgIGlmKHByZXNlcnZlICYmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5jb250ZW50KSB8fCByZXNwb25zZS5jb250ZW50LnNvbWUoKHBhcnQpID0+XG4gICAgICAhcGFydCB8fCAhWyd0ZXh0JywgJ3RoaW5raW5nJywgJ3JlZGFjdGVkX3RoaW5raW5nJ10uaW5jbHVkZXMocGFydC50eXBlIHx8ICcnKSB8fCAocGFydC50eXBlID09PSAndGV4dCcgJiYgdHlwZW9mIHBhcnQudGV4dCAhPT0gJ3N0cmluZycpKSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0NsYXVkZSByZXNwb25zZSBjb3VsZCBub3QgYmUgY29uZmlybWVkLicpO1xuICAgIH1cbiAgICBjb25zdCBjaHVua3MgPSAocmVzcG9uc2UuY29udGVudD8uZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICd0ZXh0JykubWFwKChwYXJ0KSA9PiBwYXJ0LnRleHQgfHwgJycpIHx8IFtdKS5maWx0ZXIodGV4dCA9PiBpbnB1dC5vdXRwdXRUZXh0RmlsdGVyICE9PSAnbm9uYmxhbmsnIHx8ICEhdGV4dC50cmltKCkpO1xuICAgIGNvbnN0IHRleHQgPSBwcmVzZXJ2ZSA/IGNodW5rcy5qb2luKGlucHV0Lm91dHB1dFRleHRTZXBhcmF0b3IgPz8gJycpIDogY2h1bmtzLmpvaW4oJ1xcbicpLnRyaW0oKTtcbiAgICBpZihyZXNwb25zZS5lcnJvciB8fCByZXNwb25zZS50eXBlICE9PSAnbWVzc2FnZScgfHwgcmVzcG9uc2Uuc3RvcF9yZWFzb24gIT09ICdlbmRfdHVybicgfHwgIXRleHQudHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdDbGF1ZGUgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtzb3VyY2VzOiBbXSwgdGV4dH07XG4gIH1cbiAgaWYoaW5wdXQucHJvdmlkZXIgPT09ICdvcGVuYWknIHx8IGlucHV0LnByb3ZpZGVyID09PSAnZ3JvaycpIHtcbiAgICBjb25zdCBncm9rID0gaW5wdXQucHJvdmlkZXIgPT09ICdncm9rJztcbiAgICBjb25zdCBrZXkgPSBncm9rID8gY29uZmlnLmdyb2tLZXkgOiBjb25maWcub3BlbmFpS2V5O1xuICAgIGlmKCFrZXkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoYCR7Z3JvayA/ICdHcm9rJyA6ICdPcGVuQUknfSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGlzIHNlcnZlci5gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0KGdyb2sgPyAnaHR0cHM6Ly9hcGkueC5haS92MS9yZXNwb25zZXMnIDogJ2h0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvcmVzcG9uc2VzJywge1xuICAgICAgaW5wdXQ6IGdyb2sgJiYgaW1hZ2VzLmxlbmd0aCA/IFt7Y29udGVudDogW3t0ZXh0OiBwcm9tcHQsIHR5cGU6ICdpbnB1dF90ZXh0J30sIC4uLmltYWdlcy5tYXAoKGltYWdlKSA9PiAoe2ltYWdlX3VybDogYGRhdGE6JHtpbWFnZS5taW1lfTtiYXNlNjQsJHtpbWFnZS5ieXRlcy50b1N0cmluZygnYmFzZTY0Jyl9YCwgdHlwZTogJ2lucHV0X2ltYWdlJ30pKV0sIHJvbGU6ICd1c2VyJ31dIDogaW5wdXQubWVzc2FnZXM/Lm1hcCgobWVzc2FnZSkgPT4gKHtjb250ZW50OiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UuY29udGVudCA6IG1lc3NhZ2UuY29udGVudC5tYXAoKHBhcnQpID0+IChwYXJ0LnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICA/IHt0ZXh0OiBwYXJ0LnRleHQsIHR5cGU6ICdpbnB1dF90ZXh0J30gOiB7ZGV0YWlsOiBwYXJ0LmRldGFpbCA/PyAnYXV0bycsIGltYWdlX3VybDogcGFydC51cmwsIHR5cGU6ICdpbnB1dF9pbWFnZSd9KSksIHJvbGU6IG1lc3NhZ2Uucm9sZSA9PT0gJ3N5c3RlbScgPyAnZGV2ZWxvcGVyJyA6IG1lc3NhZ2Uucm9sZX0pKSA/PyBwcm9tcHQsXG4gICAgICBpbnN0cnVjdGlvbnM6IGlucHV0LnN5c3RlbSxcbiAgICAgIG1heF9vdXRwdXRfdG9rZW5zOiBpbnB1dC5tYXhUb2tlbnMgPz8gNDA5NixcbiAgICAgIG1vZGVsOiBpbnB1dC5tb2RlbCB8fCAoZ3JvayA/IGNvbmZpZy5ncm9rTW9kZWwgfHwgJ2dyb2stNC43JyA6IGNvbmZpZy5vcGVuYWlNb2RlbCB8fCAnZ3B0LTYtYXN0cmEnKSxcbiAgICAgIC4uLihpbnB1dC5yZWFzb25pbmdFZmZvcnQgPyB7cmVhc29uaW5nOiB7ZWZmb3J0OiBpbnB1dC5yZWFzb25pbmdFZmZvcnR9fSA6IHt9KSxcbiAgICAgIHN0b3JlOiBmYWxzZSxcbiAgICAgIC4uLihmb3JtYXQgPyB7dGV4dDoge2Zvcm1hdH19IDoge30pLFxuICAgICAgLi4uKCFncm9rID8ge3RydW5jYXRpb246ICdkaXNhYmxlZCd9IDoge30pXG4gICAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoe0F1dGhvcml6YXRpb246IGBCZWFyZXIgJHtrZXl9YH0pLCB0aW1lb3V0OiBpbnB1dC50aW1lb3V0TXMgPz8gMTIwXzAwMH0pIGFzIHtcbiAgICAgIGVycm9yPzoge2NvZGU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmd9O1xuICAgICAgb3V0cHV0Pzoge2NvbnRlbnQ/OiB7dGV4dD86IHN0cmluZzsgdHlwZT86IHN0cmluZ31bXTsgc3RhdHVzPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfVtdO1xuICAgICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIH07XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWydpbnZhbGlkX3JlcXVlc3RfZXJyb3InLCAnYXV0aGVudGljYXRpb25fZXJyb3InLCAncGVybWlzc2lvbl9lcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLmVycm9yLnR5cGUgfHwgJycpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKGAke2dyb2sgPyAnR3JvaycgOiAnT3BlbkFJJ30gcmVqZWN0ZWQgdGhlIHJlcXVlc3QuIENoZWNrIHRoZSBtb2RlbCBhbmQgYWNjb3VudCBhY2Nlc3MuYCk7XG4gICAgfVxuICAgIGlmKHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcgfHwgcmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2luY29tcGxldGUnKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcihgJHtncm9rID8gJ0dyb2snIDogJ09wZW5BSSd9IHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ6IGdlbmVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZS5gKTtcbiAgICB9XG4gICAgaWYocmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLmNvbnRlbnQ/LnNvbWUoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gJ3JlZnVzYWwnKSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoYCR7Z3JvayA/ICdHcm9rJyA6ICdPcGVuQUknfSBkZWNsaW5lZCB0aGUgcmVxdWVzdC5gKTtcbiAgICB9XG4gICAgaWYocmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLnR5cGUgJiYgIVsnbWVzc2FnZScsICdyZWFzb25pbmcnXS5pbmNsdWRlcyhpdGVtLnR5cGUpKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcihgJHtncm9rID8gJ0dyb2snIDogJ09wZW5BSSd9IHJldHVybmVkIGFuIHVuc3VwcG9ydGVkIG91dHB1dCBpdGVtLmApO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gcmVzcG9uc2Uub3V0cHV0Py5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ21lc3NhZ2UnIHx8IChncm9rICYmICFpdGVtLnR5cGUpKS5mbGF0TWFwKChpdGVtKSA9PiBpdGVtLmNvbnRlbnQgfHwgW10pXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdvdXRwdXRfdGV4dCcpLm1hcCgocGFydCkgPT4gcGFydC50ZXh0IHx8ICcnKS5qb2luKCcnKSB8fCAnJztcbiAgICBpZighdGV4dC50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoYCR7Z3JvayA/ICdHcm9rJyA6ICdPcGVuQUknfSByZXR1cm5lZCBlbXB0eSBvdXRwdXQuYCk7XG4gICAgfVxuICAgIHJldHVybiB7c291cmNlczogW10sIHRleHQ6IGlucHV0Lm91dHB1dFRleHRNb2RlID09PSAncHJlc2VydmUnID8gdGV4dCA6IHRleHQudHJpbSgpfTtcbiAgfVxuICBpZighY29uZmlnLmdlbWluaUtleSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0dlbWluaSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGlzIHNlcnZlci4nKTtcbiAgfVxuICBjb25zdCBwYXJ0czogdW5rbm93bltdID0gW3t0ZXh0OiBwcm9tcHR9LCAuLi5pbWFnZXMubWFwKChpbWFnZSkgPT4gKHtpbmxpbmVEYXRhOiB7ZGF0YTogaW1hZ2UuYnl0ZXMudG9TdHJpbmcoJ2Jhc2U2NCcpLCBtaW1lVHlwZTogaW1hZ2UubWltZX19KSldO1xuICBjb25zdCBtb2RlbCA9IGlucHV0Lm1vZGVsIHx8IChpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyA/IGNvbmZpZy5nZW1pbmlJbWFnZU1vZGVsIHx8ICdnZW1pbmktMy4xLWZsYXNoLWltYWdlJyA6IGNvbmZpZy5nZW1pbmlNb2RlbCB8fCAnZ2VtaW5pLTMuOC1mbGFzaCcpO1xuICBpZighL15bYS16QS1aMC05Ll8tXSskLy50ZXN0KG1vZGVsKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0ludmFsaWQgR2VtaW5pIG1vZGVsIGNvbmZpZ3VyYXRpb24uJyk7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0KGBodHRwczovL2dlbmVyYXRpdmVsYW5ndWFnZS5nb29nbGVhcGlzLmNvbS92MWJldGEvbW9kZWxzLyR7bW9kZWx9OmdlbmVyYXRlQ29udGVudGAsIHtcbiAgICBjb250ZW50czogaW5wdXQubWVzc2FnZXM/Lm1hcChtZXNzYWdlID0+ICh7cGFydHM6IHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gW3t0ZXh0OiBtZXNzYWdlLmNvbnRlbnR9XSA6IG1lc3NhZ2UuY29udGVudC5tYXAocGFydCA9PiAoe3RleHQ6IChwYXJ0IGFzIEV4dHJhY3Q8Q29udGVudEdlbmVyYXRpb25QYXJ0LCB7dHlwZTogJ3RleHQnfT4pLnRleHR9KSksIHJvbGU6IG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnbW9kZWwnIDogJ3VzZXInfSkpID8/IFt7cGFydHMsIHJvbGU6ICd1c2VyJ31dLFxuICAgIC4uLihpbnB1dC5zeXN0ZW0gPyB7c3lzdGVtSW5zdHJ1Y3Rpb246IHtwYXJ0czogW3t0ZXh0OiBpbnB1dC5zeXN0ZW19XX19IDoge30pLFxuICAgIGdlbmVyYXRpb25Db25maWc6IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gey4uLihpbnB1dC5hc3BlY3RSYXRpbyA/IHtpbWFnZUNvbmZpZzoge2FzcGVjdFJhdGlvOiBpbnB1dC5hc3BlY3RSYXRpb319IDoge30pLCByZXNwb25zZU1vZGFsaXRpZXM6IFsnVEVYVCcsICdJTUFHRSddfSA6IHtcbiAgICAgIG1heE91dHB1dFRva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICAuLi4oZm9ybWF0ID8ge3Jlc3BvbnNlTWltZVR5cGU6IGZvcm1hdC50eXBlID09PSAnanNvbl9vYmplY3QnID8gJ2FwcGxpY2F0aW9uL2pzb24nIDogJ3RleHQvcGxhaW4nfSA6IHt9KSxcbiAgICAgIC4uLihpbnB1dC50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkID8ge3RlbXBlcmF0dXJlOiBpbnB1dC50ZW1wZXJhdHVyZX0gOiB7fSksXG4gICAgICAuLi4oaW5wdXQudG9wUCAhPT0gdW5kZWZpbmVkID8ge3RvcFA6IGlucHV0LnRvcFB9IDoge30pLFxuICAgICAgLi4uKGlucHV0LnRoaW5raW5nTGV2ZWwgIT09IHVuZGVmaW5lZCA/IHt0aGlua2luZ0NvbmZpZzoge3RoaW5raW5nTGV2ZWw6IGlucHV0LnRoaW5raW5nTGV2ZWx9fSA6IHt9KVxuICAgIH0sXG4gICAgLi4uKGlucHV0LnNlYXJjaCA/IHt0b29sczogW3tnb29nbGVTZWFyY2g6IHt9fV19IDoge30pXG4gIH0sIHtjYWNoZTogZmFsc2UsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsneC1nb29nLWFwaS1rZXknOiBjb25maWcuZ2VtaW5pS2V5fSksIHRpbWVvdXQ6IGlucHV0LnRpbWVvdXRNcyA/PyAxMjBfMDAwfSkgYXMgR2VtaW5pUmVzcG9uc2U7XG4gIGlmKHJlc3BvbnNlLmVycm9yICYmIFs0MDAsIDQwMSwgNDAzLCA0MDRdLmluY2x1ZGVzKHJlc3BvbnNlLmVycm9yLmNvZGUgfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdHZW1pbmkgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuIENoZWNrIHRoZSByZWZlcmVuY2UgZm9ybWF0IGFuZCBtb2RlbCBhY2Nlc3MuJyk7XG4gIH1cbiAgaWYocmVzcG9uc2UucHJvbXB0RmVlZGJhY2s/LmJsb2NrUmVhc29uIHx8IHJlc3BvbnNlLmVycm9yIHx8ICFyZXNwb25zZS5jYW5kaWRhdGVzPy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdHZW1pbmkgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZC4nKTtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGUgPSByZXNwb25zZS5jYW5kaWRhdGVzWzBdITtcbiAgaWYoY2FuZGlkYXRlLmZpbmlzaFJlYXNvbiAhPT0gJ1NUT1AnKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignR2VtaW5pIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ6IGdlbmVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZS4nKTtcbiAgfVxuICBjb25zdCBwcmVzZXJ2ZSA9IGlucHV0Lm91dHB1dFRleHRNb2RlID09PSAncHJlc2VydmUnO1xuICBpZihwcmVzZXJ2ZSAmJiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmNvbnRlbnQ/LnBhcnRzKSB8fCBjYW5kaWRhdGUuY29udGVudC5wYXJ0cy5zb21lKHBhcnQgPT4gIXBhcnQgfHwgKHBhcnQudGhvdWdodCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXJ0LnRob3VnaHQgIT09ICdib29sZWFuJykgfHwgT2JqZWN0LmtleXMocGFydCkuc29tZShrZXkgPT4gIVsndGV4dCcsICd0aG91Z2h0JywgJ3Rob3VnaHRTaWduYXR1cmUnXS5pbmNsdWRlcyhrZXkpKSB8fCAoIXBhcnQudGhvdWdodCAmJiB0eXBlb2YgcGFydC50ZXh0ICE9PSAnc3RyaW5nJykpKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0dlbWluaSByZXNwb25zZSB0ZXh0IHBhcnRzIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuJyk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gKGNhbmRpZGF0ZS5jb250ZW50Py5wYXJ0cyB8fCBbXSkuZmlsdGVyKChwYXJ0KSA9PiAhcGFydC50aG91Z2h0KTtcbiAgY29uc3QgaW5saW5lID0gb3V0cHV0LmZpbmQoKHBhcnQpID0+IHBhcnQuaW5saW5lRGF0YSk/LmlubGluZURhdGE7XG4gIGxldCBpbWFnZTogR2VuZXJhdGVkQ29udGVudFsnaW1hZ2UnXTtcbiAgaWYoaW5saW5lICYmIFsnaW1hZ2UvcG5nJywgJ2ltYWdlL2pwZWcnXS5pbmNsdWRlcyhpbmxpbmUubWltZVR5cGUpKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShpbmxpbmUuZGF0YSwgJ2Jhc2U2NCcpO1xuICAgIGlmKCFieXRlcy5sZW5ndGggfHwgYnl0ZXMubGVuZ3RoID4gMjAgKiAxMDI0ICogMTAyNCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignSW52YWxpZCBpbWFnZSBvdXRwdXQuJyk7XG4gICAgfVxuICAgIGltYWdlID0ge2J5dGVzLCBtaW1lOiBpbmxpbmUubWltZVR5cGUgYXMgJ2ltYWdlL3BuZycgfCAnaW1hZ2UvanBlZyd9O1xuICB9XG4gIGNvbnN0IGNodW5rcyA9IG91dHB1dC5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykuZmlsdGVyKHRleHQgPT4gaW5wdXQub3V0cHV0VGV4dEZpbHRlciAhPT0gJ25vbmJsYW5rJyB8fCAhIXRleHQudHJpbSgpKTtcbiAgY29uc3QgdGV4dCA9IHByZXNlcnZlID8gY2h1bmtzLmpvaW4oaW5wdXQub3V0cHV0VGV4dFNlcGFyYXRvciA/PyAnJykgOiBjaHVua3Muam9pbignXFxuJykudHJpbSgpO1xuICBpZihpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyA/ICFpbWFnZSA6ICF0ZXh0LnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ1RoZSByZXF1ZXN0ZWQgb3V0cHV0IHdhcyBub3QgcmV0dXJuZWQuJyk7XG4gIH1cbiAgY29uc3Qgc291cmNlcyA9IChjYW5kaWRhdGUuZ3JvdW5kaW5nTWV0YWRhdGE/Lmdyb3VuZGluZ0NodW5rcyB8fCBbXSkuZmxhdE1hcCgoe3dlYn0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3ZWI/LnVyaSB8fCAnJyk7XG4gICAgICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IFt7dGl0bGU6IHdlYj8udGl0bGUgfHwgdXJsLmhvc3RuYW1lLCB1cmw6IHVybC5ocmVmfV0gOiBbXTtcbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaW1hZ2UsIHNlYXJjaFN1Z2dlc3Rpb25zSHRtbDogY2FuZGlkYXRlLmdyb3VuZGluZ01ldGFkYXRhPy5zZWFyY2hFbnRyeVBvaW50Py5yZW5kZXJlZENvbnRlbnQsIHNvdXJjZXMsIHRleHRcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiZ2VuZXJhdGVPbGxhbWFDb250ZW50IiwiQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yIiwiQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yIiwicG9zdCIsIkNvbmZpZyIsInZhbGlkTWVzc2FnZUNvbnRlbnQiLCJtZXNzYWdlIiwiY29udGVudCIsInRyaW0iLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJldmVyeSIsInBhcnQiLCJ0eXBlIiwidGV4dCIsInJvbGUiLCJ1cmwiLCJ0ZXN0IiwiZGV0YWlsIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJnZW5lcmF0ZUNvbnRlbnQiLCJpbnB1dCIsImNvbmZpZyIsImdldCIsInByb3ZpZGVyIiwib3V0cHV0VGV4dE1vZGUiLCJtb2RhbGl0eSIsIm91dHB1dFRleHRTZXBhcmF0b3IiLCJvdXRwdXRUZXh0RmlsdGVyIiwidGhpbmtpbmdMZXZlbCIsIm1lc3NhZ2VzIiwicHJvbXB0Iiwic29tZSIsInJlYXNvbmluZ0VmZm9ydCIsInJlc3BvbnNlRm9ybWF0IiwiaW1hZ2VzIiwidGltZW91dE1zIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiZm9ybWF0IiwibmFtZSIsInNjaGVtYSIsInN0cmljdCIsInRvcFAiLCJpc0Zpbml0ZSIsInRlbXBlcmF0dXJlIiwibWF4VG9rZW5zIiwic2VhcmNoIiwiY2xhdWRlS2V5IiwicmVzcG9uc2UiLCJtYXhfdG9rZW5zIiwibW9kZWwiLCJjbGF1ZGVNb2RlbCIsInN5c3RlbSIsImNhY2hlIiwiaGVhZGVycyIsIkhlYWRlcnMiLCJ0aW1lb3V0IiwiZXJyb3IiLCJwcmVzZXJ2ZSIsImNodW5rcyIsImZpbHRlciIsIm1hcCIsImpvaW4iLCJzdG9wX3JlYXNvbiIsInNvdXJjZXMiLCJncm9rIiwia2V5IiwiZ3Jva0tleSIsIm9wZW5haUtleSIsImltYWdlIiwiaW1hZ2VfdXJsIiwibWltZSIsImJ5dGVzIiwidG9TdHJpbmciLCJpbnN0cnVjdGlvbnMiLCJtYXhfb3V0cHV0X3Rva2VucyIsImdyb2tNb2RlbCIsIm9wZW5haU1vZGVsIiwicmVhc29uaW5nIiwiZWZmb3J0Iiwic3RvcmUiLCJ0cnVuY2F0aW9uIiwiQXV0aG9yaXphdGlvbiIsInN0YXR1cyIsIm91dHB1dCIsIml0ZW0iLCJmbGF0TWFwIiwiZ2VtaW5pS2V5IiwicGFydHMiLCJpbmxpbmVEYXRhIiwiZGF0YSIsIm1pbWVUeXBlIiwiZ2VtaW5pSW1hZ2VNb2RlbCIsImdlbWluaU1vZGVsIiwiY29udGVudHMiLCJzeXN0ZW1JbnN0cnVjdGlvbiIsImdlbmVyYXRpb25Db25maWciLCJhc3BlY3RSYXRpbyIsImltYWdlQ29uZmlnIiwicmVzcG9uc2VNb2RhbGl0aWVzIiwibWF4T3V0cHV0VG9rZW5zIiwicmVzcG9uc2VNaW1lVHlwZSIsInRoaW5raW5nQ29uZmlnIiwidG9vbHMiLCJnb29nbGVTZWFyY2giLCJjb2RlIiwicHJvbXB0RmVlZGJhY2siLCJibG9ja1JlYXNvbiIsImNhbmRpZGF0ZXMiLCJjYW5kaWRhdGUiLCJmaW5pc2hSZWFzb24iLCJ0aG91Z2h0IiwiT2JqZWN0Iiwia2V5cyIsImlubGluZSIsImZpbmQiLCJCdWZmZXIiLCJmcm9tIiwiZ3JvdW5kaW5nTWV0YWRhdGEiLCJncm91bmRpbmdDaHVua3MiLCJ3ZWIiLCJVUkwiLCJ1cmkiLCJwcm90b2NvbCIsInRpdGxlIiwiaG9zdG5hbWUiLCJocmVmIiwic2VhcmNoU3VnZ2VzdGlvbnNIdG1sIiwic2VhcmNoRW50cnlQb2ludCIsInJlbmRlcmVkQ29udGVudCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEscUJBQXFCLFFBQU8sd0JBQXdCO0FBQzVELFNBQVFDLDhCQUE4QixFQUFFQyw4QkFBOEIsUUFBTywrQkFBK0I7QUFDNUcsU0FBUUQsOEJBQThCLEVBQUVDLDhCQUE4QixRQUFPLCtCQUErQjtBQUM1RyxTQUFRQyxJQUFJLFFBQU8sb0JBQW9CO0FBRXZDLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBeUVwQyxNQUFNQyxzQkFBc0IsQ0FBQ0M7SUFDM0IsSUFBRyxPQUFPQSxRQUFRQyxPQUFPLEtBQUssVUFBVTtRQUN0QyxPQUFPLENBQUMsQ0FBQ0QsUUFBUUMs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
@@ -3,4 +3,4 @@
3
3
  /** An accepted generation did not produce usable output; do not automatically resubmit it. */ export class ContentGenerationResponseError extends Error {
4
4
  }
5
5
 
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50R2VuZXJhdGlvbkVycm9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSBjb25maXJtZWQgcmVqZWN0aW9uIGlzIGRpc3RpbmN0IGZyb20gYW4gdW5rbm93biBwYWlkIHN1Ym1pc3Npb24gb3V0Y29tZS4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuLyoqIEFuIGFjY2VwdGVkIGdlbmVyYXRpb24gZGlkIG5vdCBwcm9kdWNlIHVzYWJsZSBvdXRwdXQ7IGRvIG5vdCBhdXRvbWF0aWNhbGx5IHJlc3VibWl0IGl0LiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHt9XG4iXSwibmFtZXMiOlsiQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yIiwiRXJyb3IiLCJDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBLCtFQUErRSxHQUMvRSxPQUFPLE1BQU1BLHVDQUF1Q0M7QUFBTztBQUMzRCw0RkFBNEYsR0FDNUYsT0FBTyxNQUFNQyx1Q0FBdUNEO0FBQU8ifQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udGVudEdlbmVyYXRpb25FcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEEgY29uZmlybWVkIHJlamVjdGlvbiBpcyBkaXN0aW5jdCBmcm9tIGFuIHVua25vd24gcGFpZCBzdWJtaXNzaW9uIG91dGNvbWUuICovXG5leHBvcnQgY2xhc3MgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cbi8qKiBBbiBhY2NlcHRlZCBnZW5lcmF0aW9uIGRpZCBub3QgcHJvZHVjZSB1c2FibGUgb3V0cHV0OyBkbyBub3QgYXV0b21hdGljYWxseSByZXN1Ym1pdCBpdC4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuIl0sIm5hbWVzIjpbIkNvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvciIsIkVycm9yIiwiQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQSwrRUFBK0UsR0FDL0UsT0FBTyxNQUFNQSx1Q0FBdUNDO0FBQU87QUFDM0QsNEZBQTRGLEdBQzVGLE9BQU8sTUFBTUMsdUNBQXVDRDtBQUFPIn0=
@@ -346,4 +346,4 @@ export const deleteUserFromConversation = (context, { conversationId, userId })=
346
346
  }, error, context));
347
347
  };
348
348
 
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb252ZXJzYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG4vKiBlc2xpbnQgbm8tdW5kZXJzY29yZS1kYW5nbGU6IFtcImVycm9yXCIsIHtcImFsbG93XCI6IFtcIl9pZFwiLCBcIl9rZXlcIl19XSAtLSBBcmFuZ29EQiBkb2N1bWVudCBpZGVudGl0eSBmaWVsZHMuICovXG5pbXBvcnQge2Nsb25lRGVlcH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvY2xvbmUnO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge2xpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkcywgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUsIGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0LCBFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25UeXBlfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnZlcnNhdGlvbk9wdGlvbnMsXG4gIENvbnZlcnNhdGlvblR5cGUsXG4gIENvbnZlcnNhdGlvblVzZXJzUGFyYW1zLFxuICBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXMsXG4gIFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbn0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjb252ZXJzYXRpb25zJztcbmNvbnN0IGhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKCdoYXNDb252ZXJzYXRpb24nKTtcblxuY29uc3QgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVVzZXJJZDogc3RyaW5nLFxuICB0b1VzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgW2Zyb21Vc2VyLCB0b1VzZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZyb21Vc2VySWR9KSxcbiAgICBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiB0b1VzZXJJZH0pXG4gIF0pO1xuICBjb25zdCBmcm9tUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoZnJvbVVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCB0b1BlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHRvVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIWZyb21QZXJzb25hSWQgfHwgIXRvUGVyc29uYUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBjb25zdCByZWxhdGlvbnNoaXAgPSBhd2FpdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgdG9QZXJzb25hSWQsIGZyb21QZXJzb25hSWQpO1xuXG4gIGlmKCFyZWxhdGlvbnNoaXAuaXNGcmllbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbnM6IENvbnZlcnNhdGlvblR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNvbnZlcnNhdGlvbnM7XG4gIH1cblxuICBjb25zdCB2aXNpYmlsaXR5ID0gYXdhaXQgUHJvbWlzZS5hbGwoY29udmVyc2F0aW9ucy5tYXAoYXN5bmMgKGNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICAgID8gY29udmVyc2F0aW9uLnVzZXJzLmZpbmQoKHVzZXIpID0+IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnVzZXJJZCB8fCB1c2VyPy5fa2V5IHx8ICcnKSkgIT09IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHBhcnRpY2lwYW50UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBhcnRpY2lwYW50UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwYXJ0aWNpcGFudFBlcnNvbmFJZCwgc2Vzc2lvblBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGNvbnZlcnNhdGlvbnMuZmlsdGVyKChfY29udmVyc2F0aW9uLCBpbmRleCkgPT4gdmlzaWJpbGl0eVtpbmRleF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKTtcblxuICBpZighY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25JZCAmJiAhY29udmVyc2F0aW9uPy5fa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBpZighY29udmVyc2F0aW9uPy5pc0RpcmVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgcGFydGljaXBhbnQgPSBBcnJheS5pc0FycmF5KGNvbnZlcnNhdGlvbj8udXNlcnMpXG4gICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gc2Vzc2lvblVzZXJJZClcbiAgICA6IG51bGw7XG4gIGNvbnN0IHBhcnRpY2lwYW50VXNlcklkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnVzZXJJZCB8fCBwYXJ0aWNpcGFudD8uX2tleSB8fCAnJykpO1xuXG4gIGlmKCFzZXNzaW9uVXNlcklkIHx8ICFwYXJ0aWNpcGFudFVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBzZXNzaW9uVXNlcklkLCBwYXJ0aWNpcGFudFVzZXJJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb252ZXJzYXRpb25PcHRpb25zID0gKG9wdGlvbnM6IENvbnZlcnNhdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkxpc3RCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBvcHRpb25zPzogQ29udmVyc2F0aW9uT3B0aW9uc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3VzZXJJZH1gO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3VzZXJEb2NJZH0gJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGMuY2hhdFNjaGVtYVZlcnNpb24gIT0gMVxuICAgICAgU09SVCBjLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgdWMgSU4gMS4uMSBJTkJPVU5EIGMuX2lkICR7aGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgdS5faWQgIT0gJHt1c2VyRG9jSWR9XG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbnMpID0+IGZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zKGNvbnRleHQsIGNvbnZlcnNhdGlvbnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgRklMVEVSIGMuY2hhdFNjaGVtYVZlcnNpb24gIT0gMSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkRGlyZWN0Q29udmVyc2F0aW9uKGNvbnRleHQsIHtmcm9tSWQsIHRvSWQsIHRvVXNlcjogdXNlcn0pO1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG5cbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGlzRGlyZWN0OiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgYWRkSXRlbTxDb252ZXJzYXRpb25UeXBlPihjb250ZXh0LCAnY29udmVyc2F0aW9ucycsIGluc2VydCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1c2VySWRzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJMaXN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbm5lY3Rpb25Vc2VyTGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KS5jaGF0U2NoZW1hVmVyc2lvbiAhPSAxXG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbm5lY3Rpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZJTFRFUiBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pLmNoYXRTY2hlbWFWZXJzaW9uICE9IDFcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZlcnNhdGlvbklkKX1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGMuX2lkID09ICR7Y29udmVyc2F0aW9uRG9jSWR9IEFORCBjLmNoYXRTY2hlbWFWZXJzaW9uICE9IDFcbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBpblVzZXIsIGluRWRnZSBJTiAxLi4xIElOQk9VTkQgJHtjb252ZXJzYXRpb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBSRVRVUk4gaW5Vc2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGlmKCFjb252ZXJzYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke3Nlc3Npb25JZH0gYCksXG4gICAgaXNEaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBpc0RpcmVjdCxcbiAgICBuYW1lXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdENvbnZlcnNhdGlvbklkXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgY3VycmVudCA9IERPQ1VNRU5UKCdjb252ZXJzYXRpb25zJywgJHtmb3JtYXRDb252ZXJzYXRpb25JZH0pXG4gICAgRklMVEVSIGN1cnJlbnQuY2hhdFNjaGVtYVZlcnNpb24gIT0gMVxuICAgIFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXJUb0NvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgY29udmVyc2F0aW9uID0gRE9DVU1FTlQoJHtjb252ZXJzYXRpb25Eb2NJZH0pXG4gICAgUkVUVVJOIGNvbnZlcnNhdGlvbi5jaGF0U2NoZW1hVmVyc2lvbiA9PSAxID8ge2NoYXRTY2hlbWFWZXJzaW9uOiAxfSA6IEZJUlNUKFxuICAgICAgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgICAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgICAgICBMSU1JVCAxIFJFVFVSTiBoYylgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChoYXNDb252ZXJzYXRpb25FZGdlKSA9PiB7XG4gICAgICBpZihoYXNDb252ZXJzYXRpb25FZGdlPy5jaGF0U2NoZW1hVmVyc2lvbiA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBpZighIWhhc0NvbnZlcnNhdGlvbkVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIGhhc0NvbnZlcnNhdGlvbkVkZ2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb24tJHtmb3JtYXRDb252ZXJzYXRpb25JZH0tJHtmb3JtYXRVc2VySWR9YCk7XG5cbiAgICAgIGNvbnN0IGVkZ2U6IENvbnZlcnNhdGlvblR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiB1c2VyRG9jSWQsXG4gICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgX3RvOiBjb252ZXJzYXRpb25Eb2NJZCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvblxuICAgICAgICAuc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gZWRnZSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICAgIEFORCBET0NVTUVOVCgke2NvbnZlcnNhdGlvbkRvY0lkfSkuY2hhdFNjaGVtYVZlcnNpb24gIT0gMVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJnZXRMaW1pdCIsInNvcnRJZHMiLCJ1c2VEYiIsImFkZEl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImdldFVzZXJCeUlkIiwiZXZlbnRDYXRlZ29yeSIsImhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24iLCJlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwIiwiY29udGV4dCIsImZyb21Vc2VySWQiLCJ0b1VzZXJJZCIsImZyb21Vc2VyIiwidG9Vc2VyIiwiUHJvbWlzZSIsImFsbCIsInVzZXJJZCIsImZyb21QZXJzb25hSWQiLCJTdHJpbmciLCJwZXJzb25hSWQiLCJ0b1BlcnNvbmFJZCIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwiZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMiLCJjb252ZXJzYXRpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInNlc3Npb24iLCJsZW5ndGgiLCJ2aXNpYmlsaXR5IiwibWFwIiwiY29udmVyc2F0aW9uIiwiaXNEaXJlY3QiLCJwYXJ0aWNpcGFudCIsIkFycmF5IiwiaXNBcnJheSIsInVzZXJzIiwiZmluZCIsInVzZXIiLCJfa2V5IiwicGFydGljaXBhbnRQZXJzb25hSWQiLCJmaWx0ZXIiLCJfY29udmVyc2F0aW9uIiwiaW5kZXgiLCJlbnN1cmVDb252ZXJzYXRpb25NZXNzYWdpbmdBbGxvd2VkIiwiY29udmVyc2F0aW9uSWQiLCJnZXRDb252ZXJzYXRpb25CeUlkIiwic2Vzc2lvblVzZXJJZCIsInBhcnRpY2lwYW50VXNlcklkIiwicGFyc2VDb252ZXJzYXRpb25PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsInVzZXJEb2NJZCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXREaXJlY3RDb252ZXJzYXRpb24iLCJmcm9tSWQiLCJ0b0lkIiwiZm9ybWF0RnJvbUlkIiwiZm9ybWF0VG9JZCIsInVzZXJJZHMiLCJzb3J0ZWRVc2VySWRzIiwiam9pbiIsIm5leHQiLCJhZGREaXJlY3RDb252ZXJzYXRpb24iLCJkYXRhYmFzZUVycm9yIiwiaW5zZXJ0IiwidXBkYXRlZENvbnZlcnNhdGlvbiIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwiRGF0ZSIsIm5vdyIsImluc2VydEVkZ2VRdWVyeSIsImdldENvbm5lY3Rpb25Vc2VyTGlzdCIsImluY2x1ZGVBbGwiLCJmaWx0ZXJzIiwicHVzaCIsImdldENvbnZlcnNhdGlvblVzZXJzIiwic2Vzc2lvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJ1cGRhdGVDb252ZXJzYXRpb24iLCJuYW1lIiwiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCJ1cGRhdGUiLCJhZGRVc2VyVG9Db252ZXJzYXRpb24iLCJmb3JtYXRVc2VySWQiLCJoYXNDb252ZXJzYXRpb25FZGdlIiwiY2hhdFNjaGVtYVZlcnNpb24iLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELDRHQUE0RyxHQUM1RyxTQUFRQSxTQUFTLFFBQU8sNkJBQTZCO0FBQ3JELFNBQVFDLFVBQVUsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUNqRSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEtBQUssUUFBTyw0QkFBNEI7QUFDbkUsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsMkJBQTJCLEVBQUVDLDBCQUEwQixRQUFPLGdCQUFnQjtBQUN0RixTQUFRQyxXQUFXLFFBQU8sYUFBYTtBQWdCdkMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLDRCQUE0QlgsUUFBUTtBQUUxQyxNQUFNWSxxQ0FBcUMsT0FDekNDLFNBQ0FDLFlBQ0FDO0lBRUEsTUFBTSxDQUFDQyxVQUFVQyxPQUFPLEdBQUcsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQzNDVixZQUFZSSxTQUFTO1lBQUNPLFFBQVFOO1FBQVU7UUFDeENMLFlBQVlJLFNBQVM7WUFBQ08sUUFBUUw7UUFBUTtLQUN2QztJQUNELE1BQU1NLGdCQUFnQnZCLFFBQVF3QixPQUFPTixVQUFVTyxhQUFh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
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3Ly5jb2RleC93b3JrdHJlZXMvdmF1bHQtczMtcmVsZWFzZS9yZWFrdG9yL3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuLyogZXNsaW50IG5vLXVuZGVyc2NvcmUtZGFuZ2xlOiBbXCJlcnJvclwiLCB7XCJhbGxvd1wiOiBbXCJfaWRcIiwgXCJfa2V5XCJdfV0gLS0gQXJhbmdvREIgZG9jdW1lbnQgaWRlbnRpdHkgZmllbGRzLiAqL1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL2Nsb25lJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHNvcnRJZHMsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlLCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZH0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge2dldFVzZXJCeUlkfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdCwgRWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDb252ZXJzYXRpb25PcHRpb25zLFxuICBDb252ZXJzYXRpb25UeXBlLFxuICBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtcyxcbiAgRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zLFxuICBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG59IGZyb20gJy4uL3R5cGVzL2NvbnZlcnNhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnY29udmVyc2F0aW9ucyc7XG5jb25zdCBoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9uID0gbGl0ZXJhbCgnaGFzQ29udmVyc2F0aW9uJyk7XG5cbmNvbnN0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21Vc2VySWQ6IHN0cmluZyxcbiAgdG9Vc2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IFtmcm9tVXNlciwgdG9Vc2VyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmcm9tVXNlcklkfSksXG4gICAgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogdG9Vc2VySWR9KVxuICBdKTtcbiAgY29uc3QgZnJvbVBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGZyb21Vc2VyPy5wZXJzb25hSWQgfHwgJycpKTtcbiAgY29uc3QgdG9QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyh0b1VzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKCFmcm9tUGVyc29uYUlkIHx8ICF0b1BlcnNvbmFJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIHRvUGVyc29uYUlkLCBmcm9tUGVyc29uYUlkKTtcblxuICBpZighcmVsYXRpb25zaGlwLmlzRnJpZW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cbn07XG5cbmNvbnN0IGZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25zOiBDb252ZXJzYXRpb25UeXBlW10gPSBbXVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKCFzZXNzaW9uUGVyc29uYUlkIHx8ICFjb252ZXJzYXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBjb252ZXJzYXRpb25zO1xuICB9XG5cbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKGNvbnZlcnNhdGlvbnMubWFwKGFzeW5jIChjb252ZXJzYXRpb24pID0+IHtcbiAgICBpZighY29udmVyc2F0aW9uPy5pc0RpcmVjdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGljaXBhbnQgPSBBcnJheS5pc0FycmF5KGNvbnZlcnNhdGlvbj8udXNlcnMpXG4gICAgICA/IGNvbnZlcnNhdGlvbi51c2Vycy5maW5kKCh1c2VyKSA9PiBwYXJzZUlkKFN0cmluZyh1c2VyPy51c2VySWQgfHwgdXNlcj8uX2tleSB8fCAnJykpICE9PSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBwYXJ0aWNpcGFudFBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBhcnRpY2lwYW50Py5wZXJzb25hSWQgfHwgJycpKTtcblxuICAgIGlmKCFwYXJ0aWNpcGFudFBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGFydGljaXBhbnRQZXJzb25hSWQsIHNlc3Npb25QZXJzb25hSWQpKTtcbiAgfSkpO1xuXG4gIHJldHVybiBjb252ZXJzYXRpb25zLmZpbHRlcigoX2NvbnZlcnNhdGlvbiwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlbnN1cmVDb252ZXJzYXRpb25NZXNzYWdpbmdBbGxvd2VkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgZ2V0Q29udmVyc2F0aW9uQnlJZChjb250ZXh0LCBjb252ZXJzYXRpb25JZCk7XG5cbiAgaWYoIWNvbnZlcnNhdGlvbj8uY29udmVyc2F0aW9uSWQgJiYgIWNvbnZlcnNhdGlvbj8uX2tleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgaWYoIWNvbnZlcnNhdGlvbj8uaXNEaXJlY3QpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IHBhcnRpY2lwYW50ID0gQXJyYXkuaXNBcnJheShjb252ZXJzYXRpb24/LnVzZXJzKVxuICAgID8gY29udmVyc2F0aW9uLnVzZXJzLmZpbmQoKHVzZXIpID0+IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnVzZXJJZCB8fCB1c2VyPy5fa2V5IHx8ICcnKSkgIT09IHNlc3Npb25Vc2VySWQpXG4gICAgOiBudWxsO1xuICBjb25zdCBwYXJ0aWNpcGFudFVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKHBhcnRpY2lwYW50Py51c2VySWQgfHwgcGFydGljaXBhbnQ/Ll9rZXkgfHwgJycpKTtcblxuICBpZighc2Vzc2lvblVzZXJJZCB8fCAhcGFydGljaXBhbnRVc2VySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgc2Vzc2lvblVzZXJJZCwgcGFydGljaXBhbnRVc2VySWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyA9IChvcHRpb25zOiBDb252ZXJzYXRpb25PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25MaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IENvbnZlcnNhdGlvbk9wdGlvbnNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb252ZXJzYXRpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VDb252ZXJzYXRpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHt1c2VySWR9YDtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYFxuICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHt1c2VyRG9jSWR9ICR7aGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBjLmNoYXRTY2hlbWFWZXJzaW9uICE9IDFcbiAgICAgIFNPUlQgYy5hZGRlZCBERVNDXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIHVjIElOIDEuLjEgSU5CT1VORCBjLl9pZCAke2hhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIHUuX2lkICE9ICR7dXNlckRvY0lkfVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzfSlcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC50aGVuKChjb252ZXJzYXRpb25zKSA9PiBmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyhjb250ZXh0LCBjb252ZXJzYXRpb25zKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGMgPSBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pIEZJTFRFUiBjLmNoYXRTY2hlbWFWZXJzaW9uICE9IDEgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuXG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBpc0RpcmVjdDogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IGFkZEl0ZW08Q29udmVyc2F0aW9uVHlwZT4oY29udGV4dCwgJ2NvbnZlcnNhdGlvbnMnLCBpbnNlcnQpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9uLSR7dXNlcklkfS0ke2NvbnZlcnNhdGlvbklkfWApO1xuICAgICAgY29uc3QgZWRnZTogRWRnZVR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGluc2VydEVkZ2VRdWVyeSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHsuLi51cGRhdGVkQ29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VyTGlzdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb25uZWN0aW9uVXNlckxpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRklMVEVSIERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkuY2hhdFNjaGVtYVZlcnNpb24gIT0gMVxuICAgIEZPUiBjIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb25uZWN0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uVXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpbmNsdWRlQWxsID0gZmFsc2UsXG4gICAgaXNEaXJlY3RcbiAgfTogQ29udmVyc2F0aW9uVXNlcnNQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KS5jaGF0U2NoZW1hVmVyc2lvbiAhPSAxXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25CeUlkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBjLl9pZCA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfSBBTkQgYy5jaGF0U2NoZW1hVmVyc2lvbiAhPSAxXG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgaW5Vc2VyLCBpbkVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7Y29udmVyc2F0aW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgICAgUkVUVVJOIGluVXNlclxuICAgIClcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBpZighY29udmVyc2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb252ZXJzYXRpb247XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGVcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb24tJHtzZXNzaW9uSWR9IGApLFxuICAgIGlzRGlyZWN0ID0gZmFsc2UsXG4gICAgbmFtZVxuICB9ID0gY29udmVyc2F0aW9uO1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgaXNEaXJlY3QsXG4gICAgbmFtZVxuICB9O1xuXG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRDb252ZXJzYXRpb25JZFxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGN1cnJlbnQgPSBET0NVTUVOVCgnY29udmVyc2F0aW9ucycsICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9KVxuICAgIEZJTFRFUiBjdXJyZW50LmNoYXRTY2hlbWFWZXJzaW9uICE9IDFcbiAgICBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4gY29udmVyc2F0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGNvbnZlcnNhdGlvbiA9IERPQ1VNRU5UKCR7Y29udmVyc2F0aW9uRG9jSWR9KVxuICAgIFJFVFVSTiBjb252ZXJzYXRpb24uY2hhdFNjaGVtYVZlcnNpb24gPT0gMSA/IHtjaGF0U2NoZW1hVmVyc2lvbjogMX0gOiBGSVJTVChcbiAgICAgIEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICAgICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICAgICAgTElNSVQgMSBSRVRVUk4gaGMpYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoaGFzQ29udmVyc2F0aW9uRWRnZSkgPT4ge1xuICAgICAgaWYoaGFzQ29udmVyc2F0aW9uRWRnZT8uY2hhdFNjaGVtYVZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgaWYoISFoYXNDb252ZXJzYXRpb25FZGdlKSB7XG4gICAgICAgIHJldHVybiBoYXNDb252ZXJzYXRpb25FZGdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbicpO1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9LSR7Zm9ybWF0VXNlcklkfWApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udmVyc2F0aW9uRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb25cbiAgICAgICAgLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAgIC50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgICBBTkQgRE9DVU1FTlQoJHtjb252ZXJzYXRpb25Eb2NJZH0pLmNoYXRTY2hlbWFWZXJzaW9uICE9IDFcbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG4iXSwibmFtZXMiOlsiY2xvbmVEZWVwIiwiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJhcWwiLCJsaXRlcmFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiZ2V0TGltaXQiLCJzb3J0SWRzIiwidXNlRGIiLCJhZGRJdGVtIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJnZXRVc2VyQnlJZCIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9uIiwiZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcCIsImNvbnRleHQiLCJmcm9tVXNlcklkIiwidG9Vc2VySWQiLCJmcm9tVXNlciIsInRvVXNlciIsIlByb21pc2UiLCJhbGwiLCJ1c2VySWQiLCJmcm9tUGVyc29uYUlkIiwiU3RyaW5nIiwicGVyc29uYUlkIiwidG9QZXJzb25hSWQiLCJFcnJvciIsIklOVkFMSURfQVVUSEVOVElDQVRJT04iLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsImZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zIiwiY29udmVyc2F0aW9ucyIsInNlc3Npb25QZXJzb25hSWQiLCJzZXNzaW9uIiwibGVuZ3RoIiwidmlzaWJpbGl0eSIsIm1hcCIsImNvbnZlcnNhdGlvbiIsImlzRGlyZWN0IiwicGFydGljaXBhbnQiLCJBcnJheSIsImlzQXJyYXkiLCJ1c2VycyIsImZpbmQiLCJ1c2VyIiwiX2tleSIsInBhcnRpY2lwYW50UGVyc29uYUlkIiwiZmlsdGVyIiwiX2NvbnZlcnNhdGlvbiIsImluZGV4IiwiZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCIsImNvbnZlcnNhdGlvbklkIiwiZ2V0Q29udmVyc2F0aW9uQnlJZCIsInNlc3Npb25Vc2VySWQiLCJwYXJ0aWNpcGFudFVzZXJJZCIsInBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJsaW1pdCIsImdldENvbnZlcnNhdGlvbkxpc3RCeVVzZXIiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJ1c2VyRG9jSWQiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0RGlyZWN0Q29udmVyc2F0aW9uIiwiZnJvbUlkIiwidG9JZCIsImZvcm1hdEZyb21JZCIsImZvcm1hdFRvSWQiLCJ1c2VySWRzIiwic29ydGVkVXNlcklkcyIsImpvaW4iLCJuZXh0IiwiYWRkRGlyZWN0Q29udmVyc2F0aW9uIiwiZGF0YWJhc2VFcnJvciIsImluc2VydCIsInVwZGF0ZWRDb252ZXJzYXRpb24iLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJpbnNlcnRFZGdlUXVlcnkiLCJnZXRDb25uZWN0aW9uVXNlckxpc3QiLCJpbmNsdWRlQWxsIiwiZmlsdGVycyIsInB1c2giLCJnZXRDb252ZXJzYXRpb25Vc2VycyIsInNlc3Npb25JZCIsInNlc3Npb25Eb2NJZCIsImNvbnZlcnNhdGlvbkRvY0lkIiwidXBkYXRlQ29udmVyc2F0aW9uIiwibmFtZSIsImZvcm1hdENvbnZlcnNhdGlvbklkIiwidXBkYXRlIiwiYWRkVXNlclRvQ29udmVyc2F0aW9uIiwiZm9ybWF0VXNlcklkIiwiaGFzQ29udmVyc2F0aW9uRWRnZSIsImNoYXRTY2hlbWFWZXJzaW9uIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwic2F2ZSIsInJldHVybk5ldyIsImRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCw0R0FBNEcsR0FDNUcsU0FBUUEsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFRQyxVQUFVLEVBQUVDLE9BQU8sUUFBTywrQkFBK0I7QUFDakUsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ25FLFNBQVFDLE9BQU8sUUFBTyxZQUFZO0FBQ2xDLFNBQVFDLDJCQUEyQixFQUFFQywwQkFBMEIsUUFBTyxnQkFBZ0I7QUFDdEYsU0FBUUMsV0FBVyxRQUFPLGFBQWE7QUFnQnZDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyw0QkFBNEJYLFFBQVE7QUFFMUMsTUFBTVkscUNBQXFDLE9BQ3pDQyxTQUNBQyxZQUNBQztJQUVBLE1BQU0sQ0FBQ0MsVUFBVUMsT0FBTyxHQUFHLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQztRQUMzQ1YsWUFBWUksU0FBUztZQUFDTyxRQUFRTjtRQUFVO1FBQ3hDTCxZQUFZSSxTQUFTO1lBQUNPLFFBQVFMO1FBQVE7S0FDdkM7SUFDRCxNQUFNTSxnQkFBZ0J2QixRQUFR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