@envive-ai/react-hooks 0.3.55 → 0.3.57

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 (93) hide show
  1. package/dist/application/commerce-api.cjs +11 -12
  2. package/dist/application/commerce-api.js +11 -12
  3. package/dist/application/logging/index.cjs +13 -0
  4. package/dist/application/logging/index.d.cts +3 -0
  5. package/dist/application/logging/index.d.ts +3 -0
  6. package/dist/application/logging/index.js +4 -0
  7. package/dist/application/logging/logLevel.cjs +123 -0
  8. package/dist/application/logging/logLevel.d.cts +47 -0
  9. package/dist/application/logging/logLevel.d.ts +47 -0
  10. package/dist/application/logging/logLevel.js +115 -0
  11. package/dist/application/logging/logger.cjs +6 -1
  12. package/dist/application/logging/logger.d.cts +13 -0
  13. package/dist/application/logging/logger.d.ts +13 -0
  14. package/dist/application/logging/logger.js +7 -1
  15. package/dist/atoms/app/index.d.cts +7 -7
  16. package/dist/atoms/app/index.d.ts +7 -7
  17. package/dist/atoms/app/variant.d.cts +6 -6
  18. package/dist/atoms/chat/chatState.d.cts +19 -19
  19. package/dist/atoms/chat/chatState.d.ts +19 -19
  20. package/dist/atoms/chat/form.d.cts +2 -2
  21. package/dist/atoms/chat/form.d.ts +2 -2
  22. package/dist/atoms/chat/index.d.cts +3 -3
  23. package/dist/atoms/chat/index.d.ts +3 -3
  24. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  25. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  26. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  27. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  28. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  29. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  30. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  31. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  32. package/dist/atoms/chat/replies.d.cts +3 -3
  33. package/dist/atoms/chat/replies.d.ts +3 -3
  34. package/dist/atoms/chat/suggestions.d.cts +2 -2
  35. package/dist/atoms/chat/suggestions.d.ts +2 -2
  36. package/dist/atoms/envive/enviveConfig.d.cts +14 -14
  37. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  38. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  39. package/dist/atoms/org/customerService.d.cts +6 -6
  40. package/dist/atoms/org/customerService.d.ts +6 -6
  41. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  42. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  43. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  44. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  45. package/dist/atoms/search/chatSearch.d.cts +17 -17
  46. package/dist/atoms/search/chatSearch.d.ts +17 -17
  47. package/dist/atoms/search/searchAPI.d.cts +13 -13
  48. package/dist/atoms/search/searchAPI.d.ts +13 -13
  49. package/dist/atoms/search/types.d.cts +1 -1
  50. package/dist/atoms/search/utils.d.cts +1 -1
  51. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  52. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  53. package/dist/contexts/salesAgentContext/salesAgentService.cjs +2 -2
  54. package/dist/contexts/salesAgentContext/salesAgentService.js +2 -2
  55. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  56. package/dist/contexts/types.d.cts +1 -1
  57. package/dist/contexts/types.d.ts +1 -1
  58. package/dist/contexts/typesV3.d.ts +1 -1
  59. package/dist/hooks/ChatToggle/useChatToggle.cjs +10 -8
  60. package/dist/hooks/ChatToggle/useChatToggle.d.cts +4 -3
  61. package/dist/hooks/ChatToggle/useChatToggle.d.ts +4 -3
  62. package/dist/hooks/ChatToggle/useChatToggle.js +11 -9
  63. package/dist/hooks/Intersection/useIntersection.cjs +7 -5
  64. package/dist/hooks/Intersection/useIntersection.js +7 -5
  65. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
  66. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
  67. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +8 -6
  68. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +8 -6
  69. package/dist/hooks/WidgetInteraction/types.cjs +40 -1
  70. package/dist/hooks/WidgetInteraction/types.d.cts +16 -2
  71. package/dist/hooks/WidgetInteraction/types.d.ts +16 -2
  72. package/dist/hooks/WidgetInteraction/types.js +41 -2
  73. package/dist/services/amplitudeService/amplitudeService.cjs +14 -5
  74. package/dist/services/amplitudeService/amplitudeService.js +14 -5
  75. package/package.json +6 -2
  76. package/src/application/__tests__/commerceApiStreaming.test.ts +171 -0
  77. package/src/application/commerce-api.ts +21 -21
  78. package/src/application/logging/__tests__/logger.test.ts +159 -0
  79. package/src/application/logging/index.ts +12 -0
  80. package/src/application/logging/logLevel.ts +162 -0
  81. package/src/application/logging/logger.ts +13 -0
  82. package/src/application/utils/__tests__/widgetTextFromApiWidgetTextResponse.test.ts +55 -0
  83. package/src/contexts/salesAgentContext/salesAgentService.ts +1 -1
  84. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +4 -5
  85. package/src/hooks/ChatToggle/__tests__/useChatToggle.test.ts +273 -0
  86. package/src/hooks/ChatToggle/useChatToggle.ts +39 -12
  87. package/src/hooks/Intersection/useIntersection.ts +7 -4
  88. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +8 -5
  89. package/src/hooks/WidgetInteraction/__tests__/chatTriggerWidget.test.ts +51 -0
  90. package/src/hooks/WidgetInteraction/types.ts +53 -0
  91. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +76 -0
  92. package/src/services/amplitudeService/amplitudeService.ts +37 -5
  93. package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +9 -0
@@ -1,3 +1,6 @@
1
+ import { ChatElementDisplayLocationV3 } from "../../application/models/chatElementDisplayLocationV3.js";
2
+ import "../../application/models/index.js";
3
+
1
4
  //#region src/hooks/WidgetInteraction/types.ts
2
5
  let WidgetInteractionPageType = /* @__PURE__ */ function(WidgetInteractionPageType$1) {
3
6
  WidgetInteractionPageType$1["PDP"] = "pdp";
@@ -81,7 +84,43 @@ const INTERACTION_TYPE_CLASS = {
81
84
  [WidgetInteractionType.VARIANT_OPTION_SELECTED]: InteractionClass.INTENTIONAL,
82
85
  [WidgetInteractionType.VARIANT_SELECTOR_DISMISSED]: InteractionClass.NAVIGATIONAL
83
86
  };
87
+ /**
88
+ * Attribution map: which widget a chat open/close should be credited to, given the surface that
89
+ * triggered it.
90
+ *
91
+ * `null` marks a *system-initiated* trigger — the auto-popup timer, a referrer-based prompt, or a
92
+ * merchant `window` API call. Those are not user clicks, so they must not emit an intentional
93
+ * WIDGET_CLICKED. The chat's own WIDGET_EXPANDED still records that the chat opened, so no signal
94
+ * is lost by skipping them.
95
+ *
96
+ * Keyed exhaustively on purpose: adding a ChatElementDisplayLocationV3 member is a compile error
97
+ * until it is given an attribution here, rather than silently defaulting to the wrong widget.
98
+ */
99
+ const CHAT_TRIGGER_WIDGET = {
100
+ [ChatElementDisplayLocationV3.PROMPT_CAROUSEL]: WidgetInteractionComponent.SUGGESTION_BAR,
101
+ [ChatElementDisplayLocationV3.TITLED_PROMPT_CAROUSEL]: WidgetInteractionComponent.EMBEDDED_WIDGET,
102
+ [ChatElementDisplayLocationV3.TYPING_ANIMATION]: WidgetInteractionComponent.EMBEDDED_WIDGET,
103
+ [ChatElementDisplayLocationV3.SOCIAL_PROOF_PRIMARY_BUTTON]: WidgetInteractionComponent.SOCIAL_PROOF,
104
+ [ChatElementDisplayLocationV3.SOCIAL_PROOF_SECONDARY_BUTTON]: WidgetInteractionComponent.SOCIAL_PROOF,
105
+ [ChatElementDisplayLocationV3.SOCIAL_PROOF_TEXT_FIELD]: WidgetInteractionComponent.SOCIAL_PROOF,
106
+ [ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_PROMPT_BUTTON]: WidgetInteractionComponent.POST_INTERACTION_COMPARISON,
107
+ [ChatElementDisplayLocationV3.CHAT_PREVIEW_COMPARISON_TEXT_FIELD]: WidgetInteractionComponent.POST_INTERACTION_COMPARISON,
108
+ [ChatElementDisplayLocationV3.CHAT_PREVIEW_PROMPT_BUTTON]: WidgetInteractionComponent.CHAT_PREVIEW,
109
+ [ChatElementDisplayLocationV3.CHAT_PREVIEW_TEXT_FIELD]: WidgetInteractionComponent.CHAT_PREVIEW,
110
+ [ChatElementDisplayLocationV3.PROMPT_BUTTON_CAROUSEL_WITH_IMAGE_PROMPT_BUTTON]: WidgetInteractionComponent.SINGLE_IMAGE_PROMPT,
111
+ [ChatElementDisplayLocationV3.PROMPT_BUTTON_CAROUSEL_WITH_IMAGE_TEXT_FIELD]: WidgetInteractionComponent.SINGLE_IMAGE_PROMPT,
112
+ [ChatElementDisplayLocationV3.FLOATING_BUTTON]: WidgetInteractionComponent.FLOATING_BUTTON,
113
+ [ChatElementDisplayLocationV3.FLOATING_CHAT_OVERLAY]: WidgetInteractionComponent.FLOATING_CHAT,
114
+ [ChatElementDisplayLocationV3.FLOATING_CHAT_CLOSE_BUTTON]: WidgetInteractionComponent.FLOATING_CHAT,
115
+ [ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON]: WidgetInteractionComponent.FLOATING_CHAT,
116
+ [ChatElementDisplayLocationV3.FLOATING_CHAT_TEXT_INPUT]: WidgetInteractionComponent.FLOATING_CHAT,
117
+ [ChatElementDisplayLocationV3.PRODUCT_CARD_PROMPT_BUTTON]: WidgetInteractionComponent.IMAGE_PROMPT_CARD,
118
+ [ChatElementDisplayLocationV3.PRODUCT_CARD_TEXT_FIELD]: WidgetInteractionComponent.IMAGE_PROMPT_CARD,
119
+ [ChatElementDisplayLocationV3.WINDOW_API_CALL]: null,
120
+ [ChatElementDisplayLocationV3.REFERRER_BASED_PROMPT]: null,
121
+ [ChatElementDisplayLocationV3.AUTOMATIC_PROMPT]: null
122
+ };
84
123
 
85
124
  //#endregion
86
- export { INTERACTION_TYPE_CLASS, InteractionClass, WidgetInteractionComponent, WidgetInteractionPageType, WidgetInteractionType };
87
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJuYW1lcyI6WyJJTlRFUkFDVElPTl9UWVBFX0NMQVNTOiBSZWNvcmQ8V2lkZ2V0SW50ZXJhY3Rpb25UeXBlLCBJbnRlcmFjdGlvbkNsYXNzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnLi4vLi4vY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0SW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgcGFnZV90eXBlOiBXaWRnZXRJbnRlcmFjdGlvblBhZ2VUeXBlO1xuICBwYWdlX2lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0SW50ZXJhY3Rpb25UcmlnZ2VyIHtcbiAgaW50ZXJhY3Rpb25faWQ/OiBzdHJpbmc7XG4gIHdpZGdldDogV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQ7XG4gIHdpZGdldF9pbnRlcmFjdGlvbjogV2lkZ2V0SW50ZXJhY3Rpb25UeXBlO1xuICB3aWRnZXRfaW50ZXJhY3Rpb25fZGF0YT86IFdpZGdldEludGVyYWN0aW9uRGF0YSB8IG51bGw7XG4gIGludGVyYWN0aW9uX2NsYXNzPzogSW50ZXJhY3Rpb25DbGFzcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbFdpZGdldEludGVyYWN0aW9uIHtcbiAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZTtcbiAgY29udGV4dDogV2lkZ2V0SW50ZXJhY3Rpb25Db250ZXh0O1xuICB0cmlnZ2VyOiBXaWRnZXRJbnRlcmFjdGlvblRyaWdnZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0SW50ZXJhY3Rpb24ge1xuICBldmVudE5hbWU6IEludGVybmFsV2lkZ2V0SW50ZXJhY3Rpb25bJ2V2ZW50TmFtZSddO1xuICB0cmlnZ2VyOiBJbnRlcm5hbFdpZGdldEludGVyYWN0aW9uWyd0cmlnZ2VyJ107XG59XG5cbmV4cG9ydCBlbnVtIFdpZGdldEludGVyYWN0aW9uUGFnZVR5cGUge1xuICBQRFAgPSAncGRwJyxcbiAgUExQID0gJ3BscCcsXG4gIEhPTUVQQUdFID0gJ2hvbWVwYWdlJyxcbiAgU0VBUkNIID0gJ3NlYXJjaCcsXG4gIE9USEVSID0gJ290aGVyJyxcbiAgQURBUFRJVkVfU1RPUkVGUk9OVCA9ICdhZGFwdGl2ZV9zdG9yZWZyb250Jyxcbn1cblxuZXhwb3J0IGVudW0gV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQge1xuICBFTUJFRERFRF9XSURHRVQgPSAnZW1iZWRkZWRfd2lkZ2V0JyxcbiAgU1VHR0VTVElPTl9CQVIgPSAnc3VnZ2VzdGlvbl9iYXInLFxuICBGTE9BVElOR19CVVRUT04gPSAnZmxvYXRpbmdfYnV0dG9uJyxcbiAgRlVMTF9QQUdFX1NBTEVTX0FHRU5UID0gJ2Z1bGxfcGFnZV9zYWxlc19hZ2VudCcsXG4gIC8vIERlZmF1bHQtdmlldyBwcm9kdWN0IHN1Z2dlc3Rpb24gLyByZWNvbW1lbmRhdGlvbnMgd2lkZ2V0ICh3ZWxjb21lIG92ZXJsYXkpIG9uIHRoZSBBZGFwdGl2ZVxuICAvLyBTdG9yZWZyb250LiBEaXN0aW5jdCBmcm9tIEZVTExfUEFHRV9TQUxFU19BR0VOVCAoaW4tY2hhdCBwcm9kdWN0IGNhcmRzKSBzbyBhbmFseXRpY3MgY2FuXG4gIC8vIHNlcGFyYXRlIHRoZSBzdGF0aWMgc3VnZ2VzdGlvbiBzdXJmYWNlIGZyb20gdGhlIGNvbnZlcnNhdGlvbmFsIHJlY29tbWVuZGVyLlxuICBGVUxMX1BBR0VfU0FMRVNfQUdFTlRfUkVDT01NRU5EQVRJT05TID0gJ2Z1bGxfcGFnZV9zYWxlc19hZ2VudF9yZWNvbW1lbmRhdGlvbnMnLFxuICAvLyBBIGNsaWNrIG9uIHRoZSBBZGQgdG8gQ2FydCBidXR0b24gb2YgYSBGVUxMX1BBR0VfU0FMRVNfQUdFTlRfUkVDT01NRU5EQVRJT05TIGNhcmQgdGhhdFxuICAvLyBmYWxscyBiYWNrIHRvIHRoZSBQRFAgYmVjYXVzZSBubyBtZXJjaGFudCBBZGQgdG8gQ2FydCBpbnRlZ3JhdGlvbiBpcyBhdmFpbGFibGUuIFN0aWxsXG4gIC8vIGZpcmVzIGFzIGEgUFJPRFVDVF9DQVJEX0NMSUNLRUQgZXZlbnQsIGJ1dCB0YWdnZWQgZGlzdGluY3RseSBmcm9tIGEgZGlyZWN0IGNhcmQtYm9keVxuICAvLyBjbGljayBzbyBhbmFseXRpY3MgY2FuIHRlbGwgdGhlIHR3byBhcGFydC5cbiAgRlVMTF9QQUdFX1NBTEVTX0FHRU5UX1JFQ09NTUVOREFUSU9OU19BVENfRkFMTEJBQ0sgPSAnZnVsbF9wYWdlX3NhbGVzX2FnZW50X3JlY29tbWVuZGF0aW9uc19hdGNfZmFsbGJhY2snLFxuICBTT0NJQUxfUFJPT0YgPSAnc29jaWFsX3Byb29mJyxcbiAgQ0hBVF9QUkVWSUVXID0gJ2NoYXRfcHJldmlldycsXG4gIEZMT0FUSU5HX0NIQVQgPSAnZmxvYXRpbmdfY2hhdCcsXG4gIFNJTkdMRV9JTUFHRV9QUk9NUFQgPSAnc2luZ2xlX2ltYWdlX3Byb21wdCcsXG4gIElNQUdFX1BST01QVF9DQVJEID0gJ2ltYWdlX3Byb21wdF9jYXJkJyxcbiAgUE9TVF9JTlRFUkFDVElPTl9DT01QQVJJU09OID0gJ3Bvc3RfaW50ZXJhY3Rpb25fY29tcGFyaXNvbicsXG4gIFBPU1RfSU5URVJBQ1RJT05fRU1CRURERUQgPSAncG9zdF9pbnRlcmFjdGlvbl9lbWJlZGRlZCcsXG59XG5cbmV4cG9ydCBlbnVtIFdpZGdldEludGVyYWN0aW9uVHlwZSB7XG4gIFFVRVJZX0lOUFVUX0NMSUNLRUQgPSAncXVlcnlfaW5wdXRfY2xpY2tlZCcsXG4gIFNVR0dFU1RJT05fQ0xJQ0tFRCA9ICdzdWdnZXN0aW9uX2NsaWNrZWQnLFxuICBXSURHRVRfQ0xJQ0tFRCA9ICd3aWRnZXRfY2xpY2tlZCcsXG4gIFdJREdFVF9IT1ZFUkVEID0gJ3dpZGdldF9ob3ZlcmVkJyxcbiAgV0lER0VUX0VYUEFOREVEID0gJ3dpZGdldF9leHBhbmRlZCcsXG4gIFdJREdFVF9DT0xMQVBTRUQgPSAnd2lkZ2V0X2NvbGxhcHNlZCcsXG4gIFNVR0dFU1RJT05fU0NST0xMRUQgPSAnc3VnZ2VzdGlvbl9zY3JvbGxlZCcsXG4gIExJTktfQ0xJQ0tFRCA9ICdsaW5rX2NsaWNrZWQnLFxuICBQUk9EVUNUX0NBUkRfQ0xJQ0tFRCA9ICdwcm9kdWN0X2NhcmRfY2xpY2tlZCcsXG4gIEFERF9UT19DQVJUX0NMSUNLRUQgPSAnYWRkX3RvX2NhcnRfY2xpY2tlZCcsXG4gIEFERF9UT19DQVJUX0ZBSUxFRCA9ICdhZGRfdG9fY2FydF9mYWlsZWQnLFxuICBURVhUX0xJTktfQ0xJQ0tFRCA9ICd0ZXh0X2xpbmtfY2xpY2tlZCcsXG4gIEFTRl9MSU5LX0JVVFRPTiA9ICdhc2ZfbGlua19idXR0b24nLFxuICBBUlRJQ0xFX0xJTktfQ0xJQ0tFRCA9ICdhcnRpY2xlX2xpbmtfY2xpY2tlZCcsXG4gIFJFVklFV19DQVJEX0NMSUNLRUQgPSAncmV2aWV3X2NhcmRfY2xpY2tlZCcsXG4gIE1FU1NBR0VfU1VCTUlUVEVEID0gJ21lc3NhZ2Vfc3VibWl0dGVkJyxcbiAgTUFOVUFMX1NDUk9MTF9UT19CT1RUT00gPSAnbWFudWFsX3Njcm9sbF90b19ib3R0b20nLFxuICBWT0lDRV9UUkFOU0NSSVBUSU9OX1NUQVJURUQgPSAndm9pY2VfdHJhbnNjcmlwdGlvbl9zdGFydGVkJyxcbiAgVk9JQ0VfVFJBTlNDUklQVElPTl9DT01QTEVURUQgPSAndm9pY2VfdHJhbnNjcmlwdGlvbl9jb21wbGV0ZWQnLFxuICBPVkVSTEFZX0RJU01JU1NFRCA9ICdvdmVybGF5X2Rpc21pc3NlZCcsXG4gIFZBUklBTlRfU0VMRUNUT1JfT1BFTkVEID0gJ3ZhcmlhbnRfc2VsZWN0b3Jfb3BlbmVkJyxcbiAgVkFSSUFOVF9PUFRJT05fU0VMRUNURUQgPSAndmFyaWFudF9vcHRpb25fc2VsZWN0ZWQnLFxuICBWQVJJQU5UX1NFTEVDVE9SX0RJU01JU1NFRCA9ICd2YXJpYW50X3NlbGVjdG9yX2Rpc21pc3NlZCcsXG59XG5cbmV4cG9ydCBlbnVtIEludGVyYWN0aW9uQ2xhc3Mge1xuICBQQVNTSVZFID0gJ3Bhc3NpdmUnLCAvLyBObyB1c2VyIGNvbW1pdG1lbnQg4oCUIGhvdmVyLCBzY3JvbGwsIHZpc2liaWxpdHkgdHJpZ2dlcnNcbiAgTkFWSUdBVElPTkFMID0gJ25hdmlnYXRpb25hbCcsIC8vIE9wZW5zL2Nsb3NlcyBzb21ldGhpbmcg4oCUIG9mdGVuIGEgc2lkZSBlZmZlY3Qgb2YgaW50ZW50XG4gIElOVEVOVElPTkFMID0gJ2ludGVudGlvbmFsJywgLy8gRGVsaWJlcmF0ZSB1c2VyIGFjdGlvbiDigJQgY2xpY2tzLCBzdWJtaXRzLCB0eXBlZCBxdWVyaWVzXG59XG5cbmV4cG9ydCBjb25zdCBJTlRFUkFDVElPTl9UWVBFX0NMQVNTOiBSZWNvcmQ8V2lkZ2V0SW50ZXJhY3Rpb25UeXBlLCBJbnRlcmFjdGlvbkNsYXNzPiA9IHtcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5RVUVSWV9JTlBVVF9DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5TVUdHRVNUSU9OX0NMSUNLRURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLldJREdFVF9DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5XSURHRVRfSE9WRVJFRF06IEludGVyYWN0aW9uQ2xhc3MuUEFTU0lWRSxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5XSURHRVRfRVhQQU5ERURdOiBJbnRlcmFjdGlvbkNsYXNzLk5BVklHQVRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5XSURHRVRfQ09MTEFQU0VEXTogSW50ZXJhY3Rpb25DbGFzcy5OQVZJR0FUSU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuU1VHR0VTVElPTl9TQ1JPTExFRF06IEludGVyYWN0aW9uQ2xhc3MuUEFTU0lWRSxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5MSU5LX0NMSUNLRURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlBST0RVQ1RfQ0FSRF9DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5BRERfVE9fQ0FSVF9DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5BRERfVE9fQ0FSVF9GQUlMRURdOiBJbnRlcmFjdGlvbkNsYXNzLlBBU1NJVkUsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuVEVYVF9MSU5LX0NMSUNLRURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLkFTRl9MSU5LX0JVVFRPTl06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuQVJUSUNMRV9MSU5LX0NMSUNLRURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlJFVklFV19DQVJEX0NMSUNLRURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLk1FU1NBR0VfU1VCTUlUVEVEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5NQU5VQUxfU0NST0xMX1RPX0JPVFRPTV06IEludGVyYWN0aW9uQ2xhc3MuUEFTU0lWRSxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5WT0lDRV9UUkFOU0NSSVBUSU9OX1NUQVJURURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlZPSUNFX1RSQU5TQ1JJUFRJT05fQ09NUExFVEVEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5PVkVSTEFZX0RJU01JU1NFRF06IEludGVyYWN0aW9uQ2xhc3MuTkFWSUdBVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlZBUklBTlRfU0VMRUNUT1JfT1BFTkVEXTogSW50ZXJhY3Rpb25DbGFzcy5OQVZJR0FUSU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuVkFSSUFOVF9PUFRJT05fU0VMRUNURURdOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlZBUklBTlRfU0VMRUNUT1JfRElTTUlTU0VEXTogSW50ZXJhY3Rpb25DbGFzcy5OQVZJR0FUSU9OQUwsXG59O1xuXG5leHBvcnQgdHlwZSBVUkwgPSB7XG4gIHVybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZHVjdCA9IHtcbiAgcHJvZHVjdF9pZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgV2lkZ2V0TG9jYXRpb24gPSAnY2hhdCcgfCAnb3ZlcmxheScgfCAndmFyaWFudF9zZWxlY3Rvcic7XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RXaXRoTG9jYXRpb24gPSBQcm9kdWN0ICYge1xuICB3aWRnZXRfbG9jYXRpb246IFdpZGdldExvY2F0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgUmV2aWV3ID0ge1xuICByZXZpZXdfaWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1Z2dlc3Rpb24gPSB7XG4gIHN1Z2dlc3Rpb25faWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3QgPSB7XG4gIHJlcXVlc3RfdGV4dDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sbGFwc2UgPSB7XG4gIGNvbGxhcHNlX3NvdXJjZTogJ2Nsb3NlX2J1dHRvbicgfCAnc3dpcGUnIHwgJ2JvZHlfY2xpY2snO1xufTtcblxuZXhwb3J0IHR5cGUgU3VnZ2VzdGlvblNjcm9sbGVkID0ge1xuICBzdWdnZXN0aW9uX3Njcm9sbGVkOiBTdWdnZXN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgU3VnZ2VzdGlvbkNsaWNrZWQgPSB7XG4gIHN1Z2dlc3Rpb25fY2xpY2tlZDogU3VnZ2VzdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFN1Z2dlc3Rpb25Ib3ZlcmVkID0ge1xuICBzdWdnZXN0aW9uX2hvdmVyZWQ6IFN1Z2dlc3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBMaW5rQ2xpY2tlZCA9IHtcbiAgbGlua19jbGlja2VkOiBVUkw7XG59O1xuXG5leHBvcnQgdHlwZSBXaWRnZXRDb2xsYXBzZWQgPSB7XG4gIHdpZGdldF9jb2xsYXBzZWQ6IENvbGxhcHNlO1xufTtcblxuZXhwb3J0IHR5cGUgVGV4dExpbmtDbGlja2VkID0ge1xuICB0ZXh0X2xpbmtfY2xpY2tlZDogVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgQXNmTGlua0J1dHRvbiA9IHtcbiAgYXNmX2xpbmtfYnV0dG9uOiBVUkw7XG59O1xuXG5leHBvcnQgdHlwZSBBcnRpY2xlTGlua0NsaWNrZWQgPSB7XG4gIGFydGljbGVfbGlua19jbGlja2VkOiBVUkw7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9kdWN0Q2FyZENsaWNrZWQgPSB7XG4gIHByb2R1Y3RfY2FyZF9jbGlja2VkOiBQcm9kdWN0O1xufTtcblxuZXhwb3J0IHR5cGUgQWRkVG9DYXJ0Q2xpY2tlZCA9IHtcbiAgYWRkX3RvX2NhcnRfY2xpY2tlZDogUHJvZHVjdFdpdGhMb2NhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFkZFRvQ2FydEZhaWxlZCA9IHtcbiAgYWRkX3RvX2NhcnRfZmFpbGVkOiBQcm9kdWN0V2l0aExvY2F0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgUmV2aWV3Q2FyZENsaWNrZWQgPSB7XG4gIHJldmlld19jYXJkX2NsaWNrZWQ6IFJldmlldztcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VTdWJtaXR0ZWQgPSB7XG4gIG1lc3NhZ2Vfc3VibWl0dGVkOiBSZXF1ZXN0O1xufTtcblxuZXhwb3J0IHR5cGUgVm9pY2VUcmFuc2NyaXB0aW9uID0ge1xuICB0cmFuc2NyaXB0aW9uOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RlZFZhcmlhbnRPcHRpb24gPSB7XG4gIHByb2R1Y3RfaWQ6IHN0cmluZztcbiAgb3B0aW9uX25hbWU6IHN0cmluZztcbiAgb3B0aW9uX3ZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBWYXJpYW50U2VsZWN0b3JPcGVuZWQgPSB7XG4gIHZhcmlhbnRfc2VsZWN0b3Jfb3BlbmVkOiBQcm9kdWN0O1xufTtcblxuZXhwb3J0IHR5cGUgVmFyaWFudE9wdGlvblNlbGVjdGVkID0ge1xuICB2YXJpYW50X29wdGlvbl9zZWxlY3RlZDogU2VsZWN0ZWRWYXJpYW50T3B0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVmFyaWFudFNlbGVjdG9yRGlzbWlzc2VkID0ge1xuICB2YXJpYW50X3NlbGVjdG9yX2Rpc21pc3NlZDogUHJvZHVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIFdpZGdldEludGVyYWN0aW9uRGF0YSA9XG4gIHwgU3VnZ2VzdGlvblNjcm9sbGVkXG4gIHwgU3VnZ2VzdGlvbkNsaWNrZWRcbiAgfCBTdWdnZXN0aW9uSG92ZXJlZFxuICB8IExpbmtDbGlja2VkXG4gIHwgV2lkZ2V0Q29sbGFwc2VkXG4gIHwgVGV4dExpbmtDbGlja2VkXG4gIHwgQXNmTGlua0J1dHRvblxuICB8IEFydGljbGVMaW5rQ2xpY2tlZFxuICB8IFByb2R1Y3RDYXJkQ2xpY2tlZFxuICB8IEFkZFRvQ2FydENsaWNrZWRcbiAgfCBBZGRUb0NhcnRGYWlsZWRcbiAgfCBSZXZpZXdDYXJkQ2xpY2tlZFxuICB8IE1lc3NhZ2VTdWJtaXR0ZWRcbiAgfCBWb2ljZVRyYW5zY3JpcHRpb25cbiAgfCBWYXJpYW50U2VsZWN0b3JPcGVuZWRcbiAgfCBWYXJpYW50T3B0aW9uU2VsZWN0ZWRcbiAgfCBWYXJpYW50U2VsZWN0b3JEaXNtaXNzZWQ7XG4iXSwibWFwcGluZ3MiOiI7QUEwQkEsSUFBWSxrRkFBTDtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0YsSUFBWSxvRkFBTDtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHRixJQUFZLDBFQUFMO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0YsSUFBWSxnRUFBTDtBQUNMO0FBQ0E7QUFDQTs7O0FBR0YsTUFBYUEseUJBQTBFO0VBQ3BGLHNCQUFzQixzQkFBc0IsaUJBQWlCO0VBQzdELHNCQUFzQixxQkFBcUIsaUJBQWlCO0VBQzVELHNCQUFzQixpQkFBaUIsaUJBQWlCO0VBQ3hELHNCQUFzQixpQkFBaUIsaUJBQWlCO0VBQ3hELHNCQUFzQixrQkFBa0IsaUJBQWlCO0VBQ3pELHNCQUFzQixtQkFBbUIsaUJBQWlCO0VBQzFELHNCQUFzQixzQkFBc0IsaUJBQWlCO0VBQzdELHNCQUFzQixlQUFlLGlCQUFpQjtFQUN0RCxzQkFBc0IsdUJBQXVCLGlCQUFpQjtFQUM5RCxzQkFBc0Isc0JBQXNCLGlCQUFpQjtFQUM3RCxzQkFBc0IscUJBQXFCLGlCQUFpQjtFQUM1RCxzQkFBc0Isb0JBQW9CLGlCQUFpQjtFQUMzRCxzQkFBc0Isa0JBQWtCLGlCQUFpQjtFQUN6RCxzQkFBc0IsdUJBQXVCLGlCQUFpQjtFQUM5RCxzQkFBc0Isc0JBQXNCLGlCQUFpQjtFQUM3RCxzQkFBc0Isb0JBQW9CLGlCQUFpQjtFQUMzRCxzQkFBc0IsMEJBQTBCLGlCQUFpQjtFQUNqRSxzQkFBc0IsOEJBQThCLGlCQUFpQjtFQUNyRSxzQkFBc0IsZ0NBQWdDLGlCQUFpQjtFQUN2RSxzQkFBc0Isb0JBQW9CLGlCQUFpQjtFQUMzRCxzQkFBc0IsMEJBQTBCLGlCQUFpQjtFQUNqRSxzQkFBc0IsMEJBQTBCLGlCQUFpQjtFQUNqRSxzQkFBc0IsNkJBQTZCLGlCQUFpQjtDQUN0RSJ9
125
+ export { CHAT_TRIGGER_WIDGET, INTERACTION_TYPE_CLASS, InteractionClass, WidgetInteractionComponent, WidgetInteractionPageType, WidgetInteractionType };
126
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJuYW1lcyI6WyJJTlRFUkFDVElPTl9UWVBFX0NMQVNTOiBSZWNvcmQ8V2lkZ2V0SW50ZXJhY3Rpb25UeXBlLCBJbnRlcmFjdGlvbkNsYXNzPiIsIkNIQVRfVFJJR0dFUl9XSURHRVQ6IFJlY29yZDxcbiAgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyxcbiAgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfCBudWxsXG4+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1dpZGdldEludGVyYWN0aW9uL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4uLy4uL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldEludGVyYWN0aW9uQ29udGV4dCB7XG4gIHBhZ2VfdHlwZTogV2lkZ2V0SW50ZXJhY3Rpb25QYWdlVHlwZTtcbiAgcGFnZV9pZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldEludGVyYWN0aW9uVHJpZ2dlciB7XG4gIGludGVyYWN0aW9uX2lkPzogc3RyaW5nO1xuICB3aWRnZXQ6IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50O1xuICB3aWRnZXRfaW50ZXJhY3Rpb246IFdpZGdldEludGVyYWN0aW9uVHlwZTtcbiAgd2lkZ2V0X2ludGVyYWN0aW9uX2RhdGE/OiBXaWRnZXRJbnRlcmFjdGlvbkRhdGEgfCBudWxsO1xuICBpbnRlcmFjdGlvbl9jbGFzcz86IEludGVyYWN0aW9uQ2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxXaWRnZXRJbnRlcmFjdGlvbiB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWU7XG4gIGNvbnRleHQ6IFdpZGdldEludGVyYWN0aW9uQ29udGV4dDtcbiAgdHJpZ2dlcjogV2lkZ2V0SW50ZXJhY3Rpb25UcmlnZ2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldEludGVyYWN0aW9uIHtcbiAgZXZlbnROYW1lOiBJbnRlcm5hbFdpZGdldEludGVyYWN0aW9uWydldmVudE5hbWUnXTtcbiAgdHJpZ2dlcjogSW50ZXJuYWxXaWRnZXRJbnRlcmFjdGlvblsndHJpZ2dlciddO1xufVxuXG5leHBvcnQgZW51bSBXaWRnZXRJbnRlcmFjdGlvblBhZ2VUeXBlIHtcbiAgUERQID0gJ3BkcCcsXG4gIFBMUCA9ICdwbHAnLFxuICBIT01FUEFHRSA9ICdob21lcGFnZScsXG4gIFNFQVJDSCA9ICdzZWFyY2gnLFxuICBPVEhFUiA9ICdvdGhlcicsXG4gIEFEQVBUSVZFX1NUT1JFRlJPTlQgPSAnYWRhcHRpdmVfc3RvcmVmcm9udCcsXG59XG5cbmV4cG9ydCBlbnVtIFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50IHtcbiAgRU1CRURERURfV0lER0VUID0gJ2VtYmVkZGVkX3dpZGdldCcsXG4gIFNVR0dFU1RJT05fQkFSID0gJ3N1Z2dlc3Rpb25fYmFyJyxcbiAgRkxPQVRJTkdfQlVUVE9OID0gJ2Zsb2F0aW5nX2J1dHRvbicsXG4gIEZVTExfUEFHRV9TQUxFU19BR0VOVCA9ICdmdWxsX3BhZ2Vfc2FsZXNfYWdlbnQnLFxuICAvLyBEZWZhdWx0LXZpZXcgcHJvZHVjdCBzdWdnZXN0aW9uIC8gcmVjb21tZW5kYXRpb25zIHdpZGdldCAod2VsY29tZSBvdmVybGF5KSBvbiB0aGUgQWRhcHRpdmVcbiAgLy8gU3RvcmVmcm9udC4gRGlzdGluY3QgZnJvbSBGVUxMX1BBR0VfU0FMRVNfQUdFTlQgKGluLWNoYXQgcHJvZHVjdCBjYXJkcykgc28gYW5hbHl0aWNzIGNhblxuICAvLyBzZXBhcmF0ZSB0aGUgc3RhdGljIHN1Z2dlc3Rpb24gc3VyZmFjZSBmcm9tIHRoZSBjb252ZXJzYXRpb25hbCByZWNvbW1lbmRlci5cbiAgRlVMTF9QQUdFX1NBTEVTX0FHRU5UX1JFQ09NTUVOREFUSU9OUyA9ICdmdWxsX3BhZ2Vfc2FsZXNfYWdlbnRfcmVjb21tZW5kYXRpb25zJyxcbiAgLy8gQSBjbGljayBvbiB0aGUgQWRkIHRvIENhcnQgYnV0dG9uIG9mIGEgRlVMTF9QQUdFX1NBTEVTX0FHRU5UX1JFQ09NTUVOREFUSU9OUyBjYXJkIHRoYXRcbiAgLy8gZmFsbHMgYmFjayB0byB0aGUgUERQIGJlY2F1c2Ugbm8gbWVyY2hhbnQgQWRkIHRvIENhcnQgaW50ZWdyYXRpb24gaXMgYXZhaWxhYmxlLiBTdGlsbFxuICAvLyBmaXJlcyBhcyBhIFBST0RVQ1RfQ0FSRF9DTElDS0VEIGV2ZW50LCBidXQgdGFnZ2VkIGRpc3RpbmN0bHkgZnJvbSBhIGRpcmVjdCBjYXJkLWJvZHlcbiAgLy8gY2xpY2sgc28gYW5hbHl0aWNzIGNhbiB0ZWxsIHRoZSB0d28gYXBhcnQuXG4gIEZVTExfUEFHRV9TQUxFU19BR0VOVF9SRUNPTU1FTkRBVElPTlNfQVRDX0ZBTExCQUNLID0gJ2Z1bGxfcGFnZV9zYWxlc19hZ2VudF9yZWNvbW1lbmRhdGlvbnNfYXRjX2ZhbGxiYWNrJyxcbiAgU09DSUFMX1BST09GID0gJ3NvY2lhbF9wcm9vZicsXG4gIENIQVRfUFJFVklFVyA9ICdjaGF0X3ByZXZpZXcnLFxuICBGTE9BVElOR19DSEFUID0gJ2Zsb2F0aW5nX2NoYXQnLFxuICBTSU5HTEVfSU1BR0VfUFJPTVBUID0gJ3NpbmdsZV9pbWFnZV9wcm9tcHQnLFxuICBJTUFHRV9QUk9NUFRfQ0FSRCA9ICdpbWFnZV9wcm9tcHRfY2FyZCcsXG4gIFBPU1RfSU5URVJBQ1RJT05fQ09NUEFSSVNPTiA9ICdwb3N0X2ludGVyYWN0aW9uX2NvbXBhcmlzb24nLFxuICBQT1NUX0lOVEVSQUNUSU9OX0VNQkVEREVEID0gJ3Bvc3RfaW50ZXJhY3Rpb25fZW1iZWRkZWQnLFxufVxuXG5leHBvcnQgZW51bSBXaWRnZXRJbnRlcmFjdGlvblR5cGUge1xuICBRVUVSWV9JTlBVVF9DTElDS0VEID0gJ3F1ZXJ5X2lucHV0X2NsaWNrZWQnLFxuICBTVUdHRVNUSU9OX0NMSUNLRUQgPSAnc3VnZ2VzdGlvbl9jbGlja2VkJyxcbiAgV0lER0VUX0NMSUNLRUQgPSAnd2lkZ2V0X2NsaWNrZWQnLFxuICBXSURHRVRfSE9WRVJFRCA9ICd3aWRnZXRfaG92ZXJlZCcsXG4gIFdJREdFVF9FWFBBTkRFRCA9ICd3aWRnZXRfZXhwYW5kZWQnLFxuICBXSURHRVRfQ09MTEFQU0VEID0gJ3dpZGdldF9jb2xsYXBzZWQnLFxuICBTVUdHRVNUSU9OX1NDUk9MTEVEID0gJ3N1Z2dlc3Rpb25fc2Nyb2xsZWQnLFxuICBMSU5LX0NMSUNLRUQgPSAnbGlua19jbGlja2VkJyxcbiAgUFJPRFVDVF9DQVJEX0NMSUNLRUQgPSAncHJvZHVjdF9jYXJkX2NsaWNrZWQnLFxuICBBRERfVE9fQ0FSVF9DTElDS0VEID0gJ2FkZF90b19jYXJ0X2NsaWNrZWQnLFxuICBBRERfVE9fQ0FSVF9GQUlMRUQgPSAnYWRkX3RvX2NhcnRfZmFpbGVkJyxcbiAgVEVYVF9MSU5LX0NMSUNLRUQgPSAndGV4dF9saW5rX2NsaWNrZWQnLFxuICBBU0ZfTElOS19CVVRUT04gPSAnYXNmX2xpbmtfYnV0dG9uJyxcbiAgQVJUSUNMRV9MSU5LX0NMSUNLRUQgPSAnYXJ0aWNsZV9saW5rX2NsaWNrZWQnLFxuICBSRVZJRVdfQ0FSRF9DTElDS0VEID0gJ3Jldmlld19jYXJkX2NsaWNrZWQnLFxuICBNRVNTQUdFX1NVQk1JVFRFRCA9ICdtZXNzYWdlX3N1Ym1pdHRlZCcsXG4gIE1BTlVBTF9TQ1JPTExfVE9fQk9UVE9NID0gJ21hbnVhbF9zY3JvbGxfdG9fYm90dG9tJyxcbiAgVk9JQ0VfVFJBTlNDUklQVElPTl9TVEFSVEVEID0gJ3ZvaWNlX3RyYW5zY3JpcHRpb25fc3RhcnRlZCcsXG4gIFZPSUNFX1RSQU5TQ1JJUFRJT05fQ09NUExFVEVEID0gJ3ZvaWNlX3RyYW5zY3JpcHRpb25fY29tcGxldGVkJyxcbiAgT1ZFUkxBWV9ESVNNSVNTRUQgPSAnb3ZlcmxheV9kaXNtaXNzZWQnLFxuICBWQVJJQU5UX1NFTEVDVE9SX09QRU5FRCA9ICd2YXJpYW50X3NlbGVjdG9yX29wZW5lZCcsXG4gIFZBUklBTlRfT1BUSU9OX1NFTEVDVEVEID0gJ3ZhcmlhbnRfb3B0aW9uX3NlbGVjdGVkJyxcbiAgVkFSSUFOVF9TRUxFQ1RPUl9ESVNNSVNTRUQgPSAndmFyaWFudF9zZWxlY3Rvcl9kaXNtaXNzZWQnLFxufVxuXG5leHBvcnQgZW51bSBJbnRlcmFjdGlvbkNsYXNzIHtcbiAgUEFTU0lWRSA9ICdwYXNzaXZlJywgLy8gTm8gdXNlciBjb21taXRtZW50IOKAlCBob3Zlciwgc2Nyb2xsLCB2aXNpYmlsaXR5IHRyaWdnZXJzXG4gIE5BVklHQVRJT05BTCA9ICduYXZpZ2F0aW9uYWwnLCAvLyBPcGVucy9jbG9zZXMgc29tZXRoaW5nIOKAlCBvZnRlbiBhIHNpZGUgZWZmZWN0IG9mIGludGVudFxuICBJTlRFTlRJT05BTCA9ICdpbnRlbnRpb25hbCcsIC8vIERlbGliZXJhdGUgdXNlciBhY3Rpb24g4oCUIGNsaWNrcywgc3VibWl0cywgdHlwZWQgcXVlcmllc1xufVxuXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJT05fVFlQRV9DTEFTUzogUmVjb3JkPFdpZGdldEludGVyYWN0aW9uVHlwZSwgSW50ZXJhY3Rpb25DbGFzcz4gPSB7XG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuUVVFUllfSU5QVVRfQ0xJQ0tFRF06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuU1VHR0VTVElPTl9DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5XSURHRVRfQ0xJQ0tFRF06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuV0lER0VUX0hPVkVSRURdOiBJbnRlcmFjdGlvbkNsYXNzLlBBU1NJVkUsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuV0lER0VUX0VYUEFOREVEXTogSW50ZXJhY3Rpb25DbGFzcy5OQVZJR0FUSU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuV0lER0VUX0NPTExBUFNFRF06IEludGVyYWN0aW9uQ2xhc3MuTkFWSUdBVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlNVR0dFU1RJT05fU0NST0xMRURdOiBJbnRlcmFjdGlvbkNsYXNzLlBBU1NJVkUsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuTElOS19DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5QUk9EVUNUX0NBUkRfQ0xJQ0tFRF06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuQUREX1RPX0NBUlRfQ0xJQ0tFRF06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuQUREX1RPX0NBUlRfRkFJTEVEXTogSW50ZXJhY3Rpb25DbGFzcy5QQVNTSVZFLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlRFWFRfTElOS19DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5BU0ZfTElOS19CVVRUT05dOiBJbnRlcmFjdGlvbkNsYXNzLklOVEVOVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLkFSVElDTEVfTElOS19DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5SRVZJRVdfQ0FSRF9DTElDS0VEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5NRVNTQUdFX1NVQk1JVFRFRF06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuTUFOVUFMX1NDUk9MTF9UT19CT1RUT01dOiBJbnRlcmFjdGlvbkNsYXNzLlBBU1NJVkUsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuVk9JQ0VfVFJBTlNDUklQVElPTl9TVEFSVEVEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5WT0lDRV9UUkFOU0NSSVBUSU9OX0NPTVBMRVRFRF06IEludGVyYWN0aW9uQ2xhc3MuSU5URU5USU9OQUwsXG4gIFtXaWRnZXRJbnRlcmFjdGlvblR5cGUuT1ZFUkxBWV9ESVNNSVNTRURdOiBJbnRlcmFjdGlvbkNsYXNzLk5BVklHQVRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5WQVJJQU5UX1NFTEVDVE9SX09QRU5FRF06IEludGVyYWN0aW9uQ2xhc3MuTkFWSUdBVElPTkFMLFxuICBbV2lkZ2V0SW50ZXJhY3Rpb25UeXBlLlZBUklBTlRfT1BUSU9OX1NFTEVDVEVEXTogSW50ZXJhY3Rpb25DbGFzcy5JTlRFTlRJT05BTCxcbiAgW1dpZGdldEludGVyYWN0aW9uVHlwZS5WQVJJQU5UX1NFTEVDVE9SX0RJU01JU1NFRF06IEludGVyYWN0aW9uQ2xhc3MuTkFWSUdBVElPTkFMLFxufTtcblxuLyoqXG4gKiBBdHRyaWJ1dGlvbiBtYXA6IHdoaWNoIHdpZGdldCBhIGNoYXQgb3Blbi9jbG9zZSBzaG91bGQgYmUgY3JlZGl0ZWQgdG8sIGdpdmVuIHRoZSBzdXJmYWNlIHRoYXRcbiAqIHRyaWdnZXJlZCBpdC5cbiAqXG4gKiBgbnVsbGAgbWFya3MgYSAqc3lzdGVtLWluaXRpYXRlZCogdHJpZ2dlciDigJQgdGhlIGF1dG8tcG9wdXAgdGltZXIsIGEgcmVmZXJyZXItYmFzZWQgcHJvbXB0LCBvciBhXG4gKiBtZXJjaGFudCBgd2luZG93YCBBUEkgY2FsbC4gVGhvc2UgYXJlIG5vdCB1c2VyIGNsaWNrcywgc28gdGhleSBtdXN0IG5vdCBlbWl0IGFuIGludGVudGlvbmFsXG4gKiBXSURHRVRfQ0xJQ0tFRC4gVGhlIGNoYXQncyBvd24gV0lER0VUX0VYUEFOREVEIHN0aWxsIHJlY29yZHMgdGhhdCB0aGUgY2hhdCBvcGVuZWQsIHNvIG5vIHNpZ25hbFxuICogaXMgbG9zdCBieSBza2lwcGluZyB0aGVtLlxuICpcbiAqIEtleWVkIGV4aGF1c3RpdmVseSBvbiBwdXJwb3NlOiBhZGRpbmcgYSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzIG1lbWJlciBpcyBhIGNvbXBpbGUgZXJyb3JcbiAqIHVudGlsIGl0IGlzIGdpdmVuIGFuIGF0dHJpYnV0aW9uIGhlcmUsIHJhdGhlciB0aGFuIHNpbGVudGx5IGRlZmF1bHRpbmcgdG8gdGhlIHdyb25nIHdpZGdldC5cbiAqL1xuZXhwb3J0IGNvbnN0IENIQVRfVFJJR0dFUl9XSURHRVQ6IFJlY29yZDxcbiAgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyxcbiAgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQgfCBudWxsXG4+ID0ge1xuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUxdOiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5TVUdHRVNUSU9OX0JBUixcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTF06IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50LkVNQkVEREVEX1dJREdFVCxcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVFlQSU5HX0FOSU1BVElPTl06IFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50LkVNQkVEREVEX1dJREdFVCxcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1BSSU1BUllfQlVUVE9OXTpcbiAgICBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5TT0NJQUxfUFJPT0YsXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9TRUNPTkRBUllfQlVUVE9OXTpcbiAgICBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5TT0NJQUxfUFJPT0YsXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9URVhUX0ZJRUxEXTogV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQuU09DSUFMX1BST09GLFxuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OXTpcbiAgICBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5QT1NUX0lOVEVSQUNUSU9OX0NPTVBBUklTT04sXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTERdOlxuICAgIFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50LlBPU1RfSU5URVJBQ1RJT05fQ09NUEFSSVNPTixcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT05dOlxuICAgIFdpZGdldEludGVyYWN0aW9uQ29tcG9uZW50LkNIQVRfUFJFVklFVyxcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTERdOiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5DSEFUX1BSRVZJRVcsXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST01QVF9CVVRUT05fQ0FST1VTRUxfV0lUSF9JTUFHRV9QUk9NUFRfQlVUVE9OXTpcbiAgICBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5TSU5HTEVfSU1BR0VfUFJPTVBULFxuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQlVUVE9OX0NBUk9VU0VMX1dJVEhfSU1BR0VfVEVYVF9GSUVMRF06XG4gICAgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQuU0lOR0xFX0lNQUdFX1BST01QVCxcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQlVUVE9OXTogV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQuRkxPQVRJTkdfQlVUVE9OLFxuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVldOiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5GTE9BVElOR19DSEFULFxuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX0NMT1NFX0JVVFRPTl06XG4gICAgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQuRkxPQVRJTkdfQ0hBVCxcbiAgW0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9QUk9NUFRfQlVUVE9OXTpcbiAgICBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5GTE9BVElOR19DSEFULFxuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX1RFWFRfSU5QVVRdOiBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5GTE9BVElOR19DSEFULFxuICBbQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfUFJPTVBUX0JVVFRPTl06XG4gICAgV2lkZ2V0SW50ZXJhY3Rpb25Db21wb25lbnQuSU1BR0VfUFJPTVBUX0NBUkQsXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEXTpcbiAgICBXaWRnZXRJbnRlcmFjdGlvbkNvbXBvbmVudC5JTUFHRV9QUk9NUFRfQ0FSRCxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCDigJQgc2VlIG5vdGUgYWJvdmUuXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLldJTkRPV19BUElfQ0FMTF06IG51bGwsXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlJFRkVSUkVSX0JBU0VEX1BST01QVF06IG51bGwsXG4gIFtDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkFVVE9NQVRJQ19QUk9NUFRdOiBudWxsLFxufTtcblxuZXhwb3J0IHR5cGUgVVJMID0ge1xuICB1cmw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3QgPSB7XG4gIHByb2R1Y3RfaWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFdpZGdldExvY2F0aW9uID0gJ2NoYXQnIHwgJ292ZXJsYXknIHwgJ3ZhcmlhbnRfc2VsZWN0b3InO1xuXG5leHBvcnQgdHlwZSBQcm9kdWN0V2l0aExvY2F0aW9uID0gUHJvZHVjdCAmIHtcbiAgd2lkZ2V0X2xvY2F0aW9uOiBXaWRnZXRMb2NhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJldmlldyA9IHtcbiAgcmV2aWV3X2lkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdWdnZXN0aW9uID0ge1xuICBzdWdnZXN0aW9uX2lkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSZXF1ZXN0ID0ge1xuICByZXF1ZXN0X3RleHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxhcHNlID0ge1xuICBjb2xsYXBzZV9zb3VyY2U6ICdjbG9zZV9idXR0b24nIHwgJ3N3aXBlJyB8ICdib2R5X2NsaWNrJztcbn07XG5cbmV4cG9ydCB0eXBlIFN1Z2dlc3Rpb25TY3JvbGxlZCA9IHtcbiAgc3VnZ2VzdGlvbl9zY3JvbGxlZDogU3VnZ2VzdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFN1Z2dlc3Rpb25DbGlja2VkID0ge1xuICBzdWdnZXN0aW9uX2NsaWNrZWQ6IFN1Z2dlc3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBTdWdnZXN0aW9uSG92ZXJlZCA9IHtcbiAgc3VnZ2VzdGlvbl9ob3ZlcmVkOiBTdWdnZXN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgTGlua0NsaWNrZWQgPSB7XG4gIGxpbmtfY2xpY2tlZDogVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgV2lkZ2V0Q29sbGFwc2VkID0ge1xuICB3aWRnZXRfY29sbGFwc2VkOiBDb2xsYXBzZTtcbn07XG5cbmV4cG9ydCB0eXBlIFRleHRMaW5rQ2xpY2tlZCA9IHtcbiAgdGV4dF9saW5rX2NsaWNrZWQ6IFVSTDtcbn07XG5cbmV4cG9ydCB0eXBlIEFzZkxpbmtCdXR0b24gPSB7XG4gIGFzZl9saW5rX2J1dHRvbjogVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgQXJ0aWNsZUxpbmtDbGlja2VkID0ge1xuICBhcnRpY2xlX2xpbmtfY2xpY2tlZDogVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZHVjdENhcmRDbGlja2VkID0ge1xuICBwcm9kdWN0X2NhcmRfY2xpY2tlZDogUHJvZHVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIEFkZFRvQ2FydENsaWNrZWQgPSB7XG4gIGFkZF90b19jYXJ0X2NsaWNrZWQ6IFByb2R1Y3RXaXRoTG9jYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBBZGRUb0NhcnRGYWlsZWQgPSB7XG4gIGFkZF90b19jYXJ0X2ZhaWxlZDogUHJvZHVjdFdpdGhMb2NhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJldmlld0NhcmRDbGlja2VkID0ge1xuICByZXZpZXdfY2FyZF9jbGlja2VkOiBSZXZpZXc7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlU3VibWl0dGVkID0ge1xuICBtZXNzYWdlX3N1Ym1pdHRlZDogUmVxdWVzdDtcbn07XG5cbmV4cG9ydCB0eXBlIFZvaWNlVHJhbnNjcmlwdGlvbiA9IHtcbiAgdHJhbnNjcmlwdGlvbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0ZWRWYXJpYW50T3B0aW9uID0ge1xuICBwcm9kdWN0X2lkOiBzdHJpbmc7XG4gIG9wdGlvbl9uYW1lOiBzdHJpbmc7XG4gIG9wdGlvbl92YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFyaWFudFNlbGVjdG9yT3BlbmVkID0ge1xuICB2YXJpYW50X3NlbGVjdG9yX29wZW5lZDogUHJvZHVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIFZhcmlhbnRPcHRpb25TZWxlY3RlZCA9IHtcbiAgdmFyaWFudF9vcHRpb25fc2VsZWN0ZWQ6IFNlbGVjdGVkVmFyaWFudE9wdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhcmlhbnRTZWxlY3RvckRpc21pc3NlZCA9IHtcbiAgdmFyaWFudF9zZWxlY3Rvcl9kaXNtaXNzZWQ6IFByb2R1Y3Q7XG59O1xuXG5leHBvcnQgdHlwZSBXaWRnZXRJbnRlcmFjdGlvbkRhdGEgPVxuICB8IFN1Z2dlc3Rpb25TY3JvbGxlZFxuICB8IFN1Z2dlc3Rpb25DbGlja2VkXG4gIHwgU3VnZ2VzdGlvbkhvdmVyZWRcbiAgfCBMaW5rQ2xpY2tlZFxuICB8IFdpZGdldENvbGxhcHNlZFxuICB8IFRleHRMaW5rQ2xpY2tlZFxuICB8IEFzZkxpbmtCdXR0b25cbiAgfCBBcnRpY2xlTGlua0NsaWNrZWRcbiAgfCBQcm9kdWN0Q2FyZENsaWNrZWRcbiAgfCBBZGRUb0NhcnRDbGlja2VkXG4gIHwgQWRkVG9DYXJ0RmFpbGVkXG4gIHwgUmV2aWV3Q2FyZENsaWNrZWRcbiAgfCBNZXNzYWdlU3VibWl0dGVkXG4gIHwgVm9pY2VUcmFuc2NyaXB0aW9uXG4gIHwgVmFyaWFudFNlbGVjdG9yT3BlbmVkXG4gIHwgVmFyaWFudE9wdGlvblNlbGVjdGVkXG4gIHwgVmFyaWFudFNlbGVjdG9yRGlzbWlzc2VkO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBMkJBLElBQVksa0ZBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdGLElBQVksb0ZBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0YsSUFBWSwwRUFBTDtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdGLElBQVksZ0VBQUw7QUFDTDtBQUNBO0FBQ0E7OztBQUdGLE1BQWFBLHlCQUEwRTtFQUNwRixzQkFBc0Isc0JBQXNCLGlCQUFpQjtFQUM3RCxzQkFBc0IscUJBQXFCLGlCQUFpQjtFQUM1RCxzQkFBc0IsaUJBQWlCLGlCQUFpQjtFQUN4RCxzQkFBc0IsaUJBQWlCLGlCQUFpQjtFQUN4RCxzQkFBc0Isa0JBQWtCLGlCQUFpQjtFQUN6RCxzQkFBc0IsbUJBQW1CLGlCQUFpQjtFQUMxRCxzQkFBc0Isc0JBQXNCLGlCQUFpQjtFQUM3RCxzQkFBc0IsZUFBZSxpQkFBaUI7RUFDdEQsc0JBQXNCLHVCQUF1QixpQkFBaUI7RUFDOUQsc0JBQXNCLHNCQUFzQixpQkFBaUI7RUFDN0Qsc0JBQXNCLHFCQUFxQixpQkFBaUI7RUFDNUQsc0JBQXNCLG9CQUFvQixpQkFBaUI7RUFDM0Qsc0JBQXNCLGtCQUFrQixpQkFBaUI7RUFDekQsc0JBQXNCLHVCQUF1QixpQkFBaUI7RUFDOUQsc0JBQXNCLHNCQUFzQixpQkFBaUI7RUFDN0Qsc0JBQXNCLG9CQUFvQixpQkFBaUI7RUFDM0Qsc0JBQXNCLDBCQUEwQixpQkFBaUI7RUFDakUsc0JBQXNCLDhCQUE4QixpQkFBaUI7RUFDckUsc0JBQXNCLGdDQUFnQyxpQkFBaUI7RUFDdkUsc0JBQXNCLG9CQUFvQixpQkFBaUI7RUFDM0Qsc0JBQXNCLDBCQUEwQixpQkFBaUI7RUFDakUsc0JBQXNCLDBCQUEwQixpQkFBaUI7RUFDakUsc0JBQXNCLDZCQUE2QixpQkFBaUI7Q0FDdEU7Ozs7Ozs7Ozs7Ozs7QUFjRCxNQUFhQyxzQkFHVDtFQUNELDZCQUE2QixrQkFBa0IsMkJBQTJCO0VBQzFFLDZCQUE2Qix5QkFBeUIsMkJBQTJCO0VBQ2pGLDZCQUE2QixtQkFBbUIsMkJBQTJCO0VBQzNFLDZCQUE2Qiw4QkFDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QixnQ0FDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QiwwQkFBMEIsMkJBQTJCO0VBQ2xGLDZCQUE2Qix3Q0FDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QixxQ0FDNUIsMkJBQTJCO0VBQzVCLDZCQUE2Qiw2QkFDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QiwwQkFBMEIsMkJBQTJCO0VBQ2xGLDZCQUE2QixrREFDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QiwrQ0FDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QixrQkFBa0IsMkJBQTJCO0VBQzFFLDZCQUE2Qix3QkFBd0IsMkJBQTJCO0VBQ2hGLDZCQUE2Qiw2QkFDNUIsMkJBQTJCO0VBQzVCLDZCQUE2Qiw4QkFDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QiwyQkFBMkIsMkJBQTJCO0VBQ25GLDZCQUE2Qiw2QkFDNUIsMkJBQTJCO0VBQzVCLDZCQUE2QiwwQkFDNUIsMkJBQTJCO0VBRTVCLDZCQUE2QixrQkFBa0I7RUFDL0MsNkJBQTZCLHdCQUF3QjtFQUNyRCw2QkFBNkIsbUJBQW1CO0NBQ2xEIn0=
@@ -10,6 +10,14 @@ const require_ga4ProjectionService = require('../ga4ProjectionService/ga4Project
10
10
 
11
11
  //#region src/services/amplitudeService/amplitudeService.ts
12
12
  const logger = new require_logger.default("amplitudeService");
13
+ const UTF8_TRANSPORT_PREFIX = "__spiffy_utf8__:";
14
+ const containsSupplementaryUnicode = (value) => Array.from(value).some((character) => (character.codePointAt(0) ?? 0) > 65535);
15
+ const encodeSupplementaryUnicode = (value) => {
16
+ if (typeof value === "string") return containsSupplementaryUnicode(value) ? `${UTF8_TRANSPORT_PREFIX}${encodeURIComponent(value)}` : value;
17
+ if (Array.isArray(value)) return value.map(encodeSupplementaryUnicode);
18
+ if (value !== null && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [key, encodeSupplementaryUnicode(nestedValue)]));
19
+ return value;
20
+ };
13
21
  const EXPERIMENT_NAMESPACES = ["ml", "merchant"];
14
22
  const buildExperimentProps = (assignments) => {
15
23
  const byNamespace = /* @__PURE__ */ new Map();
@@ -257,9 +265,10 @@ var AmplitudeService = class AmplitudeService {
257
265
  eventName,
258
266
  eventProps
259
267
  });
268
+ const amplitudeEventProps = eventName === require_eventNames.EnviveMetricsEventName.WidgetTextResponse || eventName === require_eventNames.EnviveMetricsEventName.WidgetTextClicked ? encodeSupplementaryUnicode(mappedEventProps) : mappedEventProps;
260
269
  const eventData = JSON.stringify({
261
270
  eventName,
262
- eventProps: mappedEventProps,
271
+ eventProps: amplitudeEventProps,
263
272
  created_at: (/* @__PURE__ */ new Date()).toISOString()
264
273
  });
265
274
  const data = new TextEncoder().encode(eventData);
@@ -267,12 +276,12 @@ var AmplitudeService = class AmplitudeService {
267
276
  const currentInsertId = Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("");
268
277
  logger.logDebug(`amplitude tracking ${decoratedEventName}`, null, {
269
278
  event_name: decoratedEventName,
270
- props: mappedEventProps
279
+ props: amplitudeEventProps
271
280
  });
272
281
  this.amplitudeClient.track(decoratedEventName, {
273
282
  ...this.getDefaultTrackingProps(eventName),
274
- ...mappedEventProps,
275
- ...mappedEventProps ? this.eventPropsToPrefixedEventProps(eventName, mappedEventProps) : {}
283
+ ...amplitudeEventProps,
284
+ ...amplitudeEventProps ? this.eventPropsToPrefixedEventProps(eventName, amplitudeEventProps) : {}
276
285
  }, {
277
286
  ...eventGroups,
278
287
  insert_id: currentInsertId
@@ -303,4 +312,4 @@ var AmplitudeService = class AmplitudeService {
303
312
 
304
313
  //#endregion
305
314
  exports.AmplitudeService = AmplitudeService;
306
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSIsIkxvY2FsU3RvcmFnZUtleXMiLCJlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIiwiZW5yaWNoZWRFdmVudDogRXZlbnQiLCJTcGlmZnlNZXRyaWNzRXZlbnROYW1lIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJTcGlmZnlFdmVudCIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCIsIldpZGdldFR5cGVWMyIsIkNoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIsIFNwaWZmeUV2ZW50IH0gZnJvbSAnc3JjL2V2ZW50cyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXlzIH0gZnJvbSAnc3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHR5cGUge1xuICBCcm93c2VyQ2xpZW50LFxuICBFbnJpY2htZW50UGx1Z2luLFxuICBFdmVudCxcbiAgU2VydmVyWm9uZVR5cGUsXG59IGZyb20gJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzJztcbmltcG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyc7XG5pbXBvcnQgeyBFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgcHJvamVjdFRvR0E0IH0gZnJvbSAnLi4vZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4vZXZlbnROYW1lcyc7XG5cbi8vIFJlLWV4cG9ydCBldmVudCBuYW1lcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignYW1wbGl0dWRlU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lO1xuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICB1c2VySWQ6IHN0cmluZztcbiAgYW1wbGl0dWRlQXBpS2V5OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgZW52OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U6IHN0cmluZztcbiAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBzaG93OiBib29sZWFuO1xuICBlbnZpdmVPbjogYm9vbGVhbjtcbiAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIGdldExvY2FsU3RvcmFnZUl0ZW06IG51bGwgfCAoKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKTtcbiAgLy8gQ2FwdHVyZWQgYXQgY29uc3RydWN0aW9uLiBEcml2ZXMgYGV4cGVyaW1lbnQue25zfS4qYCBldmVudC1wcm9wZXJ0eVxuICAvLyBlbnJpY2htZW50LiBTb3VyY2VkIGZyb20gL3YxL29yZy9jb25maWcgd2hlbiB0aGUgYHVzZV91bmlmaWVkX2NvbmZpZ2BcbiAgLy8gZ2F0ZSBpcyBvbjsgb3RoZXJ3aXNlIG9taXR0ZWQgKHByb3BzIGVtaXQgYXMgbnVsbCkuXG4gIGV4cGVyaW1lbnRBc3NpZ25tZW50cz86IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W107XG59XG5cbi8vIE5hbWVzcGFjZXMgZW1pdHRlZCBvbiBldmVyeSBldmVudCB3aXRoIGNvbnN0YW50IGtleXMsIHNvIHRoZSBCaWdRdWVyeVxuLy8gc2NoZW1hIGlzIHN0YWJsZSByZWdhcmRsZXNzIG9mIHdoaWNoIChpZiBhbnkpIGV4cGVyaW1lbnQgaXMgcnVubmluZy5cbi8vIEN1cnJlbnRseSBgbWxgICsgYG1lcmNoYW50YDsgbWF0Y2hlcyBgRXhwZXJpbWVudE5hbWVzcGFjZWAuXG5jb25zdCBFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSA9IFsnbWwnLCAnbWVyY2hhbnQnXTtcblxuY29uc3QgYnVpbGRFeHBlcmltZW50UHJvcHMgPSAoXG4gIGFzc2lnbm1lbnRzOiBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudFtdIHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8RXhwZXJpbWVudE5hbWVzcGFjZSwgT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnQ+KCk7XG4gIChhc3NpZ25tZW50cyA/PyBbXSkuZm9yRWFjaChhID0+IHtcbiAgICBpZiAoYS5sYXllcl9uYW1lICE9IG51bGwgJiYgYS5uYW1lc3BhY2UgIT0gbnVsbCkge1xuICAgICAgYnlOYW1lc3BhY2Uuc2V0KGEubmFtZXNwYWNlLCBhKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRVhQRVJJTUVOVF9OQU1FU1BBQ0VTLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKGFjYywgbnMpID0+IHtcbiAgICBjb25zdCBhID0gYnlOYW1lc3BhY2UuZ2V0KG5zKTtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30ubGF5ZXJfbmFtZWBdID0gYT8ubGF5ZXJfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5leHBlcmltZW50X25hbWVgXSA9IGE/LmFsbG9jYXRlZF9leHBlcmltZW50X25hbWUgPz8gbnVsbDtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30uZ3JvdXBfbmFtZWBdID0gYT8uZ3JvdXBfbmFtZSA/PyBudWxsO1xuICAgIC8vIGBydWxlX2lkYCByZXNlcnZlZCDigJQgYmFja2VuZCBkb2Vzbid0IGN1cnJlbnRseSBzdXJmYWNlIGl0LlxuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ydWxlX2lkYF0gPSBudWxsO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn07XG5cbmV4cG9ydCBjbGFzcyBBbXBsaXR1ZGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhbXBsaXR1ZGVDbGllbnQ6IEJyb3dzZXJDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIHByaXZhdGUgY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnO1xuXG4gIHByaXZhdGUgaW5pdFByb21pc2U6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IGlzTW9ja0FwaUtleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5ID09PSAnbW9jay1hbXBsaXR1ZGUta2V5JztcbiAgfVxuXG4gIC8vIE11c3Qgbm90IGRlcGVuZCBvbiBgYW1wbGl0dWRlQ2xpZW50YDogdGhlIFNESyBub3cgbG9hZHMgdmlhIGR5bmFtaWNcbiAgLy8gaW1wb3J0LCBhbmQgQW1wbGl0dWRlUHJvdmlkZXIgdW5tb3VudHMgaXRzIGVudGlyZSBzdWJ0cmVlIHdoaWxlXG4gIC8vIGlzUmVhZHkgaXMgZmFsc2Ug4oCUIGdhdGluZyBvbiB0aGUgY2xpZW50IHdvdWxkIGJsb2NrIHdpZGdldCByZW5kZXJpbmdcbiAgLy8gb24gdGhlIGFuYWx5dGljcyBjaHVuayBkb3dubG9hZC4gRXZlbnRzIGF3YWl0ZWQgaW4gdHJhY2tFdmVudCBxdWV1ZVxuICAvLyBiZWhpbmQgYGluaXRQcm9taXNlYCBpbnN0ZWFkLlxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgICF0aGlzLmlzTW9ja0FwaUtleSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIG9uY2UgU0RLIGluaXRpYWxpemF0aW9uIGhhcyBzZXR0bGVkIChuZXZlciByZWplY3RzKS4gKi9cbiAgaW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdFByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSBidWlsZEV4cGVyaW1lbnRQcm9wcyh0aGlzLmNvbmZpZy5leHBlcmltZW50QXNzaWdubWVudHMpO1xuXG4gICAgY29uc3QgZW52aXJvbm1lbnRQcm9wcyA9IHtcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fY29udGV4dCc6ICdidW5kbGUnLFxuICAgICAgJ2Vudmlyb25tZW50LnBhZ2VfdXJsJzogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX3VzZXJfaWQnOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAnZW52aXJvbm1lbnQuZXhlY3V0aW9uX2Vudmlyb25tZW50JzogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgICdlbnZpcm9ubWVudC5jb250ZXh0X3NvdXJjZSc6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICAnZW52aXJvbm1lbnQuc2FsZXNfYWdlbnRfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uc2FsZXNBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5zZWFyY2hfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uc2VhcmNoQWdlbnQgPz8gZmFsc2UsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX29uX3F1ZXJ5X3BhcmFtJzogdGhpcy5jb25maWcuZW52aXZlT24sXG4gICAgICAnZW52aXJvbm1lbnQud2luZG93X3Nob3cnOiB0aGlzLmNvbmZpZy5zaG93LFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5lbnZpdmUsXG4gICAgfTtcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGdWxsRmxhZ1ZhbHVlcygpLFxuICAgICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgICAuLi5lbnZpcm9ubWVudFByb3BzLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi5nYXRlc1Byb3BzLFxuICAgICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzLFxuICAgICAgLi4udGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsXG4gICAgICBhcHBfaWQ6ICdjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudCcsXG4gICAgICBjaGF0X2lkOiB0aGlzLmdldExvY2FsU3RvcmFnZUl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5DaGF0SWQpLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgYXBwX3NvdXJjZTogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgIG9yZ19pZDogdGhpcy5jb25maWcub3JnSWQsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhldmVudFByb3BzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2Ake3ByZWZpeH0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpOiBFbnJpY2htZW50UGx1Z2luIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiA9IHtcbiAgICAgIG5hbWU6ICdwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudCcsXG4gICAgICB0eXBlOiAnZW5yaWNobWVudCcsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgICdbQW1wbGl0dWRlXSBQYWdlIFZpZXdlZCcsXG4gICAgICAgICAgYFtTcGlmZnldICR7U3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5CdW5kbGVMb2FkZWR9YCxcbiAgICAgICAgICBgW0Vudml2ZV0gJHtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLlBhZ2VWaWV3ZWR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZXZlbnRzVG9FbnJpY2guaW5jbHVkZXMoZXZlbnQuZXZlbnRfdHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLnNob3cnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5zaG93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5lbnYnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5lbnYpO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5jb25maWc/LmVuYWJsZWRGZWF0dXJlcyA/PyAoe30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pLFxuICAgICAgICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIFtgZW5hYmxlZEZlYXR1cmVzLiR7a2V5fWBdOiBgJHt2YWx1ZX1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdGltaW5nUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICd0aW1pbmcuZW5yaWNoZWRfYXRfbXMnOlxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnRfcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudF90eXBlIGFzIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5nbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5lbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aW1pbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIEV2ZW50c0Rpc3BhdGNoZXIuZGlzcGF0Y2goU3BpZmZ5RXZlbnQuQU1QTElUVURFX0VWRU5ULCBlbnJpY2hlZEV2ZW50KTtcblxuICAgICAgICByZXR1cm4gZW5yaWNoZWRFdmVudDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgPSBlbnJpY2htZW50O1xuICAgIHJldHVybiBlbnJpY2htZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzUmVhZHkgPSBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgKTtcblxuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdBbXBsaXR1ZGVTZXJ2aWNlIGlzIG5vdCByZWFkeScsIHtcbiAgICAgICAgaXNSZWFkeSxcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAgIGhhc0ZlYXR1cmVGbGFnU2VydmljZTogISF0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UsXG4gICAgICAgIGhhc0FtcGxpdHVkZUFwaUtleTogISF0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vY2tBcGlLZXkpIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnTW9jayBBUEkga2V5IGRldGVjdGVkIOKAlCBydW5uaW5nIGluIG1vY2sgbW9kZSwgbm8gZXZlbnRzIHdpbGwgYmUgc2VudCB0byBBbXBsaXR1ZGUuJyxcbiAgICAgICAgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBEeW5hbWljIGltcG9ydCBrZWVwcyB0aGUgQW1wbGl0dWRlIFNESyBvdXQgb2YgdGhlIGVhZ2VyXG4gICAgICAgIC8vIGluamVjdGlvbi1idW5kbGUgY2h1bms7IHRyYWNrRXZlbnQgcXVldWVzIGJlaGluZCBpbml0UHJvbWlzZS5cbiAgICAgICAgY29uc3QgeyBjcmVhdGVJbnN0YW5jZSB9ID0gYXdhaXQgaW1wb3J0KCdAYW1wbGl0dWRlL2FuYWx5dGljcy1icm93c2VyJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuaW5pdCh0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksIHRoaXMuY29uZmlnLnVzZXJJZCwge1xuICAgICAgICAgIHNlcnZlclpvbmU6IHRoaXMuY29uZmlnLmRhdGFSZXNpZGVuY3kgYXMgU2VydmVyWm9uZVR5cGUsXG4gICAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICBpcEFkZHJlc3M6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgICAgYXR0cmlidXRpb246IHRydWUsXG4gICAgICAgICAgICBwYWdlVmlld3M6IHtcbiAgICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVEb3dubG9hZHM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCA9IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9yIGluaXRpYWxpemUgdGhlIEFtcGxpdHVkZSBTREsnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuRmxvYXRpbmdCdXR0b25WMzpcbiAgICAgICAgcmV0dXJuICdmbG9hdGluZ19idXR0b24nO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWMzpcbiAgICAgICAgcmV0dXJuICdlbWJlZGRlZF93aWRnZXQnO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjM6XG4gICAgICAgIHJldHVybiAnc3VnZ2VzdGlvbl9iYXInO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWMzpcbiAgICAgICAgcmV0dXJuICdpbWFnZV9wcm9tcHRfY2FyZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRyaWdnZXJMb2NhdGlvbikge1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ3Byb21wdF9jYXJkJztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUw6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTDpcbiAgICAgICAgcmV0dXJuICd0b3BfcmV2aWV3c19zbmlwcGV0JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5UWVBJTkdfQU5JTUFUSU9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9QUklNQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfU0VDT05EQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAnY2hhdF9wcmV2aWV3JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVk6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9DTE9TRV9CVVRUT046XG4gICAgICAgIHJldHVybiAnaW5fY2hhdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJpZ2dlckxvY2F0aW9uIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGFsbG93cyB1cyB0byBtYXAgdGhlIGV2ZW50IHByb3BzIHRvIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdGhlIGxlZ2FjeSBhbXBsaXR1ZGUgZXZlbnRzXG4gIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgbWVzc2FnZU1ldGFkYXRhID0gZXZlbnRQcm9wcz8ubWVzc2FnZV9tZXRhZGF0YSA/PyB7fTtcbiAgICBjb25zdCB0cmlnZ2VyTG9jYXRpb24gPVxuICAgICAgbWVzc2FnZU1ldGFkYXRhICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgbWVzc2FnZU1ldGFkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ3RyaWdnZXJfbG9jYXRpb24nIGluIG1lc3NhZ2VNZXRhZGF0YVxuICAgICAgICA/IG1lc3NhZ2VNZXRhZGF0YS50cmlnZ2VyX2xvY2F0aW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRXaWRnZXRUeXBlID0gQW1wbGl0dWRlU2VydmljZS5tYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KFxuICAgICAgICBldmVudFByb3BzPy53aWRnZXRfdHlwZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgY2hhdF9jb21wb25lbnQ6IG1hcHBlZFdpZGdldFR5cGUsXG4gICAgICAgICdjaGF0LmNvbXBvbmVudF92aXNpYmxlJzogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBldmVudFByb3BzID8/IHt9O1xuICB9XG5cbiAgc3RhdGljIGlzVjNFbnZpdmVFdmVudChldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRW52aXZlTWV0cmljc0V2ZW50TmFtZSkuaW5jbHVkZXMoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUpO1xuICB9XG5cbiAgc3RhdGljIGRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBzdHJpbmcge1xuICAgIGlmIChBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpKSB7XG4gICAgICByZXR1cm4gYFtFbnZpdmVdICR7ZXZlbnROYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiBgW1NwaWZmeV0gJHtldmVudE5hbWV9YDtcbiAgfVxuXG4gIGFzeW5jIHRyYWNrRXZlbnQoe1xuICAgIGV2ZW50TmFtZSxcbiAgICBldmVudFByb3BzLFxuICAgIGV2ZW50R3JvdXBzLFxuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgPSBmYWxzZSxcbiAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7XG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdTdWJtaXR0aW5nIGV2ZW50JywgZXZlbnROYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb3JhdGVkRXZlbnROYW1lID0gQW1wbGl0dWRlU2VydmljZS5kZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWUpO1xuXG4gICAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICAgIGxvZ2dlci5sb2dXYXJuKCdhbXBsaXR1ZGUgY2xpZW50IHVuZGVmaW5lZCcsIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwcGVkRXZlbnRQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UubWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9KTtcblxuICAgICAgY29uc3QgZXZlbnREYXRhID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGV2ZW50RGF0YSk7XG4gICAgICAvLyBjYWxjdWxhdGUgYSBoYXNoIG9mIHRoZSBldmVudCBwcm9wZXJ0aWVzIHRvIHVzZSBhcyB0aGUgaW5zZXJ0X2lkIHNvIHRoYXQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgLy8gYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCBieSBBbXBsaXR1ZGVcbiAgICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuICAgICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgICBjb25zdCBjdXJyZW50SW5zZXJ0SWQgPSBoYXNoQXJyYXkubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG5cbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZyhgYW1wbGl0dWRlIHRyYWNraW5nICR7ZGVjb3JhdGVkRXZlbnROYW1lfWAsIG51bGwsIHtcbiAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICBwcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudC50cmFjayhcbiAgICAgICAgZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhldmVudE5hbWUpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgICAgLi4uKG1hcHBlZEV2ZW50UHJvcHNcbiAgICAgICAgICAgID8gdGhpcy5ldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoZXZlbnROYW1lLCBtYXBwZWRFdmVudFByb3BzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ldmVudEdyb3VwcyxcbiAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFRPRE86IFB1bGwgZ2FFbmFibGVkIGZyb20gb3JnIGNvbmZpZyB3aGVuIGF2YWlsYWJsZS4gSGFyZGNvZGVkIHRvIHRydWUgZm9yIG5vdy5cbiAgICAgIGNvbnN0IGdhRW5hYmxlZCA9IHRydWU7XG5cbiAgICAgIGlmIChBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpICYmIGdhRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBtZXJnZWRQcm9wc0ZvckdBNCA9IHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgfTtcbiAgICAgICAgcHJvamVjdFRvR0E0KGV2ZW50TmFtZSBhcyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBtZXJnZWRQcm9wc0ZvckdBNCk7XG4gICAgICB9IGVsc2UgaWYgKGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR0EgdHJhY2tpbmcnLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55W10pLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgdHJhY2tpbmcgZXZlbnQnLCBlcnIsIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3VwcGxlbWVudGFsIGRlZmF1bHQgcHJvcHMgYXJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBwcm9wc1xuICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMgPSBwcm9wcztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW1CQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sbUJBQW1CO0FBK0I3QyxNQUFNQyx3QkFBK0MsQ0FBQyxNQUFNLFdBQVc7QUFFdkUsTUFBTSx3QkFDSixnQkFDNEI7Q0FDNUIsTUFBTSw4QkFBYyxJQUFJLEtBQXlEO0FBQ2pGLEVBQUMsZUFBZSxFQUFFLEVBQUUsU0FBUSxNQUFLO0FBQy9CLE1BQUks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
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSIsIkxvY2FsU3RvcmFnZUtleXMiLCJlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIiwiZW5yaWNoZWRFdmVudDogRXZlbnQiLCJTcGlmZnlNZXRyaWNzRXZlbnROYW1lIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJTcGlmZnlFdmVudCIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCIsIldpZGdldFR5cGVWMyIsIkNoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIsIFNwaWZmeUV2ZW50IH0gZnJvbSAnc3JjL2V2ZW50cyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXlzIH0gZnJvbSAnc3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHR5cGUge1xuICBCcm93c2VyQ2xpZW50LFxuICBFbnJpY2htZW50UGx1Z2luLFxuICBFdmVudCxcbiAgU2VydmVyWm9uZVR5cGUsXG59IGZyb20gJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzJztcbmltcG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyc7XG5pbXBvcnQgeyBFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgcHJvamVjdFRvR0E0IH0gZnJvbSAnLi4vZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4vZXZlbnROYW1lcyc7XG5cbi8vIFJlLWV4cG9ydCBldmVudCBuYW1lcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignYW1wbGl0dWRlU2VydmljZScpO1xuXG4vLyBBbXBsaXR1ZGUncyBtYW5hZ2VkIEJpZ1F1ZXJ5IGRhdGEgY2FuIHN1cmZhY2Ugc3VwcGxlbWVudGFyeSBVbmljb2RlIGFzIFUrRkZGRC5cbi8vIEtlZXAgdGhlIHdpZGdldC10cmFpbmluZyBwYXlsb2FkIEFTQ0lJLXNhZmUgd2l0aG91dCBjaGFuZ2luZyB0aGUgZGlzcGxheWVkIHRleHQuXG5jb25zdCBVVEY4X1RSQU5TUE9SVF9QUkVGSVggPSAnX19zcGlmZnlfdXRmOF9fOic7XG5cbmNvbnN0IGNvbnRhaW5zU3VwcGxlbWVudGFyeVVuaWNvZGUgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgQXJyYXkuZnJvbSh2YWx1ZSkuc29tZShjaGFyYWN0ZXIgPT4gKGNoYXJhY3Rlci5jb2RlUG9pbnRBdCgwKSA/PyAwKSA+IDB4ZmZmZik7XG5cbmNvbnN0IGVuY29kZVN1cHBsZW1lbnRhcnlVbmljb2RlID0gKHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zU3VwcGxlbWVudGFyeVVuaWNvZGUodmFsdWUpXG4gICAgICA/IGAke1VURjhfVFJBTlNQT1JUX1BSRUZJWH0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YFxuICAgICAgOiB2YWx1ZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKGVuY29kZVN1cHBsZW1lbnRhcnlVbmljb2RlKTtcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCBuZXN0ZWRWYWx1ZV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBlbmNvZGVTdXBwbGVtZW50YXJ5VW5pY29kZShuZXN0ZWRWYWx1ZSksXG4gICAgICBdKSxcbiAgICApO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWU7XG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRHcm91cHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGl0dWRlU2VydmljZUNvbmZpZyB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIHNob3c6IGJvb2xlYW47XG4gIGVudml2ZU9uOiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xuICAvLyBDYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb24uIERyaXZlcyBgZXhwZXJpbWVudC57bnN9LipgIGV2ZW50LXByb3BlcnR5XG4gIC8vIGVucmljaG1lbnQuIFNvdXJjZWQgZnJvbSAvdjEvb3JnL2NvbmZpZyB3aGVuIHRoZSBgdXNlX3VuaWZpZWRfY29uZmlnYFxuICAvLyBnYXRlIGlzIG9uOyBvdGhlcndpc2Ugb21pdHRlZCAocHJvcHMgZW1pdCBhcyBudWxsKS5cbiAgZXhwZXJpbWVudEFzc2lnbm1lbnRzPzogT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnRbXTtcbn1cblxuLy8gTmFtZXNwYWNlcyBlbWl0dGVkIG9uIGV2ZXJ5IGV2ZW50IHdpdGggY29uc3RhbnQga2V5cywgc28gdGhlIEJpZ1F1ZXJ5XG4vLyBzY2hlbWEgaXMgc3RhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggKGlmIGFueSkgZXhwZXJpbWVudCBpcyBydW5uaW5nLlxuLy8gQ3VycmVudGx5IGBtbGAgKyBgbWVyY2hhbnRgOyBtYXRjaGVzIGBFeHBlcmltZW50TmFtZXNwYWNlYC5cbmNvbnN0IEVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdID0gWydtbCcsICdtZXJjaGFudCddO1xuXG5jb25zdCBidWlsZEV4cGVyaW1lbnRQcm9wcyA9IChcbiAgYXNzaWdubWVudHM6IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W10gfCB1bmRlZmluZWQsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGJ5TmFtZXNwYWNlID0gbmV3IE1hcDxFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudD4oKTtcbiAgKGFzc2lnbm1lbnRzID8/IFtdKS5mb3JFYWNoKGEgPT4ge1xuICAgIGlmIChhLmxheWVyX25hbWUgIT0gbnVsbCAmJiBhLm5hbWVzcGFjZSAhPSBudWxsKSB7XG4gICAgICBieU5hbWVzcGFjZS5zZXQoYS5uYW1lc3BhY2UsIGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBFWFBFUklNRU5UX05BTUVTUEFDRVMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBucykgPT4ge1xuICAgIGNvbnN0IGEgPSBieU5hbWVzcGFjZS5nZXQobnMpO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5sYXllcl9uYW1lYF0gPSBhPy5sYXllcl9uYW1lID8/IG51bGw7XG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LmV4cGVyaW1lbnRfbmFtZWBdID0gYT8uYWxsb2NhdGVkX2V4cGVyaW1lbnRfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ncm91cF9uYW1lYF0gPSBhPy5ncm91cF9uYW1lID8/IG51bGw7XG4gICAgLy8gYHJ1bGVfaWRgIHJlc2VydmVkIOKAlCBiYWNrZW5kIGRvZXNuJ3QgY3VycmVudGx5IHN1cmZhY2UgaXQuXG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LnJ1bGVfaWRgXSA9IG51bGw7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgcHJpdmF0ZSBpbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNNb2NrQXBpS2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgPT09ICdtb2NrLWFtcGxpdHVkZS1rZXknO1xuICB9XG5cbiAgLy8gTXVzdCBub3QgZGVwZW5kIG9uIGBhbXBsaXR1ZGVDbGllbnRgOiB0aGUgU0RLIG5vdyBsb2FkcyB2aWEgZHluYW1pY1xuICAvLyBpbXBvcnQsIGFuZCBBbXBsaXR1ZGVQcm92aWRlciB1bm1vdW50cyBpdHMgZW50aXJlIHN1YnRyZWUgd2hpbGVcbiAgLy8gaXNSZWFkeSBpcyBmYWxzZSDigJQgZ2F0aW5nIG9uIHRoZSBjbGllbnQgd291bGQgYmxvY2sgd2lkZ2V0IHJlbmRlcmluZ1xuICAvLyBvbiB0aGUgYW5hbHl0aWNzIGNodW5rIGRvd25sb2FkLiBFdmVudHMgYXdhaXRlZCBpbiB0cmFja0V2ZW50IHF1ZXVlXG4gIC8vIGJlaGluZCBgaW5pdFByb21pc2VgIGluc3RlYWQuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmXG4gICAgICB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSAmJlxuICAgICAgIXRoaXMuaXNNb2NrQXBpS2V5LFxuICAgICk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgb25jZSBTREsgaW5pdGlhbGl6YXRpb24gaGFzIHNldHRsZWQgKG5ldmVyIHJlamVjdHMpLiAqL1xuICBpbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pbml0UHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRQcm9wcyA9IGJ1aWxkRXhwZXJpbWVudFByb3BzKHRoaXMuY29uZmlnLmV4cGVyaW1lbnRBc3NpZ25tZW50cyk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFByb3BzID0ge1xuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9jb250ZXh0JzogJ2J1bmRsZScsXG4gICAgICAnZW52aXJvbm1lbnQucGFnZV91cmwnOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfdXNlcl9pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fZW52aXJvbm1lbnQnOiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgJ2Vudmlyb25tZW50LmNvbnRleHRfc291cmNlJzogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgICdlbnZpcm9ubWVudC5zYWxlc19hZ2VudF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zYWxlc0FnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNlYXJjaF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zZWFyY2hBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfb25fcXVlcnlfcGFyYW0nOiB0aGlzLmNvbmZpZy5lbnZpdmVPbixcbiAgICAgICdlbnZpcm9ubWVudC53aW5kb3dfc2hvdyc6IHRoaXMuY29uZmlnLnNob3csXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LmVudml2ZSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0gQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZ1bGxGbGFnVmFsdWVzKCksXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICAgIC4uLmVudmlyb25tZW50UHJvcHMsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICAgIGBbRW52aXZlXSAke0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50X3R5cGUgYXMgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdNb2NrIEFQSSBrZXkgZGV0ZWN0ZWQg4oCUIHJ1bm5pbmcgaW4gbW9jayBtb2RlLCBubyBldmVudHMgd2lsbCBiZSBzZW50IHRvIEFtcGxpdHVkZS4nLFxuICAgICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIHRoZSBBbXBsaXR1ZGUgU0RLIG91dCBvZiB0aGUgZWFnZXJcbiAgICAgICAgLy8gaW5qZWN0aW9uLWJ1bmRsZSBjaHVuazsgdHJhY2tFdmVudCBxdWV1ZXMgYmVoaW5kIGluaXRQcm9taXNlLlxuICAgICAgICBjb25zdCB7IGNyZWF0ZUluc3RhbmNlIH0gPSBhd2FpdCBpbXBvcnQoJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLWJyb3dzZXInKTtcbiAgICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKHRoaXMuZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKSk7XG4gICAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiAncGF0aE9ubHknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1JbnRlcmFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGxvYWQgb3IgaW5pdGlhbGl6ZSB0aGUgQW1wbGl0dWRlIFNESycsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UeXBpbmdBbmltYXRpb25WMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzOlxuICAgICAgICByZXR1cm4gJ2VtYmVkZGVkX3dpZGdldCc7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgICAgcmV0dXJuICdzdWdnZXN0aW9uX2Jhcic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzOlxuICAgICAgICByZXR1cm4gJ2ltYWdlX3Byb21wdF9jYXJkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb246IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHJpZ2dlckxvY2F0aW9uKSB7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAncHJvbXB0X2NhcmQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST01QVF9DQVJPVVNFTDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5USVRMRURfUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgICByZXR1cm4gJ3RvcF9yZXZpZXdzX3NuaXBwZXQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRZUElOR19BTklNQVRJT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1BSSU1BUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9TRUNPTkRBUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdjaGF0X3ByZXZpZXcnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfT1ZFUkxBWTpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX0NMT1NFX0JVVFRPTjpcbiAgICAgICAgcmV0dXJuICdpbl9jaGF0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cmlnZ2VyTG9jYXRpb24gYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hcCB0aGUgZXZlbnQgcHJvcHMgdG8gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0aGUgbGVnYWN5IGFtcGxpdHVkZSBldmVudHNcbiAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBtZXNzYWdlTWV0YWRhdGEgPSBldmVudFByb3BzPy5tZXNzYWdlX21ldGFkYXRhID8/IHt9O1xuICAgIGNvbnN0IHRyaWdnZXJMb2NhdGlvbiA9XG4gICAgICBtZXNzYWdlTWV0YWRhdGEgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBtZXNzYWdlTWV0YWRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAndHJpZ2dlcl9sb2NhdGlvbicgaW4gbWVzc2FnZU1ldGFkYXRhXG4gICAgICAgID8gbWVzc2FnZU1ldGFkYXRhLnRyaWdnZXJfbG9jYXRpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRFeHBhbmRlZCkge1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudFZpc2libGUpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFdpZGdldFR5cGUgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQoXG4gICAgICAgIGV2ZW50UHJvcHM/LndpZGdldF90eXBlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBjaGF0X2NvbXBvbmVudDogbWFwcGVkV2lkZ2V0VHlwZSxcbiAgICAgICAgJ2NoYXQuY29tcG9uZW50X3Zpc2libGUnOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UHJvcHMgPz8ge307XG4gIH1cblxuICBzdGF0aWMgaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbnZpdmVNZXRyaWNzRXZlbnROYW1lKS5pbmNsdWRlcyhldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IHN0cmluZyB7XG4gICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkpIHtcbiAgICAgIHJldHVybiBgW0Vudml2ZV0gJHtldmVudE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGBbU3BpZmZ5XSAke2V2ZW50TmFtZX1gO1xuICB9XG5cbiAgYXN5bmMgdHJhY2tFdmVudCh7XG4gICAgZXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHMsXG4gICAgZXZlbnRHcm91cHMsXG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyA9IGZhbHNlLFxuICB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNNb2NrQXBpS2V5KSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcbiAgICBsb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBBbXBsaXR1ZGVTZXJ2aWNlLmRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuICAgICAgY29uc3QgYW1wbGl0dWRlRXZlbnRQcm9wcyA9XG4gICAgICAgIGV2ZW50TmFtZSA9PT0gRW52aXZlTWV0cmljc0V2ZW50TmFtZS5XaWRnZXRUZXh0UmVzcG9uc2UgfHxcbiAgICAgICAgZXZlbnROYW1lID09PSBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRDbGlja2VkXG4gICAgICAgICAgPyAoZW5jb2RlU3VwcGxlbWVudGFyeVVuaWNvZGUobWFwcGVkRXZlbnRQcm9wcykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgICAgOiBtYXBwZWRFdmVudFByb3BzO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogYW1wbGl0dWRlRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBhbXBsaXR1ZGVFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4uYW1wbGl0dWRlRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4oYW1wbGl0dWRlRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIGFtcGxpdHVkZUV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gVE9ETzogUHVsbCBnYUVuYWJsZWQgZnJvbSBvcmcgY29uZmlnIHdoZW4gYXZhaWxhYmxlLiBIYXJkY29kZWQgdG8gdHJ1ZSBmb3Igbm93LlxuICAgICAgY29uc3QgZ2FFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFByb3BzRm9yR0E0ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoZXZlbnROYW1lKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICB9O1xuICAgICAgICBwcm9qZWN0VG9HQTQoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIG1lcmdlZFByb3BzRm9yR0E0KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiBnYUVuYWJsZWQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBbUJBLE1BQU0sU0FBUyxJQUFJQSx1QkFBTyxtQkFBbUI7QUFJN0MsTUFBTSx3QkFBd0I7QUFFOUIsTUFBTSxnQ0FBZ0MsVUFDcEMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFLLGVBQWMsVUFBVSxZQUFZLEVBQUUsSUFBSSxLQUFLLE1BQU87QUFFL0UsTUFBTSw4QkFBOEIsVUFBNEI7QUFDOUQsS0FBSSxPQUFPLFVBQVUsU0FDbkIsUUFBTyw2QkFBNkIsTUFBTSxHQUN0QyxHQUFHLHdCQUF3QixtQkFBbUIsTUFBTSxLQUNwRDtBQUVOLEtBQUksTUFBTSxRQUFRLE1BQU0sQ0FDdEIsUUFBTyxNQUFNLElBQUksMkJBQTJCO0FBRTlDLEtBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxTQUNyQyxRQUFPLE9BQU8sWUFDWixPQUFPLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLGlCQUFpQixDQUNoRCxLQUNBLDJCQUEyQixZQUFZLENBQ3hDLENBQUMsQ0FDSDtBQUVILFFBQU87O0FBZ0NULE1BQU1DLHdCQUErQyxDQUFDLE1BQU0sV0FBVztBQUV2RSxNQUFNLHdCQUNKLGdCQUM0QjtDQUM1QixNQUFNLDhCQUFjLElBQUksS0FBeUQ7QUFDakYsRUFBQyxlQUFlLEVBQUUsRUFBRSxTQUFRLE1BQUs7QUFDL0IsTUFBSSxFQUFFLGNBQWMsUUFBUSxFQUFFLGFBQWEsS0FDekMsYUFBWSxJQUFJLEVBQUUsV0FBVyxFQUFFO0dBRWpDO0FBQ0YsUUFBTyxzQkFBc0IsUUFBaUMsS0FBSyxPQUFPO0VBQ3hFLE1BQU0sSUFBSSxZQUFZLElBQUksR0FBRztBQUM3QixNQUFJLGNBQWMsR0FBRyxn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
@@ -10,6 +10,14 @@ import { projectToGA4 } from "../ga4ProjectionService/ga4ProjectionService.js";
10
10
 
11
11
  //#region src/services/amplitudeService/amplitudeService.ts
12
12
  const logger = new logger_default("amplitudeService");
13
+ const UTF8_TRANSPORT_PREFIX = "__spiffy_utf8__:";
14
+ const containsSupplementaryUnicode = (value) => Array.from(value).some((character) => (character.codePointAt(0) ?? 0) > 65535);
15
+ const encodeSupplementaryUnicode = (value) => {
16
+ if (typeof value === "string") return containsSupplementaryUnicode(value) ? `${UTF8_TRANSPORT_PREFIX}${encodeURIComponent(value)}` : value;
17
+ if (Array.isArray(value)) return value.map(encodeSupplementaryUnicode);
18
+ if (value !== null && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [key, encodeSupplementaryUnicode(nestedValue)]));
19
+ return value;
20
+ };
13
21
  const EXPERIMENT_NAMESPACES = ["ml", "merchant"];
14
22
  const buildExperimentProps = (assignments) => {
15
23
  const byNamespace = /* @__PURE__ */ new Map();
@@ -257,9 +265,10 @@ var AmplitudeService = class AmplitudeService {
257
265
  eventName,
258
266
  eventProps
259
267
  });
268
+ const amplitudeEventProps = eventName === EnviveMetricsEventName.WidgetTextResponse || eventName === EnviveMetricsEventName.WidgetTextClicked ? encodeSupplementaryUnicode(mappedEventProps) : mappedEventProps;
260
269
  const eventData = JSON.stringify({
261
270
  eventName,
262
- eventProps: mappedEventProps,
271
+ eventProps: amplitudeEventProps,
263
272
  created_at: (/* @__PURE__ */ new Date()).toISOString()
264
273
  });
265
274
  const data = new TextEncoder().encode(eventData);
@@ -267,12 +276,12 @@ var AmplitudeService = class AmplitudeService {
267
276
  const currentInsertId = Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("");
268
277
  logger.logDebug(`amplitude tracking ${decoratedEventName}`, null, {
269
278
  event_name: decoratedEventName,
270
- props: mappedEventProps
279
+ props: amplitudeEventProps
271
280
  });
272
281
  this.amplitudeClient.track(decoratedEventName, {
273
282
  ...this.getDefaultTrackingProps(eventName),
274
- ...mappedEventProps,
275
- ...mappedEventProps ? this.eventPropsToPrefixedEventProps(eventName, mappedEventProps) : {}
283
+ ...amplitudeEventProps,
284
+ ...amplitudeEventProps ? this.eventPropsToPrefixedEventProps(eventName, amplitudeEventProps) : {}
276
285
  }, {
277
286
  ...eventGroups,
278
287
  insert_id: currentInsertId
@@ -303,4 +312,4 @@ var AmplitudeService = class AmplitudeService {
303
312
 
304
313
  //#endregion
305
314
  export { AmplitudeService };
306
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsIkVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdIiwiZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiIsImVucmljaGVkRXZlbnQ6IEV2ZW50IiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRzRGlzcGF0Y2hlciwgU3BpZmZ5RXZlbnQgfSBmcm9tICdzcmMvZXZlbnRzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleXMgfSBmcm9tICdzcmMvY29udGV4dHMvbG9jYWxTdG9yYWdlQ29udGV4dCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEJyb3dzZXJDbGllbnQsXG4gIEVucmljaG1lbnRQbHVnaW4sXG4gIEV2ZW50LFxuICBTZXJ2ZXJab25lVHlwZSxcbn0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtdHlwZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzJztcbmltcG9ydCB7IEV4cGVyaW1lbnROYW1lc3BhY2UsIE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBwcm9qZWN0VG9HQTQgfSBmcm9tICcuLi9nYTRQcm9qZWN0aW9uU2VydmljZS9nYTRQcm9qZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnLi9ldmVudE5hbWVzJztcblxuLy8gUmUtZXhwb3J0IGV2ZW50IG5hbWVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9O1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdhbXBsaXR1ZGVTZXJ2aWNlJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWU7XG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRHcm91cHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGl0dWRlU2VydmljZUNvbmZpZyB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIHNob3c6IGJvb2xlYW47XG4gIGVudml2ZU9uOiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xuICAvLyBDYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb24uIERyaXZlcyBgZXhwZXJpbWVudC57bnN9LipgIGV2ZW50LXByb3BlcnR5XG4gIC8vIGVucmljaG1lbnQuIFNvdXJjZWQgZnJvbSAvdjEvb3JnL2NvbmZpZyB3aGVuIHRoZSBgdXNlX3VuaWZpZWRfY29uZmlnYFxuICAvLyBnYXRlIGlzIG9uOyBvdGhlcndpc2Ugb21pdHRlZCAocHJvcHMgZW1pdCBhcyBudWxsKS5cbiAgZXhwZXJpbWVudEFzc2lnbm1lbnRzPzogT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnRbXTtcbn1cblxuLy8gTmFtZXNwYWNlcyBlbWl0dGVkIG9uIGV2ZXJ5IGV2ZW50IHdpdGggY29uc3RhbnQga2V5cywgc28gdGhlIEJpZ1F1ZXJ5XG4vLyBzY2hlbWEgaXMgc3RhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggKGlmIGFueSkgZXhwZXJpbWVudCBpcyBydW5uaW5nLlxuLy8gQ3VycmVudGx5IGBtbGAgKyBgbWVyY2hhbnRgOyBtYXRjaGVzIGBFeHBlcmltZW50TmFtZXNwYWNlYC5cbmNvbnN0IEVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdID0gWydtbCcsICdtZXJjaGFudCddO1xuXG5jb25zdCBidWlsZEV4cGVyaW1lbnRQcm9wcyA9IChcbiAgYXNzaWdubWVudHM6IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W10gfCB1bmRlZmluZWQsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGJ5TmFtZXNwYWNlID0gbmV3IE1hcDxFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudD4oKTtcbiAgKGFzc2lnbm1lbnRzID8/IFtdKS5mb3JFYWNoKGEgPT4ge1xuICAgIGlmIChhLmxheWVyX25hbWUgIT0gbnVsbCAmJiBhLm5hbWVzcGFjZSAhPSBudWxsKSB7XG4gICAgICBieU5hbWVzcGFjZS5zZXQoYS5uYW1lc3BhY2UsIGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBFWFBFUklNRU5UX05BTUVTUEFDRVMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBucykgPT4ge1xuICAgIGNvbnN0IGEgPSBieU5hbWVzcGFjZS5nZXQobnMpO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5sYXllcl9uYW1lYF0gPSBhPy5sYXllcl9uYW1lID8/IG51bGw7XG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LmV4cGVyaW1lbnRfbmFtZWBdID0gYT8uYWxsb2NhdGVkX2V4cGVyaW1lbnRfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ncm91cF9uYW1lYF0gPSBhPy5ncm91cF9uYW1lID8/IG51bGw7XG4gICAgLy8gYHJ1bGVfaWRgIHJlc2VydmVkIOKAlCBiYWNrZW5kIGRvZXNuJ3QgY3VycmVudGx5IHN1cmZhY2UgaXQuXG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LnJ1bGVfaWRgXSA9IG51bGw7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgcHJpdmF0ZSBpbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNNb2NrQXBpS2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgPT09ICdtb2NrLWFtcGxpdHVkZS1rZXknO1xuICB9XG5cbiAgLy8gTXVzdCBub3QgZGVwZW5kIG9uIGBhbXBsaXR1ZGVDbGllbnRgOiB0aGUgU0RLIG5vdyBsb2FkcyB2aWEgZHluYW1pY1xuICAvLyBpbXBvcnQsIGFuZCBBbXBsaXR1ZGVQcm92aWRlciB1bm1vdW50cyBpdHMgZW50aXJlIHN1YnRyZWUgd2hpbGVcbiAgLy8gaXNSZWFkeSBpcyBmYWxzZSDigJQgZ2F0aW5nIG9uIHRoZSBjbGllbnQgd291bGQgYmxvY2sgd2lkZ2V0IHJlbmRlcmluZ1xuICAvLyBvbiB0aGUgYW5hbHl0aWNzIGNodW5rIGRvd25sb2FkLiBFdmVudHMgYXdhaXRlZCBpbiB0cmFja0V2ZW50IHF1ZXVlXG4gIC8vIGJlaGluZCBgaW5pdFByb21pc2VgIGluc3RlYWQuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmXG4gICAgICB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSAmJlxuICAgICAgIXRoaXMuaXNNb2NrQXBpS2V5LFxuICAgICk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgb25jZSBTREsgaW5pdGlhbGl6YXRpb24gaGFzIHNldHRsZWQgKG5ldmVyIHJlamVjdHMpLiAqL1xuICBpbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pbml0UHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRQcm9wcyA9IGJ1aWxkRXhwZXJpbWVudFByb3BzKHRoaXMuY29uZmlnLmV4cGVyaW1lbnRBc3NpZ25tZW50cyk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFByb3BzID0ge1xuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9jb250ZXh0JzogJ2J1bmRsZScsXG4gICAgICAnZW52aXJvbm1lbnQucGFnZV91cmwnOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfdXNlcl9pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fZW52aXJvbm1lbnQnOiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgJ2Vudmlyb25tZW50LmNvbnRleHRfc291cmNlJzogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgICdlbnZpcm9ubWVudC5zYWxlc19hZ2VudF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zYWxlc0FnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNlYXJjaF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zZWFyY2hBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfb25fcXVlcnlfcGFyYW0nOiB0aGlzLmNvbmZpZy5lbnZpdmVPbixcbiAgICAgICdlbnZpcm9ubWVudC53aW5kb3dfc2hvdyc6IHRoaXMuY29uZmlnLnNob3csXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LmVudml2ZSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0gQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZ1bGxGbGFnVmFsdWVzKCksXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICAgIC4uLmVudmlyb25tZW50UHJvcHMsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICAgIGBbRW52aXZlXSAke0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50X3R5cGUgYXMgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdNb2NrIEFQSSBrZXkgZGV0ZWN0ZWQg4oCUIHJ1bm5pbmcgaW4gbW9jayBtb2RlLCBubyBldmVudHMgd2lsbCBiZSBzZW50IHRvIEFtcGxpdHVkZS4nLFxuICAgICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIHRoZSBBbXBsaXR1ZGUgU0RLIG91dCBvZiB0aGUgZWFnZXJcbiAgICAgICAgLy8gaW5qZWN0aW9uLWJ1bmRsZSBjaHVuazsgdHJhY2tFdmVudCBxdWV1ZXMgYmVoaW5kIGluaXRQcm9taXNlLlxuICAgICAgICBjb25zdCB7IGNyZWF0ZUluc3RhbmNlIH0gPSBhd2FpdCBpbXBvcnQoJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLWJyb3dzZXInKTtcbiAgICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKHRoaXMuZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKSk7XG4gICAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiAncGF0aE9ubHknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1JbnRlcmFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGxvYWQgb3IgaW5pdGlhbGl6ZSB0aGUgQW1wbGl0dWRlIFNESycsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UeXBpbmdBbmltYXRpb25WMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzOlxuICAgICAgICByZXR1cm4gJ2VtYmVkZGVkX3dpZGdldCc7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgICAgcmV0dXJuICdzdWdnZXN0aW9uX2Jhcic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzOlxuICAgICAgICByZXR1cm4gJ2ltYWdlX3Byb21wdF9jYXJkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb246IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHJpZ2dlckxvY2F0aW9uKSB7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAncHJvbXB0X2NhcmQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST01QVF9DQVJPVVNFTDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5USVRMRURfUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgICByZXR1cm4gJ3RvcF9yZXZpZXdzX3NuaXBwZXQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRZUElOR19BTklNQVRJT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1BSSU1BUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9TRUNPTkRBUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdjaGF0X3ByZXZpZXcnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfT1ZFUkxBWTpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX0NMT1NFX0JVVFRPTjpcbiAgICAgICAgcmV0dXJuICdpbl9jaGF0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cmlnZ2VyTG9jYXRpb24gYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hcCB0aGUgZXZlbnQgcHJvcHMgdG8gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0aGUgbGVnYWN5IGFtcGxpdHVkZSBldmVudHNcbiAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBtZXNzYWdlTWV0YWRhdGEgPSBldmVudFByb3BzPy5tZXNzYWdlX21ldGFkYXRhID8/IHt9O1xuICAgIGNvbnN0IHRyaWdnZXJMb2NhdGlvbiA9XG4gICAgICBtZXNzYWdlTWV0YWRhdGEgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBtZXNzYWdlTWV0YWRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAndHJpZ2dlcl9sb2NhdGlvbicgaW4gbWVzc2FnZU1ldGFkYXRhXG4gICAgICAgID8gbWVzc2FnZU1ldGFkYXRhLnRyaWdnZXJfbG9jYXRpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRFeHBhbmRlZCkge1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudFZpc2libGUpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFdpZGdldFR5cGUgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQoXG4gICAgICAgIGV2ZW50UHJvcHM/LndpZGdldF90eXBlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBjaGF0X2NvbXBvbmVudDogbWFwcGVkV2lkZ2V0VHlwZSxcbiAgICAgICAgJ2NoYXQuY29tcG9uZW50X3Zpc2libGUnOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UHJvcHMgPz8ge307XG4gIH1cblxuICBzdGF0aWMgaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbnZpdmVNZXRyaWNzRXZlbnROYW1lKS5pbmNsdWRlcyhldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IHN0cmluZyB7XG4gICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkpIHtcbiAgICAgIHJldHVybiBgW0Vudml2ZV0gJHtldmVudE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGBbU3BpZmZ5XSAke2V2ZW50TmFtZX1gO1xuICB9XG5cbiAgYXN5bmMgdHJhY2tFdmVudCh7XG4gICAgZXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHMsXG4gICAgZXZlbnRHcm91cHMsXG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyA9IGZhbHNlLFxuICB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNNb2NrQXBpS2V5KSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcbiAgICBsb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBBbXBsaXR1ZGVTZXJ2aWNlLmRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4obWFwcGVkRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIG1hcHBlZEV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gVE9ETzogUHVsbCBnYUVuYWJsZWQgZnJvbSBvcmcgY29uZmlnIHdoZW4gYXZhaWxhYmxlLiBIYXJkY29kZWQgdG8gdHJ1ZSBmb3Igbm93LlxuICAgICAgY29uc3QgZ2FFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFByb3BzRm9yR0E0ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoZXZlbnROYW1lKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICB9O1xuICAgICAgICBwcm9qZWN0VG9HQTQoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIG1lcmdlZFByb3BzRm9yR0E0KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiBnYUVuYWJsZWQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBbUJBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLG1CQUFtQjtBQStCN0MsTUFBTUMsd0JBQStDLENBQUMsTUFBTSxXQUFXO0FBRXZFLE1BQU0sd0JBQ0osZ0JBQzRCO0NBQzVCLE1BQU0sOEJBQWMsSUFBSSxLQUF5RDtBQUNqRixFQUFDLGVBQWUsRUFBRSxFQUFFLFNBQVEsTUFBSztBQUMvQixNQUFJLEVBQUUsY0FBYyxRQUFRLEVBQUUsYUFBYSxLQUN6QyxhQUFZLElBQUksRUFBRSxXQUFXLEVBQUU7R0FFakM7QUFDRixRQUFPLHNCQUFzQixRQUFpQyxLQUFLLE9BQU87RUFDeEUsTUFBTSxJQUFJLFlBQVksSUFBSSxHQUFHO0FBQzdC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
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsIkVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdIiwiZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiIsImVucmljaGVkRXZlbnQ6IEV2ZW50IiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRzRGlzcGF0Y2hlciwgU3BpZmZ5RXZlbnQgfSBmcm9tICdzcmMvZXZlbnRzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleXMgfSBmcm9tICdzcmMvY29udGV4dHMvbG9jYWxTdG9yYWdlQ29udGV4dCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEJyb3dzZXJDbGllbnQsXG4gIEVucmljaG1lbnRQbHVnaW4sXG4gIEV2ZW50LFxuICBTZXJ2ZXJab25lVHlwZSxcbn0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtdHlwZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzJztcbmltcG9ydCB7IEV4cGVyaW1lbnROYW1lc3BhY2UsIE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBwcm9qZWN0VG9HQTQgfSBmcm9tICcuLi9nYTRQcm9qZWN0aW9uU2VydmljZS9nYTRQcm9qZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnLi9ldmVudE5hbWVzJztcblxuLy8gUmUtZXhwb3J0IGV2ZW50IG5hbWVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9O1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdhbXBsaXR1ZGVTZXJ2aWNlJyk7XG5cbi8vIEFtcGxpdHVkZSdzIG1hbmFnZWQgQmlnUXVlcnkgZGF0YSBjYW4gc3VyZmFjZSBzdXBwbGVtZW50YXJ5IFVuaWNvZGUgYXMgVStGRkZELlxuLy8gS2VlcCB0aGUgd2lkZ2V0LXRyYWluaW5nIHBheWxvYWQgQVNDSUktc2FmZSB3aXRob3V0IGNoYW5naW5nIHRoZSBkaXNwbGF5ZWQgdGV4dC5cbmNvbnN0IFVURjhfVFJBTlNQT1JUX1BSRUZJWCA9ICdfX3NwaWZmeV91dGY4X186JztcblxuY29uc3QgY29udGFpbnNTdXBwbGVtZW50YXJ5VW5pY29kZSA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBBcnJheS5mcm9tKHZhbHVlKS5zb21lKGNoYXJhY3RlciA9PiAoY2hhcmFjdGVyLmNvZGVQb2ludEF0KDApID8/IDApID4gMHhmZmZmKTtcblxuY29uc3QgZW5jb2RlU3VwcGxlbWVudGFyeVVuaWNvZGUgPSAodmFsdWU6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY29udGFpbnNTdXBwbGVtZW50YXJ5VW5pY29kZSh2YWx1ZSlcbiAgICAgID8gYCR7VVRGOF9UUkFOU1BPUlRfUFJFRklYfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXG4gICAgICA6IHZhbHVlO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoZW5jb2RlU3VwcGxlbWVudGFyeVVuaWNvZGUpO1xuICB9XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtrZXksIG5lc3RlZFZhbHVlXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIGVuY29kZVN1cHBsZW1lbnRhcnlVbmljb2RlKG5lc3RlZFZhbHVlKSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UGFyYW1zIHtcbiAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZTtcbiAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmVudEdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFtcGxpdHVkZUFwaUtleTogc3RyaW5nO1xuICBkYXRhUmVzaWRlbmN5OiBzdHJpbmc7XG4gIGVudjogc3RyaW5nO1xuICBjb250ZXh0U291cmNlOiBzdHJpbmc7XG4gIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgc2hvdzogYm9vbGVhbjtcbiAgZW52aXZlT246IGJvb2xlYW47XG4gIGVuYWJsZWRGZWF0dXJlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICBnZXRMb2NhbFN0b3JhZ2VJdGVtOiBudWxsIHwgKChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCk7XG4gIC8vIENhcHR1cmVkIGF0IGNvbnN0cnVjdGlvbi4gRHJpdmVzIGBleHBlcmltZW50Lntuc30uKmAgZXZlbnQtcHJvcGVydHlcbiAgLy8gZW5yaWNobWVudC4gU291cmNlZCBmcm9tIC92MS9vcmcvY29uZmlnIHdoZW4gdGhlIGB1c2VfdW5pZmllZF9jb25maWdgXG4gIC8vIGdhdGUgaXMgb247IG90aGVyd2lzZSBvbWl0dGVkIChwcm9wcyBlbWl0IGFzIG51bGwpLlxuICBleHBlcmltZW50QXNzaWdubWVudHM/OiBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudFtdO1xufVxuXG4vLyBOYW1lc3BhY2VzIGVtaXR0ZWQgb24gZXZlcnkgZXZlbnQgd2l0aCBjb25zdGFudCBrZXlzLCBzbyB0aGUgQmlnUXVlcnlcbi8vIHNjaGVtYSBpcyBzdGFibGUgcmVnYXJkbGVzcyBvZiB3aGljaCAoaWYgYW55KSBleHBlcmltZW50IGlzIHJ1bm5pbmcuXG4vLyBDdXJyZW50bHkgYG1sYCArIGBtZXJjaGFudGA7IG1hdGNoZXMgYEV4cGVyaW1lbnROYW1lc3BhY2VgLlxuY29uc3QgRVhQRVJJTUVOVF9OQU1FU1BBQ0VTOiBFeHBlcmltZW50TmFtZXNwYWNlW10gPSBbJ21sJywgJ21lcmNoYW50J107XG5cbmNvbnN0IGJ1aWxkRXhwZXJpbWVudFByb3BzID0gKFxuICBhc3NpZ25tZW50czogT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnRbXSB8IHVuZGVmaW5lZCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgYnlOYW1lc3BhY2UgPSBuZXcgTWFwPEV4cGVyaW1lbnROYW1lc3BhY2UsIE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50PigpO1xuICAoYXNzaWdubWVudHMgPz8gW10pLmZvckVhY2goYSA9PiB7XG4gICAgaWYgKGEubGF5ZXJfbmFtZSAhPSBudWxsICYmIGEubmFtZXNwYWNlICE9IG51bGwpIHtcbiAgICAgIGJ5TmFtZXNwYWNlLnNldChhLm5hbWVzcGFjZSwgYSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIEVYUEVSSU1FTlRfTkFNRVNQQUNFUy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KChhY2MsIG5zKSA9PiB7XG4gICAgY29uc3QgYSA9IGJ5TmFtZXNwYWNlLmdldChucyk7XG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LmxheWVyX25hbWVgXSA9IGE/LmxheWVyX25hbWUgPz8gbnVsbDtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30uZXhwZXJpbWVudF9uYW1lYF0gPSBhPy5hbGxvY2F0ZWRfZXhwZXJpbWVudF9uYW1lID8/IG51bGw7XG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9Lmdyb3VwX25hbWVgXSA9IGE/Lmdyb3VwX25hbWUgPz8gbnVsbDtcbiAgICAvLyBgcnVsZV9pZGAgcmVzZXJ2ZWQg4oCUIGJhY2tlbmQgZG9lc24ndCBjdXJyZW50bHkgc3VyZmFjZSBpdC5cbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30ucnVsZV9pZGBdID0gbnVsbDtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59O1xuXG5leHBvcnQgY2xhc3MgQW1wbGl0dWRlU2VydmljZSB7XG4gIHByaXZhdGUgYW1wbGl0dWRlQ2xpZW50OiBCcm93c2VyQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1cHBsZW1lbnRhbERlZmF1bHRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBwcml2YXRlIGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZztcblxuICBwcml2YXRlIGluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuaW5pdFByb21pc2UgPSB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc01vY2tBcGlLZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSA9PT0gJ21vY2stYW1wbGl0dWRlLWtleSc7XG4gIH1cblxuICAvLyBNdXN0IG5vdCBkZXBlbmQgb24gYGFtcGxpdHVkZUNsaWVudGA6IHRoZSBTREsgbm93IGxvYWRzIHZpYSBkeW5hbWljXG4gIC8vIGltcG9ydCwgYW5kIEFtcGxpdHVkZVByb3ZpZGVyIHVubW91bnRzIGl0cyBlbnRpcmUgc3VidHJlZSB3aGlsZVxuICAvLyBpc1JlYWR5IGlzIGZhbHNlIOKAlCBnYXRpbmcgb24gdGhlIGNsaWVudCB3b3VsZCBibG9jayB3aWRnZXQgcmVuZGVyaW5nXG4gIC8vIG9uIHRoZSBhbmFseXRpY3MgY2h1bmsgZG93bmxvYWQuIEV2ZW50cyBhd2FpdGVkIGluIHRyYWNrRXZlbnQgcXVldWVcbiAgLy8gYmVoaW5kIGBpbml0UHJvbWlzZWAgaW5zdGVhZC5cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJlxuICAgICAgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5ICYmXG4gICAgICAhdGhpcy5pc01vY2tBcGlLZXksXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlcyBvbmNlIFNESyBpbml0aWFsaXphdGlvbiBoYXMgc2V0dGxlZCAobmV2ZXIgcmVqZWN0cykuICovXG4gIGluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmluaXRQcm9taXNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFN0b3JhZ2VJdGVtKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKGtleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgZmVhdHVyZUdhdGVzID0gT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFncygpKTtcbiAgICBjb25zdCBnYXRlc1Byb3BzID1cbiAgICAgIGZlYXR1cmVHYXRlcy5sZW5ndGggPiAwXG4gICAgICAgID8gZmVhdHVyZUdhdGVzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtgZmVhdHVyZV9nYXRlLiR7bmFtZX1gXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDoge307XG4gICAgY29uc3QgZXhwZXJpbWVudFByb3BzID0gYnVpbGRFeHBlcmltZW50UHJvcHModGhpcy5jb25maWcuZXhwZXJpbWVudEFzc2lnbm1lbnRzKTtcblxuICAgIGNvbnN0IGVudmlyb25tZW50UHJvcHMgPSB7XG4gICAgICAnZW52aXJvbm1lbnQuZXhlY3V0aW9uX2NvbnRleHQnOiAnYnVuZGxlJyxcbiAgICAgICdlbnZpcm9ubWVudC5wYWdlX3VybCc6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV91c2VyX2lkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9lbnZpcm9ubWVudCc6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICAnZW52aXJvbm1lbnQuY29udGV4dF9zb3VyY2UnOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNhbGVzX2FnZW50X2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LnNhbGVzQWdlbnQgPz8gZmFsc2UsXG4gICAgICAnZW52aXJvbm1lbnQuc2VhcmNoX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LnNlYXJjaEFnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9vbl9xdWVyeV9wYXJhbSc6IHRoaXMuY29uZmlnLmVudml2ZU9uLFxuICAgICAgJ2Vudmlyb25tZW50LndpbmRvd19zaG93JzogdGhpcy5jb25maWcuc2hvdyxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uZW52aXZlLFxuICAgIH07XG5cbiAgICBjb25zdCBvcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpXG4gICAgICA/IHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RnVsbEZsYWdWYWx1ZXMoKSxcbiAgICAgICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgICAgICAgLi4uZW52aXJvbm1lbnRQcm9wcyxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZ2F0ZXNQcm9wcyxcbiAgICAgICAgICAuLi5leHBlcmltZW50UHJvcHMsXG4gICAgICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyxcbiAgICAgIC4uLnRoaXMuc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzLFxuICAgICAgYXBwX2lkOiAnY29tbWVyY2UtY2hhdC1yZWFjdC1jb21wb25lbnQnLFxuICAgICAgY2hhdF9pZDogdGhpcy5nZXRMb2NhbFN0b3JhZ2VJdGVtKExvY2FsU3RvcmFnZUtleXMuQ2hhdElkKSxcbiAgICAgIGVudjogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgIGFwcF9zb3VyY2U6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICBvcmdfaWQ6IHRoaXMuY29uZmlnLm9yZ0lkLFxuICAgICAgJ29yZy5zaG9ydF9uYW1lJzogdGhpcy5jb25maWcub3JnU2hvcnROYW1lLFxuICAgICAgJ3VzZXIuaWQnOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAnY2RwLnVzZXJfaWQnOiBudWxsLFxuICAgICAgJ2NkcC5wcm92aWRlcic6IG51bGwsXG4gICAgICAnZXZlbnQuc291cmNlJzogJ3dlYi1icm93c2VyJyxcbiAgICAgICdldmVudC50eXBlJzogJ3VzZXItYWN0aXZpdHknLFxuICAgICAgJ2V2ZW50LmlkJzogbnVsbCxcbiAgICAgICdldmVudC5jaGFubmVsJzogJ3dlYicsXG4gICAgICAnZXZlbnQudGltZXN0YW1wJzogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgcHJpdmF0ZSBldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgICBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHByZWZpeCA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZXZlbnRQcm9wcykucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1tgJHtwcmVmaXh9LiR7a2V5fWBdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKTogRW5yaWNobWVudFBsdWdpbiB7XG4gICAgaWYgKHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50O1xuICAgIH1cblxuICAgIGNvbnN0IGVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gPSB7XG4gICAgICBuYW1lOiAncGFnZS12aWV3LXRyYWNraW5nLWVucmljaG1lbnQnLFxuICAgICAgdHlwZTogJ2VucmljaG1lbnQnLFxuICAgICAgc2V0dXA6IGFzeW5jICgpID0+IHVuZGVmaW5lZCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jIChldmVudDogRXZlbnQpOiBQcm9taXNlPEV2ZW50PiA9PiB7XG4gICAgICAgIGxldCBlbnJpY2hlZEV2ZW50OiBFdmVudDtcblxuICAgICAgICBjb25zdCBldmVudHNUb0VucmljaCA9IFtcbiAgICAgICAgICAnW0FtcGxpdHVkZV0gUGFnZSBWaWV3ZWQnLFxuICAgICAgICAgIGBbU3BpZmZ5XSAke1NwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkfWAsXG4gICAgICAgICAgYFtFbnZpdmVdICR7RW52aXZlTWV0cmljc0V2ZW50TmFtZS5QYWdlVmlld2VkfWAsXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGV2ZW50c1RvRW5yaWNoLmluY2x1ZGVzKGV2ZW50LmV2ZW50X3R5cGUpKSB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNob3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5zaG93J10gPSBTdHJpbmcodGhpcy5jb25maWcuc2hvdyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuZW52J10gPSBTdHJpbmcodGhpcy5jb25maWcuZW52KTtcblxuICAgICAgICAgIGNvbnN0IGVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICAgIHRoaXMuY29uZmlnPy5lbmFibGVkRmVhdHVyZXMgPz8gKHt9IGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KSxcbiAgICAgICAgICApLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihcbiAgICAgICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICBbYGVuYWJsZWRGZWF0dXJlcy4ke2tleX1gXTogYCR7dmFsdWV9YCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHRpbWluZ1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAndGltaW5nLmVucmljaGVkX2F0X21zJzpcbiAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cucGVyZm9ybWFuY2U/Lm5vdygpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0ge1xuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBldmVudF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LmV2ZW50X3Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRfdHlwZSBhcyBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgLi4uZ2xvYmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4uZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGltaW5nUHJvcGVydGllcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBFdmVudHNEaXNwYXRjaGVyLmRpc3BhdGNoKFNwaWZmeUV2ZW50LkFNUExJVFVERV9FVkVOVCwgZW5yaWNoZWRFdmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGVucmljaGVkRXZlbnQ7XG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ID0gZW5yaWNobWVudDtcbiAgICByZXR1cm4gZW5yaWNobWVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc1JlYWR5ID0gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJiB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiYgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICk7XG5cbiAgICBpZiAoIWlzUmVhZHkpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnQW1wbGl0dWRlU2VydmljZSBpcyBub3QgcmVhZHknLCB7XG4gICAgICAgIGlzUmVhZHksXG4gICAgICAgIHVzZXJJZDogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgICBoYXNGZWF0dXJlRmxhZ1NlcnZpY2U6ICEhdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLFxuICAgICAgICBoYXNBbXBsaXR1ZGVBcGlLZXk6ICEhdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNb2NrQXBpS2V5KSB7XG4gICAgICBsb2dnZXIubG9nV2FybihcbiAgICAgICAgJ01vY2sgQVBJIGtleSBkZXRlY3RlZCDigJQgcnVubmluZyBpbiBtb2NrIG1vZGUsIG5vIGV2ZW50cyB3aWxsIGJlIHNlbnQgdG8gQW1wbGl0dWRlLicsXG4gICAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRHluYW1pYyBpbXBvcnQga2VlcHMgdGhlIEFtcGxpdHVkZSBTREsgb3V0IG9mIHRoZSBlYWdlclxuICAgICAgICAvLyBpbmplY3Rpb24tYnVuZGxlIGNodW5rOyB0cmFja0V2ZW50IHF1ZXVlcyBiZWhpbmQgaW5pdFByb21pc2UuXG4gICAgICAgIGNvbnN0IHsgY3JlYXRlSW5zdGFuY2UgfSA9IGF3YWl0IGltcG9ydCgnQGFtcGxpdHVkZS9hbmFseXRpY3MtYnJvd3NlcicpO1xuICAgICAgICBjb25zdCBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U6IEJyb3dzZXJDbGllbnQgPSBjcmVhdGVJbnN0YW5jZSgpO1xuXG4gICAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5hZGQodGhpcy5nZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpKTtcbiAgICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmluaXQodGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LCB0aGlzLmNvbmZpZy51c2VySWQsIHtcbiAgICAgICAgICBzZXJ2ZXJab25lOiB0aGlzLmNvbmZpZy5kYXRhUmVzaWRlbmN5IGFzIFNlcnZlclpvbmVUeXBlLFxuICAgICAgICAgIHRyYWNraW5nT3B0aW9uczoge1xuICAgICAgICAgICAgaXBBZGRyZXNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXV0b2NhcHR1cmU6IHtcbiAgICAgICAgICAgIGF0dHJpYnV0aW9uOiB0cnVlLFxuICAgICAgICAgICAgcGFnZVZpZXdzOiB7XG4gICAgICAgICAgICAgIHRyYWNrSGlzdG9yeUNoYW5nZXM6ICdwYXRoT25seScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2Vzc2lvbnM6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybUludGVyYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICBmaWxlRG93bmxvYWRzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQgPSBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdGYWlsZWQgdG8gbG9hZCBvciBpbml0aWFsaXplIHRoZSBBbXBsaXR1ZGUgU0RLJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudCh3aWRnZXRUeXBlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHdpZGdldFR5cGUpIHtcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkZsb2F0aW5nQnV0dG9uVjM6XG4gICAgICAgIHJldHVybiAnZmxvYXRpbmdfYnV0dG9uJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlR5cGluZ0FuaW1hdGlvblYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlNvY2lhbFByb29mVjM6XG4gICAgICAgIHJldHVybiAnZW1iZWRkZWRfd2lkZ2V0JztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgICByZXR1cm4gJ3N1Z2dlc3Rpb25fYmFyJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjM6XG4gICAgICAgIHJldHVybiAnaW1hZ2VfcHJvbXB0X2NhcmQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0cmlnZ2VyTG9jYXRpb24pIHtcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdwcm9tcHRfY2FyZCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRJVExFRF9QUk9NUFRfQ0FST1VTRUw6XG4gICAgICAgIHJldHVybiAndG9wX3Jldmlld3Nfc25pcHBldCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVFlQSU5HX0FOSU1BVElPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfUFJJTUFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1NFQ09OREFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ2NoYXRfcHJldmlldyc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9PVkVSTEFZOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfQ0xPU0VfQlVUVE9OOlxuICAgICAgICByZXR1cm4gJ2luX2NoYXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJMb2NhdGlvbiBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWFwIHRoZSBldmVudCBwcm9wcyB0byB0aGUgY29ycmVjdCBmb3JtYXQgZm9yIHRoZSBsZWdhY3kgYW1wbGl0dWRlIGV2ZW50c1xuICBzdGF0aWMgbWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9OiBUcmFja0V2ZW50UGFyYW1zKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IG1lc3NhZ2VNZXRhZGF0YSA9IGV2ZW50UHJvcHM/Lm1lc3NhZ2VfbWV0YWRhdGEgPz8ge307XG4gICAgY29uc3QgdHJpZ2dlckxvY2F0aW9uID1cbiAgICAgIG1lc3NhZ2VNZXRhZGF0YSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIG1lc3NhZ2VNZXRhZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd0cmlnZ2VyX2xvY2F0aW9uJyBpbiBtZXNzYWdlTWV0YWRhdGFcbiAgICAgICAgPyBtZXNzYWdlTWV0YWRhdGEudHJpZ2dlcl9sb2NhdGlvblxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudEV4cGFuZGVkKSB7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSkge1xuICAgICAgY29uc3QgbWFwcGVkV2lkZ2V0VHlwZSA9IEFtcGxpdHVkZVNlcnZpY2UubWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudChcbiAgICAgICAgZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYXRfY29tcG9uZW50OiBtYXBwZWRXaWRnZXRUeXBlLFxuICAgICAgICAnY2hhdC5jb21wb25lbnRfdmlzaWJsZSc6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRQcm9wcyA/PyB7fTtcbiAgfVxuXG4gIHN0YXRpYyBpc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEVudml2ZU1ldHJpY3NFdmVudE5hbWUpLmluY2x1ZGVzKGV2ZW50TmFtZSBhcyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogc3RyaW5nIHtcbiAgICBpZiAoQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKSkge1xuICAgICAgcmV0dXJuIGBbRW52aXZlXSAke2V2ZW50TmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gYFtTcGlmZnldICR7ZXZlbnROYW1lfWA7XG4gIH1cblxuICBhc3luYyB0cmFja0V2ZW50KHtcbiAgICBldmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcyxcbiAgICBldmVudEdyb3VwcyxcbiAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzID0gZmFsc2UsXG4gIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc01vY2tBcGlLZXkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLmluaXRQcm9taXNlO1xuICAgIGxvZ2dlci5sb2dEZWJ1ZygnU3VibWl0dGluZyBldmVudCcsIGV2ZW50TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29yYXRlZEV2ZW50TmFtZSA9IEFtcGxpdHVkZVNlcnZpY2UuZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lKTtcblxuICAgICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgICBsb2dnZXIubG9nV2FybignYW1wbGl0dWRlIGNsaWVudCB1bmRlZmluZWQnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcHBlZEV2ZW50UHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfSk7XG4gICAgICBjb25zdCBhbXBsaXR1ZGVFdmVudFByb3BzID1cbiAgICAgICAgZXZlbnROYW1lID09PSBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXNwb25zZSB8fFxuICAgICAgICBldmVudE5hbWUgPT09IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dENsaWNrZWRcbiAgICAgICAgICA/IChlbmNvZGVTdXBwbGVtZW50YXJ5VW5pY29kZShtYXBwZWRFdmVudFByb3BzKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgICA6IG1hcHBlZEV2ZW50UHJvcHM7XG5cbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzOiBhbXBsaXR1ZGVFdmVudFByb3BzLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShldmVudERhdGEpO1xuICAgICAgLy8gY2FsY3VsYXRlIGEgaGFzaCBvZiB0aGUgZXZlbnQgcHJvcGVydGllcyB0byB1c2UgYXMgdGhlIGluc2VydF9pZCBzbyB0aGF0IGR1cGxpY2F0ZSBldmVudHNcbiAgICAgIC8vIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgYnkgQW1wbGl0dWRlXG4gICAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcbiAgICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgICAgY29uc3QgY3VycmVudEluc2VydElkID0gaGFzaEFycmF5Lm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuXG4gICAgICBsb2dnZXIubG9nRGVidWcoYGFtcGxpdHVkZSB0cmFja2luZyAke2RlY29yYXRlZEV2ZW50TmFtZX1gLCBudWxsLCB7XG4gICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgcHJvcHM6IGFtcGxpdHVkZUV2ZW50UHJvcHMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQudHJhY2soXG4gICAgICAgIGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoZXZlbnROYW1lKSxcbiAgICAgICAgICAuLi5hbXBsaXR1ZGVFdmVudFByb3BzLFxuICAgICAgICAgIC4uLihhbXBsaXR1ZGVFdmVudFByb3BzXG4gICAgICAgICAgICA/IHRoaXMuZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKGV2ZW50TmFtZSwgYW1wbGl0dWRlRXZlbnRQcm9wcylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZXZlbnRHcm91cHMsXG4gICAgICAgICAgaW5zZXJ0X2lkOiBjdXJyZW50SW5zZXJ0SWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBUT0RPOiBQdWxsIGdhRW5hYmxlZCBmcm9tIG9yZyBjb25maWcgd2hlbiBhdmFpbGFibGUuIEhhcmRjb2RlZCB0byB0cnVlIGZvciBub3cuXG4gICAgICBjb25zdCBnYUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKSAmJiBnYUVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHNGb3JHQTQgPSB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhldmVudE5hbWUpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIH07XG4gICAgICAgIHByb2plY3RUb0dBNChldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgbWVyZ2VkUHJvcHNGb3JHQTQpO1xuICAgICAgfSBlbHNlIGlmIChhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzICYmIGdhRW5hYmxlZCkge1xuICAgICAgICBsb2dnZXIubG9nRGVidWcoJ0dBIHRyYWNraW5nJywgZGVjb3JhdGVkRXZlbnROYW1lKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kYXRhTGF5ZXIpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICh3aW5kb3cuZGF0YUxheWVyIGFzIGFueVtdKS5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFByb3BzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIubG9nRXJyb3IoJ0Vycm9yIHRyYWNraW5nIGV2ZW50JywgZXJyLCB7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGF0IHN1cHBsZW1lbnRhbCBkZWZhdWx0IHByb3BzIGFyZSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgcHJvcHNcbiAgc2V0U3VwcGxlbWVudGFsRGVmYXVsdFByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc3VwcGxlbWVudGFsRGVmYXVs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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.55",
3
+ "version": "0.3.57",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@amplitude/analytics-browser": "2.23.7",
41
- "@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202607020921",
41
+ "@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202607170707",
42
42
  "@envive-ai/analytics": "1.0.29",
43
43
  "fuse.js": "^7.1.0",
44
44
  "jotai": "^2.14.0",
@@ -74,6 +74,10 @@
74
74
  "import": "./dist/application/commerce-api.js",
75
75
  "require": "./dist/application/commerce-api.cjs"
76
76
  },
77
+ "./application/logging": {
78
+ "import": "./dist/application/logging/index.js",
79
+ "require": "./dist/application/logging/index.cjs"
80
+ },
77
81
  "./application/models": {
78
82
  "import": "./dist/application/models/index.js",
79
83
  "require": "./dist/application/models/index.cjs"