@sinequa/assistant 3.9.2 → 3.9.3

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 (43) hide show
  1. package/chat/chat.component.d.ts +35 -38
  2. package/chat/chat.service.d.ts +190 -84
  3. package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +19 -0
  4. package/chat/debug-message/debug-message.component.d.ts +9 -12
  5. package/chat/debug-message/debug-message.service.d.ts +15 -0
  6. package/chat/documents-upload/document-list/document-list.component.d.ts +1 -0
  7. package/chat/public-api.d.ts +0 -2
  8. package/chat/saved-chats/i18n/en.json +1 -1
  9. package/chat/saved-chats/i18n/fr.json +1 -1
  10. package/chat/saved-chats/saved-chats.component.d.ts +1 -0
  11. package/chat/saved-chats/saved-chats.service.d.ts +27 -0
  12. package/chat/services/assistant-configuration.service.d.ts +34 -0
  13. package/chat/services/assistant-metadata.service.d.ts +18 -0
  14. package/chat/services/assistant-tokens-tracking.service.d.ts +23 -0
  15. package/chat/services/assistant-ws-frames.service.d.ts +50 -0
  16. package/chat/services/signalR-connection.service.d.ts +25 -0
  17. package/chat/types.d.ts +12 -3
  18. package/chat/utils/utils.service.d.ts +67 -0
  19. package/esm2022/chat/chat.component.mjs +198 -227
  20. package/esm2022/chat/chat.service.mjs +450 -267
  21. package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +43 -0
  22. package/esm2022/chat/debug-message/debug-message.component.mjs +27 -30
  23. package/esm2022/chat/debug-message/debug-message.service.mjs +52 -0
  24. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +6 -5
  25. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +4 -2
  26. package/esm2022/chat/public-api.mjs +1 -3
  27. package/esm2022/chat/saved-chats/saved-chats.component.mjs +11 -10
  28. package/esm2022/chat/saved-chats/saved-chats.service.mjs +165 -0
  29. package/esm2022/chat/services/assistant-configuration.service.mjs +171 -0
  30. package/esm2022/chat/services/assistant-metadata.service.mjs +67 -0
  31. package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +57 -0
  32. package/esm2022/chat/services/assistant-ws-frames.service.mjs +392 -0
  33. package/esm2022/chat/services/signalR-connection.service.mjs +109 -0
  34. package/esm2022/chat/types.mjs +1 -1
  35. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +2 -3
  36. package/esm2022/chat/utils/utils.service.mjs +170 -0
  37. package/fesm2022/sinequa-assistant-chat.mjs +2020 -1648
  38. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/chat/rest-chat.service.d.ts +0 -31
  41. package/chat/websocket-chat.service.d.ts +0 -102
  42. package/esm2022/chat/rest-chat.service.mjs +0 -300
  43. package/esm2022/chat/websocket-chat.service.mjs +0 -659
@@ -128,4 +128,4 @@ export const chatConfigSchema = z.object({
128
128
  additionalServiceSettings: additionalServiceSettingsSchema,
129
129
  additionalWorkflowProperties: additionalWorkflowPropertiesSchema,
130
130
  });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBaUt4QixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQztLQUN0QyxNQUFNLENBQUM7SUFDTixzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLE1BQU07S0FDUCxDQUFDO0lBQ0YsZUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEIsVUFBVTtRQUNWLE9BQU87UUFDUCxPQUFPO1FBQ1AsYUFBYTtRQUNiLE1BQU07UUFDTixPQUFPO1FBQ1AsU0FBUztLQUNWLENBQUM7SUFDRixrQ0FBa0MsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzFELENBQUM7S0FDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7SUFDakUsT0FBTyxFQUNMLG1OQUFtTjtDQUN0TixDQUFDLENBQUM7QUFJTCwrREFBK0Q7QUFDL0QsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lB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QW9CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuRCw0QkFBNEIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3JELENBQUMsQ0FBQztBQUVILDZEQUE2RDtBQUM3RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQztBQUtILGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLGtCQUFrQixFQUFFLHdCQUF3QjtJQUM1QyxhQUFhLEVBQUUsbUJBQW1CO0lBQ2xDLFlBQVksRUFBRSxrQkFBa0I7SUFDaEMsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixpQkFBaUIsRUFBRSx1QkFBdUI7SUFDMUMsY0FBYyxFQUFFLG9CQUFvQjtJQUNwQyxhQUFhLEVBQUUsbUJBQW1CO0lBQ2xDLHlCQUF5QixFQUFFLCtCQUErQjtJQUMxRCw0QkFBNEIsRUFBRSxrQ0FBa0M7Q0FDakUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgUXVlcnksIEFydGljbGUgYXMgUmVjb3JkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBSYXdNZXNzYWdlQ29udGVudCB9IGZyb20gXCIuL3R5cGVzL21lc3NhZ2UtY29udGVudC50eXBlc1wiO1xuaW1wb3J0IHsgTWVzc2FnZUltYWdlUmVmZXJlbmNlIH0gZnJvbSBcIi4vdHlwZXMvbWVzc2FnZS1yZWZlcmVuY2UudHlwZXNcIjtcblxuLyoqXG4gKiBJbmRpdmlkdWFsIG1lc3NhZ2Ugc2VudCAmIHJldHVybmVkIGJ5IHRoZSBDaGF0R1BUIEFQSS5cbiAqIElmIHRoaXMgbWVzc2FnZSBpcyBhbiBhdHRhY2htZW50LCB3ZSBhdHRhY2ggdGhlIG1pbmltYWxcbiAqIGluZm9ybWF0aW9uIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGlzIGF0dGFjaG1lbnQgKFJhd0F0dGFjaG1lbnQpXG4gKiBhcyB3ZWxsIGFzIHRoZSByZWZlcmVuY2UgaWQgY29tcHV0ZWQgYXQgdGhlIG1vbWVudCBvZiBzZW5kaW5nXG4gKiB0aGUgYXR0YWNobWVudCB0byB0aGUgQVBJLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd01lc3NhZ2Uge1xuICByb2xlOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IFJhd01lc3NhZ2VDb250ZW50O1xuICAvLyBVc2VkIG9ubHkgYnkgV1BTIHRvIGJlIHJlbW92ZWRcbiAgLy8gaHR0cHM6Ly9zaW5lcXVhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0VTLTIzNzEwXG4gIG1lc3NhZ2VUeXBlPzogXCJDSEFSVFwiIHwgXCJNQVJLRE9XTlwiO1xuICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBIGNoYXQgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZCB0byBpbmNsdWRlIHRoZSBtYXJrZG93bi1mb3JtYXR0ZWRcbiAqIGNvbnRlbnQgZm9yIGRpc3BsYXksIGFzIHdlbGwgYXMgZGV0YWlsZWQgYXR0YWNobWVudCBkYXRhLCBhbmQgb3B0aW9uYWxseVxuICogYSBsaXN0IG9mIHRoZSByZWZlcmVuY2VzIGV4dHJhY3RlZCBmcm9tIHRoYXQgbWVzc2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIGV4dGVuZHMgUmF3TWVzc2FnZSB7XG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgZGlzcGxheT86IGJvb2xlYW47XG4gICAgJHByb2dyZXNzPzogQ2hhdFByb2dyZXNzW107XG4gICAgJGF0dGFjaG1lbnQ/OiBDaGF0Q29udGV4dEF0dGFjaG1lbnRbXTtcbiAgICAkc3VnZ2VzdGVkQWN0aW9uPzogU3VnZ2VzdGVkQWN0aW9uW107XG4gICAgJGRlYnVnPzogRGVidWdNZXNzYWdlW107XG4gICAgZm9yY2VkV29ya2Zsb3c/OiBzdHJpbmc7XG4gICAgZm9yY2VkV29ya2Zsb3dQcm9wZXJ0aWVzPzogYW55O1xuICAgIHF1ZXJ5PzogUXVlcnk7XG4gICAgaXNVc2VySW5wdXQ/OiBib29sZWFuO1xuICAgIHVzYWdlTWV0cmljcz86IENoYXRVc2FnZU1ldHJpY3M7XG4gICAgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllcz86IGFueTtcbiAgICAkbGlrZWQ/OiBib29sZWFuO1xuICAgICRkaXNsaWtlZD86IGJvb2xlYW47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRQcm9ncmVzcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIGRvbmU/OiBib29sZWFuO1xuICB0aW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhd0F0dGFjaG1lbnQge1xuICAvKiogVHlwZSBvZiB0aGUgYXR0YWNobWVudCAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBSZWNvcmQgaWQgZnJvbSB3aGljaCB0aGlzIGF0dGFjaG1lbnQgaXMgdGFrZW4gKi9cbiAgcmVjb3JkSWQ6IHN0cmluZztcbiAgLyoqIFJlY29yZCBmcm9tIHdoaWNoIHRoaXMgdGhpcyBhdHRhY2htZW50IGlzIHRha2VuICovXG4gIHJlY29yZDogUmVjb3JkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50UGFydCB7XG4gIHBhcnRJZDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbiAgaW1hZ2VzPzogc3RyaW5nW10gfCBNZXNzYWdlSW1hZ2VSZWZlcmVuY2VbXTtcbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRQYWdlID0ge1xuICB1cmw6IHN0cmluZztcbiAgbWltZVR5cGU6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgb2ZmU2V0PzogbnVtYmVyO1xuICBwYWdlTnVtYmVyPzogbnVtYmVyO1xuICByZW1hcHBlZExlbmd0aD86IG51bWJlcjtcbiAgcmVtYXBwZWRPZmZzZXQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb250ZXh0QXR0YWNobWVudCBleHRlbmRzIFJhd0F0dGFjaG1lbnQge1xuICAvKiogVHlwZSBvZiB0aGUgYXR0YWNobWVudCAqL1xuICB0eXBlOiBcIkNvbnRleHRcIjtcbiAgLyoqIFJhbmsgb2YgdGhlIGF0dGFjaG1lbnQgaW4gdGhlIGNvbnRleHQgbWVzc2FnZSAqL1xuICBjb250ZXh0SWQ6IG51bWJlcjtcbiAgLyoqIFBhcnRzIG9mIHRoZSByZWNvcmQgdGhhdCB0aGUgYXNzaXN0YW50IHVzZXMgdG8gYW5zd2VyICovXG4gIHBhcnRzOiBEb2N1bWVudFBhcnRbXTtcbiAgLyoqIFBhZ2VzIG9mIHRoZSBkb2N1bWVudHMgYmFzZWQgb24gdGhlIHF1ZXJ5ICovXG4gIHBhZ2VzPzogRG9jdW1lbnRQYWdlW107XG4gIC8qKiBUaGUgc3BlY2lmaWMgaWQgdXNlZCBvZiB0aGUgcmVmZXJlbmNlZCBwYXJ0ICovXG4gICRwYXJ0SWQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmF3IHJlc3BvbnNlIG9mIHRoZSBjaGF0IEFQSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd1Jlc3BvbnNlIHtcbiAgaGlzdG9yeTogUmF3TWVzc2FnZVtdO1xuICBleGVjdXRpb25UaW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbnJpY2hlZCByZXNwb25zZSBvZiB0aGUgY2hhdCBBUElcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0UmVzcG9uc2UgZXh0ZW5kcyBSYXdSZXNwb25zZSB7XG4gIGhpc3Rvcnk6IENoYXRNZXNzYWdlW107XG59XG5cbi8qKlxuICogUmVzcG9uc2Ugb2YgdGhlIExpc3RNb2RlbHMgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xsbU1vZGVsRGVzY3JpcHRpb24ge1xuICBwcm92aWRlcjogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBlbmFibGU6IGJvb2xlYW47XG4gIG1heEdlbmVyYXRpb25TaXplOiBudW1iZXI7XG4gIGNvbnRleHRXaW5kb3dTaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzcG9uc2Ugb2YgdGhlIExpc3RGdW5jdGlvbnMgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xsbUZ1bmN0aW9uIHtcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHBhcmFtZXRlcnM6IEdsbG1GdW5jdGlvblBhcmFtZXRlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsbG1GdW5jdGlvblBhcmFtZXRlciB7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1pbmltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBzYXZlZCBjaGF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZWRDaGF0IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgbW9kaWZpZWRVVEM6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEYXRhIHN0cnVjdHVyZSBzYXZlZCB0byByZWNvbnN0cnVjdCBhIHNhdmVkIGNoYXQgY29udmVyc2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZWRDaGF0SGlzdG9yeSBleHRlbmRzIFNhdmVkQ2hhdCB7XG4gIGhpc3Rvcnk6IENoYXRNZXNzYWdlW107XG59XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY29ubmVjdGlvblNldHRpbmdzIG9iamVjdFxuZXhwb3J0IGNvbnN0IGNvbm5lY3Rpb25TZXR0aW5nc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgY29ubmVjdGlvbkVycm9yTWVzc2FnZTogei5zdHJpbmcoKSxcbiAgICByZXN0RW5kcG9pbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB3ZWJzb2NrZXRFbmRwb2ludDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNpZ25hbFJTa2lwTmVnb3RpYXRpb246IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgc2lnbmFsUlRyYW5zcG9ydDogei5lbnVtKFtcbiAgICAgIFwiV2ViU29ja2V0c1wiLFxuICAgICAgXCJTZXJ2ZXJTZW50RXZlbnRzXCIsXG4gICAgICBcIkxvbmdQb2xsaW5nXCIsXG4gICAgICBcIk5vbmVcIixcbiAgICBdKSxcbiAgICBzaWduYWxSTG9nTGV2ZWw6IHouZW51bShbXG4gICAgICBcIkNyaXRpY2FsXCIsXG4gICAgICBcIkRlYnVnXCIsXG4gICAgICBcIkVycm9yXCIsXG4gICAgICBcIkluZm9ybWF0aW9uXCIsXG4gICAgICBcIk5vbmVcIixcbiAgICAgIFwiVHJhY2VcIixcbiAgICAgIFwiV2FybmluZ1wiLFxuICAgIF0pLFxuICAgIHNpZ25hbFJTZXJ2ZXJUaW1lb3V0SW5NaWxsaXNlY29uZHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnJlZmluZSgoZGF0YSkgPT4gISFkYXRhLnJlc3RFbmRwb2ludCB8fCAhIWRhdGEud2Vic29ja2V0RW5kcG9pbnQsIHtcbiAgICBtZXNzYWdlOlxuICAgICAgXCJCYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQoKSBwcm90b2NvbCAoJ1JFU1QnIG9yICdXRUJTT0NLRVQnKSB0byB0aGUgQ2hhdCBDb21wb25lbnQsIGVpdGhlciAncmVzdEVuZHBvaW50JyBvciAnd2Vic29ja2V0RW5kcG9pbnQnIHByb3BlcnR5IHNob3VsZCBiZSBwcm92aWRlZCBpbiB0aGUgJ2dsb2JhbFNldHRpbmdzJyBvZiB0aGUgYXNzaXN0YW50IGluc3RhbmNlLlwiLFxuICB9KTtcbi8vIERlZmluZSB0aGUgQ29ubmVjdGlvblNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblNldHRpbmdzID0gei5pbmZlcjx0eXBlb2YgY29ubmVjdGlvblNldHRpbmdzU2NoZW1hPjtcblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBzZXJ2aWNlU2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBzZXJ2aWNlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlcnZpY2VfaWQ6IHouc3RyaW5nKCksXG4gIG1vZGVsX2lkOiB6LnN0cmluZygpLFxuICB0ZW1wZXJhdHVyZTogei5udW1iZXIoKSxcbiAgdG9wX3A6IHoubnVtYmVyKCksXG4gIG1heF90b2tlbnM6IHoubnVtYmVyKCksXG59KTtcbi8vIERlZmluZSB0aGUgU2VydmljZVNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU2V0dGluZ3NcbiAgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBzZXJ2aWNlU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWRkaXRpb25hbFNlcnZpY2VTZXR0aW5ncyBvYmplY3RcbmNvbnN0IGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7fSk7XG4vLyBEZWZpbmUgdGhlIEFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NcbiAgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBhZGRpdGlvbmFsU2VydmljZVNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXMgb2JqZWN0XG5jb25zdCBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzU2NoZW1hID0gei5vYmplY3Qoe30pO1xuLy8gRGVmaW5lIHRoZSBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzXG4gIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB1aVNldHRpbmdzIG9iamVjdFxuY29uc3QgdWlTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGlzcGxheTogei5ib29sZWFuKCksXG4gIHNlcnZpY2VzTW9kZWxzOiB6LmJvb2xlYW4oKSxcbiAgZnVuY3Rpb25zOiB6LmJvb2xlYW4oKSxcbiAgdGVtcGVyYXR1cmU6IHouYm9vbGVhbigpLFxuICB0b3BfcDogei5ib29sZWFuKCksXG4gIG1heF90b2tlbnM6IHouYm9vbGVhbigpLFxuICBkZWJ1Zzogei5ib29sZWFuKCksXG4gIGRpc3BsYXlTeXN0ZW1Qcm9tcHQ6IHouYm9vbGVhbigpLFxuICBkaXNwbGF5VXNlclByb21wdDogei5ib29sZWFuKCksXG59KTtcbi8vIERlZmluZSB0aGUgVWlTZXR0aW5ncyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgVWlTZXR0aW5ncyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHVpU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZGVmYXVsdFZhbHVlcyBvYmplY3RcbmNvbnN0IGRlZmF1bHRWYWx1ZXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlcnZpY2VfaWQ6IHouc3RyaW5nKCksXG4gIG1vZGVsX2lkOiB6LnN0cmluZygpLFxuICBmdW5jdGlvbnM6IHouYXJyYXkoXG4gICAgei5vYmplY3Qoe1xuICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIGVuYWJsZWQ6IHouYm9vbGVhbigpLFxuICAgIH0pXG4gICksXG4gIHRlbXBlcmF0dXJlOiB6Lm51bWJlcigpLFxuICB0b3BfcDogei5udW1iZXIoKSxcbiAgbWF4X3Rva2Vuczogei5udW1iZXIoKSxcbiAgZGVidWc6IHouYm9vbGVhbigpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCksXG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG59KTtcbi8vIERlZmluZSB0aGUgRGVmYXVsdFZhbHVlcyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdFZhbHVlcyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIGRlZmF1bHRWYWx1ZXNTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWN0aW9uIG9iamVjdFxuY29uc3QgYWN0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBmb3JjZWRXb3JrZmxvdzogei5zdHJpbmcoKSwgLy8gZm9yY2VkV29ya2Zsb3cgbXVzdCBiZSBhIHN0cmluZ1xuICBmb3JjZWRXb3JrZmxvd1Byb3BlcnRpZXM6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLCAvLyBmb3JjZWRXb3JrZmxvd1Byb3BlcnRpZXMgbXVzdCBiZSBhbiBvYmplY3QgKE1hcCBlcXVpdmFsZW50KVxufSk7XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbW9kZVNldHRpbmdzIG9iamVjdFxuY29uc3QgaW5pdGlhbGl6YXRpb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGV2ZW50OiB6LmVudW0oW1wiUXVlcnlcIiwgXCJQcm9tcHRcIl0pLFxuICAgIGZvcmNlZFdvcmtmbG93OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZm9yY2VkRnVuY3Rpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkaXNwbGF5VXNlclF1ZXJ5OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KVxuICAvLyDinYwgUnVsZSAxOiBDYW5ub3QgaGF2ZSBib3RoIGZvcmNlZFdvcmtmbG93IGFuZCBmb3JjZWRGdW5jdGlvblxuICAucmVmaW5lKFxuICAgIChkYXRhKSA9PlxuICAgICAgZGF0YS5ldmVudCAhPT0gXCJRdWVyeVwiIHx8ICEoZGF0YS5mb3JjZWRXb3JrZmxvdyAmJiBkYXRhLmZvcmNlZEZ1bmN0aW9uKSxcbiAgICB7XG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIkJvdGggJ2ZvcmNlZEZ1bmN0aW9uJyBhbmQgJ2ZvcmNlZFdvcmtmbG93JyBwcm9wZXJ0aWVzIGFyZSBzZXQsIGJ1dCB0aGV5IHNob3VsZCBub3QuXCIsXG4gICAgfVxuICApXG4gIC8vIOKdjCBSdWxlIDI6IE11c3QgaGF2ZSBvbmUgb2YgZm9yY2VkV29ya2Zsb3cgb3IgZm9yY2VkRnVuY3Rpb24gd2hlbiBldmVudCBpcyAnUXVlcnknXG4gIC5yZWZpbmUoXG4gICAgKGRhdGEpID0+XG4gICAgICBkYXRhLmV2ZW50ICE9PSBcIlF1ZXJ5XCIgfHwgISFkYXRhLmZvcmNlZFdvcmtmbG93IHx8ICEhZGF0YS5mb3JjZWRGdW5jdGlvbixcbiAgICB7XG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIk9uZSBvZiAnZm9yY2VkV29ya2Zsb3cnIG9yICdmb3JjZWRGdW5jdGlvbicgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHRoZSBpbml0aWFsaXphdGlvbidzIGV2ZW50IGlzICdRdWVyeScuXCIsXG4gICAgfVxuICApXG4gIC8vIOKdjCBSdWxlIDM6IE11c3QgaGF2ZSBkaXNwbGF5VXNlclF1ZXJ5IHNldCB3aGVuIGV2ZW50IGlzICdRdWVyeSdcbiAgLnJlZmluZShcbiAgICAoZGF0YSkgPT5cbiAgICAgIGRhdGEuZXZlbnQgIT09IFwiUXVlcnlcIiB8fFxuICAgICAgKGRhdGEuZGlzcGxheVVzZXJRdWVyeSAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZGlzcGxheVVzZXJRdWVyeSAhPT0gbnVsbCksXG4gICAge1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCInZGlzcGxheVVzZXJRdWVyeScgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHRoZSBpbml0aWFsaXphdGlvbidzIGV2ZW50IGlzICdRdWVyeScuXCIsXG4gICAgfVxuICApO1xuXG5jb25zdCBtb2RlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuYWJsZWRVc2VySW5wdXQ6IHouYm9vbGVhbigpLFxuICBkaXNwbGF5VXNlclByb21wdDogei5ib29sZWFuKCksXG4gIHNlbmRVc2VyUHJvbXB0OiB6LmJvb2xlYW4oKSxcbiAgaW5pdGlhbGl6YXRpb246IGluaXRpYWxpemF0aW9uU2NoZW1hLFxuICBhY3Rpb25zOiB6LnJlY29yZChhY3Rpb25TY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcbi8vIERlZmluZSB0aGUgTW9kZVNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBNb2RlU2V0dGluZ3MgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBtb2RlU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgc2F2ZWRDaGF0U2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBzYXZlZENoYXRTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5hYmxlZDogei5ib29sZWFuKCksXG4gIGRpc3BsYXk6IHouYm9vbGVhbigpLFxufSk7XG4vLyBEZWZpbmUgdGhlIFNhdmVkQ2hhdFNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTYXZlZENoYXRTZXR0aW5nc1xuICBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGdsb2JhbFNldHRpbmdzIG9iamVjdFxuY29uc3QgZ2xvYmFsU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlYXJjaFdhcm5pbmdNZXNzYWdlOiB6LnN0cmluZygpLFxuICBkaXNjbGFpbWVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGdlbmVyaWNDaGF0RXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXlVc2VyUXVvdGFDb25zdW1wdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheUNoYXRUb2tlbnNDb25zdW1wdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGF1ZGl0U2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBhdWRpdFNldHRpbmdzU2NoZW1hID0gei5vYmplY3Qoe1xuICBpc3N1ZVR5cGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGxvZ0NvbnRlbnQ6IHouYm9vbGVhbigpLFxufSk7XG4vLyBEZWZpbmUgdGhlIFNhdmVkQ2hhdFNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTYXZlZENoYXRTZXR0aW5nc1xuICBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGVudGlyZSBDaGF0Q29uZmlnIG9iamVjdFxuZXhwb3J0IGNvbnN0IGNoYXRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3Rpb25TZXR0aW5nczogY29ubmVjdGlvblNldHRpbmdzU2NoZW1hLFxuICBkZWZhdWx0VmFsdWVzOiBkZWZhdWx0VmFsdWVzU2NoZW1hLFxuICBtb2RlU2V0dGluZ3M6IG1vZGVTZXR0aW5nc1NjaGVtYSxcbiAgdWlTZXR0aW5nczogdWlTZXR0aW5nc1NjaGVtYSxcbiAgc2F2ZWRDaGF0U2V0dGluZ3M6IHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hLFxuICBnbG9iYWxTZXR0aW5nczogZ2xvYmFsU2V0dGluZ3NTY2hlbWEsXG4gIGF1ZGl0U2V0dGluZ3M6IGF1ZGl0U2V0dGluZ3NTY2hlbWEsXG4gIGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3M6IGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWEsXG4gIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXM6IGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXNTY2hlbWEsXG59KTtcbi8vIERlZmluZSB0aGUgQ2hhdENvbmZpZyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbmZpZyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIGNoYXRDb25maWdTY2hlbWE+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFBheWxvYWQge1xuICBkZWJ1ZzogYm9vbGVhbjtcbiAgZnVuY3Rpb25zOiBzdHJpbmdbXTtcbiAgaGlzdG9yeTogQ2hhdE1lc3NhZ2VbXTtcbiAgc2VydmljZVNldHRpbmdzOiBTZXJ2aWNlU2V0dGluZ3M7XG4gIGFwcFF1ZXJ5OiB7XG4gICAgYXBwOiBzdHJpbmc7XG4gICAgcXVlcnk6IFF1ZXJ5IHwgdW5kZWZpbmVkO1xuICAgIHRhcmdldFVybD86IHN0cmluZztcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgfTtcbiAgaW5zdGFuY2VJZD86IHN0cmluZztcbiAgc2F2ZWRDaGF0SWQ/OiBzdHJpbmc7XG4gIGdlbmVyaWNDaGF0RXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25NZXNzYWdlID0ge1xuICBndWlkOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBkaXNwbGF5VmFsdWU/OiBzdHJpbmc7XG4gIGV4ZWN1dGlvblRpbWU/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRDaHVua3NPcHRpb25zIHtcbiAgZXh0ZW5kTW9kZT86IFwiTm9uZVwiIHwgXCJTZW50ZW5jZVwiIHwgXCJDaGFyc1wiO1xuICBleHRlbmRTY29wZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdW90YSB7XG4gIGxhc3RSZXF1ZXN0OiBzdHJpbmc7XG4gIHByb21wdFRva2VuQ291bnQ6IG51bWJlcjtcbiAgY29tcGxldGlvblRva2VuQ291bnQ6IG51bWJlcjtcbiAgcGVyaW9kVG9rZW5zOiBudW1iZXI7XG4gIHJlc2V0SG91cnM6IG51bWJlcjtcbiAgdG9rZW5Db3VudDogbnVtYmVyO1xuICBuZXh0UmVzZXQ6IHN0cmluZztcbiAgbGFzdFJlc2V0VVRDOiBzdHJpbmc7XG4gIG5leHRSZXNldFVUQzogc3RyaW5nO1xuICBtYXhRdW90YVJlYWNoZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGVkQWN0aW9uIHtcbiAgY29udGVudDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdENoYXQge1xuICBtZXNzYWdlczogUmF3TWVzc2FnZVtdO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgZXZlbnRzIGRhdGEgdGhhdCBjYW4gYmUgZW1pdHRlZCBieSB0aGUgd2Vic29ja2V0IGNoYXQgZW5kcG9pbnRcbiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdGVkQWN0aW9uc0V2ZW50ID0geyBzdWdnZXN0ZWRBY3Rpb25zOiBTdWdnZXN0ZWRBY3Rpb25bXSB9O1xuZXhwb3J0IHR5cGUgUXVvdGFFdmVudCA9IHsgcXVvdGE6IFF1b3RhIH07XG5leHBvcnQgdHlwZSBNZXNzYWdlRXZlbnQgPSB7IGRlbHRhOiBzdHJpbmc7IG1lc3NhZ2VJZDogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBDb250ZXh0TWVzc2FnZUV2ZW50ID0geyBjb250ZW50OiBzdHJpbmc7IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBDaGF0Q29udGV4dEF0dGFjaG1lbnQgfTtcbmV4cG9ydCB0eXBlIEVycm9yRXZlbnQgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBBY3Rpb25TdGFydEV2ZW50ID0geyBndWlkOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIEFjdGlvblJlc3VsdEV2ZW50ID0geyBndWlkOiBzdHJpbmc7IGRpc3BsYXlWYWx1ZTogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBBY3Rpb25TdG9wRXZlbnQgPSB7IGd1aWQ6IHN0cmluZzsgZXhlY3V0aW9uVGltZTogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBIaXN0b3J5RXZlbnQgPSB7IGhpc3Rvcnk6IFJhd01lc3NhZ2VbXTsgZXhlY3V0aW9uVGltZTogc3RyaW5nOyBleGVjdXRpb25UaW1lTWlsbGlzZWNvbmRzPzogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBEZWJ1Z01lc3NhZ2VFdmVudCA9IERlYnVnTWVzc2FnZTtcblxuLyoqXG4gKiBEYXRhIGVtaXR0ZWQgYnkgdGhlIGh0dHAgY2hhdCBlbmRwb2ludFxuICovXG5leHBvcnQgdHlwZSBIdHRwQ2hhdFJlc3BvbnNlID0ge1xuICBxdW90YTogUXVvdGE7XG4gIHN1Z2dlc3RlZEFjdGlvbnM6IFN1Z2dlc3RlZEFjdGlvbltdO1xuICBkZWJ1ZzogYW55O1xuICBjb250ZXh0OiB7IGNvbnRlbnQ6IHN0cmluZzsgYWRkaXRpb25hbFByb3BlcnRpZXM6IENoYXRDb250ZXh0QXR0YWNobWVudCB9W107XG4gIGFjdGlvbnM6IEFjdGlvbk1lc3NhZ2VbXTtcbiAgaGlzdG9yeTogUmF3TWVzc2FnZVtdO1xuICBleGVjdXRpb25UaW1lOiBzdHJpbmc7XG4gIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5Db25zdW1wdGlvbiB7XG4gIHBlcmNlbnRhZ2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyVG9rZW5Db25zdW1wdGlvbiBleHRlbmRzIFRva2VuQ29uc3VtcHRpb24ge1xuICBuZXh0UmVzZXREYXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFVzYWdlTWV0cmljcyB7XG4gIHRvdGFsVG9rZW5Db3VudDogbnVtYmVyO1xuICBwcm9tcHRUb2tlbkNvdW50OiBudW1iZXI7XG4gIGNvbXBsZXRpb25Ub2tlbkNvdW50OiBudW1iZXI7XG4gIHRva2VuaXplclR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLdk9iamVjdCB7XG4gIGRhdGE6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55OyAvLyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCB8IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIH07XG4gIHR5cGU6IFwiS1ZcIjtcbiAgaXNFcnJvcjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0T2JqZWN0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBcIkxJU1RcIjtcbiAgaXNFcnJvcjogYm9vbGVhbjtcbiAgaXRlbXM6IChLdk9iamVjdCB8IExpc3RPYmplY3QpW107XG4gIGV4cGFuZGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBEZWJ1Z01lc3NhZ2UgPSBLdk9iamVjdCB8IExpc3RPYmplY3Q7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyPFQ+ID0ge1xuICBoYW5kbGVyOiAoZGF0YTogVCkgPT4gdm9pZDtcbiAgaXNHbG9iYWxIYW5kbGVyOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBEYXRhIGVtaXR0ZWQgYnkgdGhlIHNhdmVkIGNoYXQgZW5kcG9pbnRzXG4gKi9cbmV4cG9ydCB0eXBlIERlbGV0ZVNhdmVkQ2hhdFJlc3BvbnNlID0ge1xuICBkZWxldGVDb3VudDogbnVtYmVyO1xuICBleGVjdXRpb25UaW1lOiBzdHJpbmc7XG4gIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBTYXZlZENoYXRSZXNwb25zZSA9IHtcbiAgc2F2ZWRDaGF0OiBTYXZlZENoYXQ7XG4gIGV4ZWN1dGlvblRpbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kczogbnVtYmVyO1xufTtcbiJdfQ==
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBa0t4QixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQztLQUN0QyxNQUFNLENBQUM7SUFDTixzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLE1BQU07S0FDUCxDQUFDO0lBQ0YsZUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEIsVUFBVTtRQUNWLE9BQU87UUFDUCxPQUFPO1FBQ1AsYUFBYTtRQUNiLE1BQU07UUFDTixPQUFPO1FBQ1AsU0FBUztLQUNWLENBQUM7SUFDRixrQ0FBa0MsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzFELENBQUM7S0FDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7SUFDakUsT0FBTyxFQUNMLG1OQUFtTjtDQUN0TixDQUFDLENBQUM7QUFJTCwrREFBK0Q7QUFDL0QsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lB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QW9CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuRCw0QkFBNEIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3JELENBQUMsQ0FBQztBQUVILDZEQUE2RDtBQUM3RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0NBQ3hCLENBQUMsQ0FBQztBQUtILGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLGtCQUFrQixFQUFFLHdCQUF3QjtJQUM1QyxhQUFhLEVBQUUsbUJBQW1CO0lBQ2xDLFlBQVksRUFBRSxrQkFBa0I7SUFDaEMsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixpQkFBaUIsRUFBRSx1QkFBdUI7SUFDMUMsY0FBYyxFQUFFLG9CQUFvQjtJQUNwQyxhQUFhLEVBQUUsbUJBQW1CO0lBQ2xDLHlCQUF5QixFQUFFLCtCQUErQjtJQUMxRCw0QkFBNEIsRUFBRSxrQ0FBa0M7Q0FDakUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgUXVlcnksIEFydGljbGUgYXMgUmVjb3JkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBSYXdNZXNzYWdlQ29udGVudCB9IGZyb20gXCIuL3R5cGVzL21lc3NhZ2UtY29udGVudC50eXBlc1wiO1xuaW1wb3J0IHsgTWVzc2FnZUltYWdlUmVmZXJlbmNlIH0gZnJvbSBcIi4vdHlwZXMvbWVzc2FnZS1yZWZlcmVuY2UudHlwZXNcIjtcblxuLyoqXG4gKiBJbmRpdmlkdWFsIG1lc3NhZ2Ugc2VudCAmIHJldHVybmVkIGJ5IHRoZSBDaGF0R1BUIEFQSS5cbiAqIElmIHRoaXMgbWVzc2FnZSBpcyBhbiBhdHRhY2htZW50LCB3ZSBhdHRhY2ggdGhlIG1pbmltYWxcbiAqIGluZm9ybWF0aW9uIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGlzIGF0dGFjaG1lbnQgKFJhd0F0dGFjaG1lbnQpXG4gKiBhcyB3ZWxsIGFzIHRoZSByZWZlcmVuY2UgaWQgY29tcHV0ZWQgYXQgdGhlIG1vbWVudCBvZiBzZW5kaW5nXG4gKiB0aGUgYXR0YWNobWVudCB0byB0aGUgQVBJLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd01lc3NhZ2Uge1xuICByb2xlOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IFJhd01lc3NhZ2VDb250ZW50O1xuICAvLyBVc2VkIG9ubHkgYnkgV1BTIHRvIGJlIHJlbW92ZWRcbiAgLy8gaHR0cHM6Ly9zaW5lcXVhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0VTLTIzNzEwXG4gIG1lc3NhZ2VUeXBlPzogXCJDSEFSVFwiIHwgXCJNQVJLRE9XTlwiO1xuICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBIGNoYXQgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZCB0byBpbmNsdWRlIHRoZSBtYXJrZG93bi1mb3JtYXR0ZWRcbiAqIGNvbnRlbnQgZm9yIGRpc3BsYXksIGFzIHdlbGwgYXMgZGV0YWlsZWQgYXR0YWNobWVudCBkYXRhLCBhbmQgb3B0aW9uYWxseVxuICogYSBsaXN0IG9mIHRoZSByZWZlcmVuY2VzIGV4dHJhY3RlZCBmcm9tIHRoYXQgbWVzc2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIGV4dGVuZHMgUmF3TWVzc2FnZSB7XG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gICAgZGlzcGxheT86IGJvb2xlYW47XG4gICAgJHByb2dyZXNzPzogQ2hhdFByb2dyZXNzW107XG4gICAgJGF0dGFjaG1lbnQ/OiBDaGF0Q29udGV4dEF0dGFjaG1lbnRbXTtcbiAgICAkc3VnZ2VzdGVkQWN0aW9uPzogU3VnZ2VzdGVkQWN0aW9uW107XG4gICAgJGRlYnVnPzogRGVidWdNZXNzYWdlW107XG4gICAgZm9yY2VkV29ya2Zsb3c/OiBzdHJpbmc7XG4gICAgZm9yY2VkV29ya2Zsb3dQcm9wZXJ0aWVzPzogYW55O1xuICAgIHF1ZXJ5PzogUXVlcnk7XG4gICAgaXNVc2VySW5wdXQ/OiBib29sZWFuO1xuICAgIHVzYWdlTWV0cmljcz86IENoYXRVc2FnZU1ldHJpY3M7XG4gICAgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllcz86IGFueTtcbiAgICAkbGlrZWQ/OiBib29sZWFuO1xuICAgICRkaXNsaWtlZD86IGJvb2xlYW47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRQcm9ncmVzcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIGRvbmU/OiBib29sZWFuO1xuICB0aW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhd0F0dGFjaG1lbnQge1xuICAvKiogVHlwZSBvZiB0aGUgYXR0YWNobWVudCAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBSZWNvcmQgaWQgZnJvbSB3aGljaCB0aGlzIGF0dGFjaG1lbnQgaXMgdGFrZW4gKi9cbiAgcmVjb3JkSWQ6IHN0cmluZztcbiAgLyoqIFJlY29yZCBmcm9tIHdoaWNoIHRoaXMgdGhpcyBhdHRhY2htZW50IGlzIHRha2VuICovXG4gIHJlY29yZDogUmVjb3JkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50UGFydCB7XG4gIHBhcnRJZDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbiAgaW1hZ2VzPzogc3RyaW5nW10gfCBNZXNzYWdlSW1hZ2VSZWZlcmVuY2VbXTtcbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRQYWdlID0ge1xuICB1cmw6IHN0cmluZztcbiAgbWltZVR5cGU6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgb2ZmU2V0PzogbnVtYmVyO1xuICBwYWdlTnVtYmVyPzogbnVtYmVyO1xuICByZW1hcHBlZExlbmd0aD86IG51bWJlcjtcbiAgcmVtYXBwZWRPZmZzZXQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb250ZXh0QXR0YWNobWVudCBleHRlbmRzIFJhd0F0dGFjaG1lbnQge1xuICAvKiogVHlwZSBvZiB0aGUgYXR0YWNobWVudCAqL1xuICB0eXBlOiBcIkNvbnRleHRcIjtcbiAgLyoqIFJhbmsgb2YgdGhlIGF0dGFjaG1lbnQgaW4gdGhlIGNvbnRleHQgbWVzc2FnZSAqL1xuICBjb250ZXh0SWQ6IG51bWJlcjtcbiAgLyoqIFBhcnRzIG9mIHRoZSByZWNvcmQgdGhhdCB0aGUgYXNzaXN0YW50IHVzZXMgdG8gYW5zd2VyICovXG4gIHBhcnRzOiBEb2N1bWVudFBhcnRbXTtcbiAgLyoqIFBhZ2VzIG9mIHRoZSBkb2N1bWVudHMgYmFzZWQgb24gdGhlIHF1ZXJ5ICovXG4gIHBhZ2VzPzogRG9jdW1lbnRQYWdlW107XG4gIC8qKiBUaGUgc3BlY2lmaWMgaWQgdXNlZCBvZiB0aGUgcmVmZXJlbmNlZCBwYXJ0ICovXG4gICRwYXJ0SWQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmF3IHJlc3BvbnNlIG9mIHRoZSBjaGF0IEFQSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhd1Jlc3BvbnNlIHtcbiAgaGlzdG9yeTogUmF3TWVzc2FnZVtdO1xuICBleGVjdXRpb25UaW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbnJpY2hlZCByZXNwb25zZSBvZiB0aGUgY2hhdCBBUElcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0UmVzcG9uc2UgZXh0ZW5kcyBSYXdSZXNwb25zZSB7XG4gIGhpc3Rvcnk6IENoYXRNZXNzYWdlW107XG59XG5cbi8qKlxuICogUmVzcG9uc2Ugb2YgdGhlIExpc3RNb2RlbHMgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xsbU1vZGVsRGVzY3JpcHRpb24ge1xuICBwcm92aWRlcjogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBlbmFibGU6IGJvb2xlYW47XG4gIG1heEdlbmVyYXRpb25TaXplOiBudW1iZXI7XG4gIGNvbnRleHRXaW5kb3dTaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzcG9uc2Ugb2YgdGhlIExpc3RGdW5jdGlvbnMgQVBJXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2xsbUZ1bmN0aW9uIHtcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHBhcmFtZXRlcnM6IEdsbG1GdW5jdGlvblBhcmFtZXRlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsbG1GdW5jdGlvblBhcmFtZXRlciB7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1pbmltYWwgcmVwcmVzZW50YXRpb24gb2YgYSBzYXZlZCBjaGF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZWRDaGF0IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgbW9kaWZpZWRVVEM6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEYXRhIHN0cnVjdHVyZSBzYXZlZCB0byByZWNvbnN0cnVjdCBhIHNhdmVkIGNoYXQgY29udmVyc2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZWRDaGF0SGlzdG9yeSBleHRlbmRzIFNhdmVkQ2hhdCB7XG4gIGhpc3Rvcnk6IENoYXRNZXNzYWdlW107XG59XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY29ubmVjdGlvblNldHRpbmdzIG9iamVjdFxuZXhwb3J0IGNvbnN0IGNvbm5lY3Rpb25TZXR0aW5nc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgY29ubmVjdGlvbkVycm9yTWVzc2FnZTogei5zdHJpbmcoKSxcbiAgICByZXN0RW5kcG9pbnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB3ZWJzb2NrZXRFbmRwb2ludDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNpZ25hbFJTa2lwTmVnb3RpYXRpb246IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgc2lnbmFsUlRyYW5zcG9ydDogei5lbnVtKFtcbiAgICAgIFwiV2ViU29ja2V0c1wiLFxuICAgICAgXCJTZXJ2ZXJTZW50RXZlbnRzXCIsXG4gICAgICBcIkxvbmdQb2xsaW5nXCIsXG4gICAgICBcIk5vbmVcIixcbiAgICBdKSxcbiAgICBzaWduYWxSTG9nTGV2ZWw6IHouZW51bShbXG4gICAgICBcIkNyaXRpY2FsXCIsXG4gICAgICBcIkRlYnVnXCIsXG4gICAgICBcIkVycm9yXCIsXG4gICAgICBcIkluZm9ybWF0aW9uXCIsXG4gICAgICBcIk5vbmVcIixcbiAgICAgIFwiVHJhY2VcIixcbiAgICAgIFwiV2FybmluZ1wiLFxuICAgIF0pLFxuICAgIHNpZ25hbFJTZXJ2ZXJUaW1lb3V0SW5NaWxsaXNlY29uZHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnJlZmluZSgoZGF0YSkgPT4gISFkYXRhLnJlc3RFbmRwb2ludCB8fCAhIWRhdGEud2Vic29ja2V0RW5kcG9pbnQsIHtcbiAgICBtZXNzYWdlOlxuICAgICAgXCJCYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQoKSBwcm90b2NvbCAoJ1JFU1QnIG9yICdXRUJTT0NLRVQnKSB0byB0aGUgQ2hhdCBDb21wb25lbnQsIGVpdGhlciAncmVzdEVuZHBvaW50JyBvciAnd2Vic29ja2V0RW5kcG9pbnQnIHByb3BlcnR5IHNob3VsZCBiZSBwcm92aWRlZCBpbiB0aGUgJ2dsb2JhbFNldHRpbmdzJyBvZiB0aGUgYXNzaXN0YW50IGluc3RhbmNlLlwiLFxuICB9KTtcbi8vIERlZmluZSB0aGUgQ29ubmVjdGlvblNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblNldHRpbmdzID0gei5pbmZlcjx0eXBlb2YgY29ubmVjdGlvblNldHRpbmdzU2NoZW1hPjtcblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBzZXJ2aWNlU2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBzZXJ2aWNlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlcnZpY2VfaWQ6IHouc3RyaW5nKCksXG4gIG1vZGVsX2lkOiB6LnN0cmluZygpLFxuICB0ZW1wZXJhdHVyZTogei5udW1iZXIoKSxcbiAgdG9wX3A6IHoubnVtYmVyKCksXG4gIG1heF90b2tlbnM6IHoubnVtYmVyKCksXG59KTtcbi8vIERlZmluZSB0aGUgU2VydmljZVNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU2V0dGluZ3NcbiAgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBzZXJ2aWNlU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWRkaXRpb25hbFNlcnZpY2VTZXR0aW5ncyBvYmplY3RcbmNvbnN0IGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7fSk7XG4vLyBEZWZpbmUgdGhlIEFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3MgaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NcbiAgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBhZGRpdGlvbmFsU2VydmljZVNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXMgb2JqZWN0XG5jb25zdCBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzU2NoZW1hID0gei5vYmplY3Qoe30pO1xuLy8gRGVmaW5lIHRoZSBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBhZGRpdGlvbmFsV29ya2Zsb3dQcm9wZXJ0aWVzXG4gIGV4dGVuZHMgei5pbmZlcjx0eXBlb2YgYWRkaXRpb25hbFdvcmtmbG93UHJvcGVydGllc1NjaGVtYT4ge31cblxuLy8gRGVmaW5lIHRoZSBab2QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB1aVNldHRpbmdzIG9iamVjdFxuY29uc3QgdWlTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGlzcGxheTogei5ib29sZWFuKCksXG4gIHNlcnZpY2VzTW9kZWxzOiB6LmJvb2xlYW4oKSxcbiAgZnVuY3Rpb25zOiB6LmJvb2xlYW4oKSxcbiAgdGVtcGVyYXR1cmU6IHouYm9vbGVhbigpLFxuICB0b3BfcDogei5ib29sZWFuKCksXG4gIG1heF90b2tlbnM6IHouYm9vbGVhbigpLFxuICBkZWJ1Zzogei5ib29sZWFuKCksXG4gIGRpc3BsYXlTeXN0ZW1Qcm9tcHQ6IHouYm9vbGVhbigpLFxuICBkaXNwbGF5VXNlclByb21wdDogei5ib29sZWFuKCksXG59KTtcbi8vIERlZmluZSB0aGUgVWlTZXR0aW5ncyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgVWlTZXR0aW5ncyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHVpU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZGVmYXVsdFZhbHVlcyBvYmplY3RcbmNvbnN0IGRlZmF1bHRWYWx1ZXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlcnZpY2VfaWQ6IHouc3RyaW5nKCksXG4gIG1vZGVsX2lkOiB6LnN0cmluZygpLFxuICBmdW5jdGlvbnM6IHouYXJyYXkoXG4gICAgei5vYmplY3Qoe1xuICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIGVuYWJsZWQ6IHouYm9vbGVhbigpLFxuICAgIH0pXG4gICksXG4gIHRlbXBlcmF0dXJlOiB6Lm51bWJlcigpLFxuICB0b3BfcDogei5udW1iZXIoKSxcbiAgbWF4X3Rva2Vuczogei5udW1iZXIoKSxcbiAgZGVidWc6IHouYm9vbGVhbigpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCksXG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG59KTtcbi8vIERlZmluZSB0aGUgRGVmYXVsdFZhbHVlcyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdFZhbHVlcyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIGRlZmF1bHRWYWx1ZXNTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgYWN0aW9uIG9iamVjdFxuY29uc3QgYWN0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICBmb3JjZWRXb3JrZmxvdzogei5zdHJpbmcoKSwgLy8gZm9yY2VkV29ya2Zsb3cgbXVzdCBiZSBhIHN0cmluZ1xuICBmb3JjZWRXb3JrZmxvd1Byb3BlcnRpZXM6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLCAvLyBmb3JjZWRXb3JrZmxvd1Byb3BlcnRpZXMgbXVzdCBiZSBhbiBvYmplY3QgKE1hcCBlcXVpdmFsZW50KVxufSk7XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbW9kZVNldHRpbmdzIG9iamVjdFxuY29uc3QgaW5pdGlhbGl6YXRpb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGV2ZW50OiB6LmVudW0oW1wiUXVlcnlcIiwgXCJQcm9tcHRcIl0pLFxuICAgIGZvcmNlZFdvcmtmbG93OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZm9yY2VkRnVuY3Rpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkaXNwbGF5VXNlclF1ZXJ5OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KVxuICAvLyDinYwgUnVsZSAxOiBDYW5ub3QgaGF2ZSBib3RoIGZvcmNlZFdvcmtmbG93IGFuZCBmb3JjZWRGdW5jdGlvblxuICAucmVmaW5lKFxuICAgIChkYXRhKSA9PlxuICAgICAgZGF0YS5ldmVudCAhPT0gXCJRdWVyeVwiIHx8ICEoZGF0YS5mb3JjZWRXb3JrZmxvdyAmJiBkYXRhLmZvcmNlZEZ1bmN0aW9uKSxcbiAgICB7XG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIkJvdGggJ2ZvcmNlZEZ1bmN0aW9uJyBhbmQgJ2ZvcmNlZFdvcmtmbG93JyBwcm9wZXJ0aWVzIGFyZSBzZXQsIGJ1dCB0aGV5IHNob3VsZCBub3QuXCIsXG4gICAgfVxuICApXG4gIC8vIOKdjCBSdWxlIDI6IE11c3QgaGF2ZSBvbmUgb2YgZm9yY2VkV29ya2Zsb3cgb3IgZm9yY2VkRnVuY3Rpb24gd2hlbiBldmVudCBpcyAnUXVlcnknXG4gIC5yZWZpbmUoXG4gICAgKGRhdGEpID0+XG4gICAgICBkYXRhLmV2ZW50ICE9PSBcIlF1ZXJ5XCIgfHwgISFkYXRhLmZvcmNlZFdvcmtmbG93IHx8ICEhZGF0YS5mb3JjZWRGdW5jdGlvbixcbiAgICB7XG4gICAgICBtZXNzYWdlOlxuICAgICAgICBcIk9uZSBvZiAnZm9yY2VkV29ya2Zsb3cnIG9yICdmb3JjZWRGdW5jdGlvbicgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHRoZSBpbml0aWFsaXphdGlvbidzIGV2ZW50IGlzICdRdWVyeScuXCIsXG4gICAgfVxuICApXG4gIC8vIOKdjCBSdWxlIDM6IE11c3QgaGF2ZSBkaXNwbGF5VXNlclF1ZXJ5IHNldCB3aGVuIGV2ZW50IGlzICdRdWVyeSdcbiAgLnJlZmluZShcbiAgICAoZGF0YSkgPT5cbiAgICAgIGRhdGEuZXZlbnQgIT09IFwiUXVlcnlcIiB8fFxuICAgICAgKGRhdGEuZGlzcGxheVVzZXJRdWVyeSAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZGlzcGxheVVzZXJRdWVyeSAhPT0gbnVsbCksXG4gICAge1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCInZGlzcGxheVVzZXJRdWVyeScgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHRoZSBpbml0aWFsaXphdGlvbidzIGV2ZW50IGlzICdRdWVyeScuXCIsXG4gICAgfVxuICApO1xuXG5jb25zdCBtb2RlU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuYWJsZWRVc2VySW5wdXQ6IHouYm9vbGVhbigpLFxuICBkaXNwbGF5VXNlclByb21wdDogei5ib29sZWFuKCksXG4gIHNlbmRVc2VyUHJvbXB0OiB6LmJvb2xlYW4oKSxcbiAgaW5pdGlhbGl6YXRpb246IGluaXRpYWxpemF0aW9uU2NoZW1hLFxuICBhY3Rpb25zOiB6LnJlY29yZChhY3Rpb25TY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcbi8vIERlZmluZSB0aGUgTW9kZVNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBNb2RlU2V0dGluZ3MgZXh0ZW5kcyB6LmluZmVyPHR5cGVvZiBtb2RlU2V0dGluZ3NTY2hlbWE+IHt9XG5cbi8vIERlZmluZSB0aGUgWm9kIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgc2F2ZWRDaGF0U2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBzYXZlZENoYXRTZXR0aW5nc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5hYmxlZDogei5ib29sZWFuKCksXG4gIGRpc3BsYXk6IHouYm9vbGVhbigpLFxufSk7XG4vLyBEZWZpbmUgdGhlIFNhdmVkQ2hhdFNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTYXZlZENoYXRTZXR0aW5nc1xuICBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGdsb2JhbFNldHRpbmdzIG9iamVjdFxuY29uc3QgZ2xvYmFsU2V0dGluZ3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNlYXJjaFdhcm5pbmdNZXNzYWdlOiB6LnN0cmluZygpLFxuICBkaXNjbGFpbWVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGdlbmVyaWNDaGF0RXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXlVc2VyUXVvdGFDb25zdW1wdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheUNoYXRUb2tlbnNDb25zdW1wdGlvbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGF1ZGl0U2V0dGluZ3Mgb2JqZWN0XG5jb25zdCBhdWRpdFNldHRpbmdzU2NoZW1hID0gei5vYmplY3Qoe1xuICBpc3N1ZVR5cGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGxvZ0NvbnRlbnQ6IHouYm9vbGVhbigpLFxufSk7XG4vLyBEZWZpbmUgdGhlIFNhdmVkQ2hhdFNldHRpbmdzIGludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTYXZlZENoYXRTZXR0aW5nc1xuICBleHRlbmRzIHouaW5mZXI8dHlwZW9mIHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hPiB7fVxuXG4vLyBEZWZpbmUgdGhlIFpvZCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGVudGlyZSBDaGF0Q29uZmlnIG9iamVjdFxuZXhwb3J0IGNvbnN0IGNoYXRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3Rpb25TZXR0aW5nczogY29ubmVjdGlvblNldHRpbmdzU2NoZW1hLFxuICBkZWZhdWx0VmFsdWVzOiBkZWZhdWx0VmFsdWVzU2NoZW1hLFxuICBtb2RlU2V0dGluZ3M6IG1vZGVTZXR0aW5nc1NjaGVtYSxcbiAgdWlTZXR0aW5nczogdWlTZXR0aW5nc1NjaGVtYSxcbiAgc2F2ZWRDaGF0U2V0dGluZ3M6IHNhdmVkQ2hhdFNldHRpbmdzU2NoZW1hLFxuICBnbG9iYWxTZXR0aW5nczogZ2xvYmFsU2V0dGluZ3NTY2hlbWEsXG4gIGF1ZGl0U2V0dGluZ3M6IGF1ZGl0U2V0dGluZ3NTY2hlbWEsXG4gIGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3M6IGFkZGl0aW9uYWxTZXJ2aWNlU2V0dGluZ3NTY2hlbWEsXG4gIGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXM6IGFkZGl0aW9uYWxXb3JrZmxvd1Byb3BlcnRpZXNTY2hlbWEsXG59KTtcbi8vIERlZmluZSB0aGUgQ2hhdENvbmZpZyBpbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbmZpZyBleHRlbmRzIHouaW5mZXI8dHlwZW9mIGNoYXRDb25maWdTY2hlbWE+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFBheWxvYWQge1xuICBkZWJ1ZzogYm9vbGVhbjtcbiAgZnVuY3Rpb25zOiBzdHJpbmdbXTtcbiAgaGlzdG9yeTogQ2hhdE1lc3NhZ2VbXTtcbiAgc2VydmljZVNldHRpbmdzOiBTZXJ2aWNlU2V0dGluZ3M7XG4gIGFwcFF1ZXJ5OiB7XG4gICAgYXBwOiBzdHJpbmc7XG4gICAgcXVlcnk6IFF1ZXJ5IHwgdW5kZWZpbmVkO1xuICAgIHRhcmdldFVybD86IHN0cmluZztcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgfTtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICBjaGF0SWQ6IHN0cmluZztcbiAgZ2VuZXJpY0NoYXRFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbk1lc3NhZ2UgPSB7XG4gIGd1aWQ6IHN0cmluZztcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGRpc3BsYXlWYWx1ZT86IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dENodW5rc09wdGlvbnMge1xuICBleHRlbmRNb2RlPzogXCJOb25lXCIgfCBcIlNlbnRlbmNlXCIgfCBcIkNoYXJzXCI7XG4gIGV4dGVuZFNjb3BlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhIHtcbiAgbGFzdFJlcXVlc3Q6IHN0cmluZztcbiAgcHJvbXB0VG9rZW5Db3VudDogbnVtYmVyO1xuICBjb21wbGV0aW9uVG9rZW5Db3VudDogbnVtYmVyO1xuICBwZXJpb2RUb2tlbnM6IG51bWJlcjtcbiAgcmVzZXRIb3VyczogbnVtYmVyO1xuICB0b2tlbkNvdW50OiBudW1iZXI7XG4gIG5leHRSZXNldDogc3RyaW5nO1xuICBsYXN0UmVzZXRVVEM6IHN0cmluZztcbiAgbmV4dFJlc2V0VVRDOiBzdHJpbmc7XG4gIG1heFF1b3RhUmVhY2hlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWdnZXN0ZWRBY3Rpb24ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0Q2hhdCB7XG4gIG1lc3NhZ2VzOiBSYXdNZXNzYWdlW107XG59XG5cbi8qKlxuICogTGlzdCBvZiBldmVudHMgZGF0YSB0aGF0IGNhbiBiZSBlbWl0dGVkIGJ5IHRoZSB3ZWJzb2NrZXQgY2hhdCBlbmRwb2ludFxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRBY3Rpb25zRXZlbnQgPSB7IHN1Z2dlc3RlZEFjdGlvbnM6IFN1Z2dlc3RlZEFjdGlvbltdIH07XG5leHBvcnQgdHlwZSBRdW90YUV2ZW50ID0geyBxdW90YTogUXVvdGEgfTtcbmV4cG9ydCB0eXBlIE1lc3NhZ2VFdmVudCA9IHsgZGVsdGE6IHN0cmluZzsgbWVzc2FnZUlkOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIENvbnRleHRNZXNzYWdlRXZlbnQgPSB7IGNvbnRlbnQ6IHN0cmluZzsgYWRkaXRpb25hbFByb3BlcnRpZXM6IENoYXRDb250ZXh0QXR0YWNobWVudCB9O1xuZXhwb3J0IHR5cGUgRXJyb3JFdmVudCA9IHN0cmluZztcbmV4cG9ydCB0eXBlIEFjdGlvblN0YXJ0RXZlbnQgPSB7IGd1aWQ6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgQWN0aW9uUmVzdWx0RXZlbnQgPSB7IGd1aWQ6IHN0cmluZzsgZGlzcGxheVZhbHVlOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIEFjdGlvblN0b3BFdmVudCA9IHsgZ3VpZDogc3RyaW5nOyBleGVjdXRpb25UaW1lOiBudW1iZXIgfTtcbmV4cG9ydCB0eXBlIEhpc3RvcnlFdmVudCA9IHsgaGlzdG9yeTogUmF3TWVzc2FnZVtdOyBleGVjdXRpb25UaW1lOiBzdHJpbmc7IGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM/OiBudW1iZXIgfTtcbmV4cG9ydCB0eXBlIERlYnVnTWVzc2FnZUV2ZW50ID0gRGVidWdNZXNzYWdlO1xuXG4vKipcbiAqIERhdGEgZW1pdHRlZCBieSB0aGUgaHR0cCBjaGF0IGVuZHBvaW50XG4gKi9cbmV4cG9ydCB0eXBlIEh0dHBDaGF0UmVzcG9uc2UgPSB7XG4gIHF1b3RhOiBRdW90YTtcbiAgc3VnZ2VzdGVkQWN0aW9uczogU3VnZ2VzdGVkQWN0aW9uW107XG4gIGRlYnVnOiBhbnk7XG4gIGNvbnRleHQ6IHsgY29udGVudDogc3RyaW5nOyBhZGRpdGlvbmFsUHJvcGVydGllczogQ2hhdENvbnRleHRBdHRhY2htZW50IH1bXTtcbiAgYWN0aW9uczogQWN0aW9uTWVzc2FnZVtdO1xuICBoaXN0b3J5OiBSYXdNZXNzYWdlW107XG4gIGV4ZWN1dGlvblRpbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kczogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlbkNvbnN1bXB0aW9uIHtcbiAgcGVyY2VudGFnZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUb2tlbkNvbnN1bXB0aW9uIGV4dGVuZHMgVG9rZW5Db25zdW1wdGlvbiB7XG4gIG5leHRSZXNldERhdGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0VXNhZ2VNZXRyaWNzIHtcbiAgdG90YWxUb2tlbkNvdW50OiBudW1iZXI7XG4gIHByb21wdFRva2VuQ291bnQ6IG51bWJlcjtcbiAgY29tcGxldGlvblRva2VuQ291bnQ6IG51bWJlcjtcbiAgdG9rZW5pemVyVHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEt2T2JqZWN0IHtcbiAgZGF0YToge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7IC8vIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgfTtcbiAgdHlwZTogXCJLVlwiO1xuICBpc0Vycm9yOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RPYmplY3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwiTElTVFwiO1xuICBpc0Vycm9yOiBib29sZWFuO1xuICBpdGVtczogKEt2T2JqZWN0IHwgTGlzdE9iamVjdClbXTtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERlYnVnTWVzc2FnZSA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgY2hhdElkOiBzdHJpbmc7XG4gIGV4ZWN1dGlvbklkOiBzdHJpbmc7XG4gIGRlYnVnTWVzc2FnZUlkOiBzdHJpbmc7XG4gICRleHBhbmRlZD86IGJvb2xlYW47XG4gICRsb2FkaW5nPzogYm9vbGVhbjtcbiAgJGRldGFpbHM/OiBMaXN0T2JqZWN0W107XG59XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyPFQ+ID0ge1xuICBoYW5kbGVyOiAoZGF0YTogVCkgPT4gdm9pZDtcbiAgaXNHbG9iYWxIYW5kbGVyOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBEYXRhIGVtaXR0ZWQgYnkgdGhlIHNhdmVkIGNoYXQgZW5kcG9pbnRzXG4gKi9cbmV4cG9ydCB0eXBlIERlbGV0ZVNhdmVkQ2hhdFJlc3BvbnNlID0ge1xuICBkZWxldGVDb3VudDogbnVtYmVyO1xuICBleGVjdXRpb25UaW1lOiBzdHJpbmc7XG4gIGV4ZWN1dGlvblRpbWVNaWxsaXNlY29uZHM6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBTYXZlZENoYXRSZXNwb25zZSA9IHtcbiAgc2F2ZWRDaGF0OiBTYXZlZENoYXQ7XG4gIGV4ZWN1dGlvblRpbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uVGltZU1pbGxpc2Vjb25kczogbnVtYmVyO1xufTtcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { CONTINUE, visit } from "unist-util-visit";
2
2
  export const EMBEDDED_IMAGE_NAME = "embedded-image-reference";
3
- const EMBEDDED_IMAGE_REGEX = /\[(Img-(\d+(?:\.\d+)+))((?:\:\d{1,4}){4})?\]/g;
3
+ const EMBEDDED_IMAGE_REGEX = /\[(Img-([0-9]+(?:\.[0-9]+){2}))\]/g;
4
4
  export default function embeddedImageReferencePlugin(tree) {
5
5
  visit(tree, "text", (node, index, parent) => {
6
6
  const refs = Array.from(node.value.matchAll(EMBEDDED_IMAGE_REGEX));
@@ -21,7 +21,6 @@ function getContentNodes(node, refs) {
21
21
  acc.push({
22
22
  type: EMBEDDED_IMAGE_NAME,
23
23
  value: ref[2],
24
- boundingBox: ref[3],
25
24
  end: ref.index + ref[0].length,
26
25
  });
27
26
  return acc;
@@ -54,4 +53,4 @@ function handleTrailingText(node, refs, nodes) {
54
53
  });
55
54
  }
56
55
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3VuaWZpZWQtcGx1Z2lucy9lbWJlZGRlZC1pbWFnZS1yZWZlcmVuY2UucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMEJBQTBCLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRywrQ0FBK0MsQ0FBQztBQUU3RSxNQUFNLENBQUMsT0FBTyxVQUFVLDRCQUE0QixDQUFDLElBQVU7SUFDN0QsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUUzQyxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELFNBQVMsZUFBZSxDQUFDLElBQVUsRUFBRSxJQUF1QjtJQUMxRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25DLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxtQkFBbUI7WUFDekIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuQixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNLLENBQUMsQ0FBQztRQUV2QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFtQyxDQUFjLENBQUM7SUFFckQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV0QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxpQkFBaUIsQ0FDeEIsR0FBa0MsRUFDbEMsSUFBVSxFQUNWLEdBQW9CO0lBRXBCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0QsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFdBQVc7WUFDbEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1NBQ2MsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxrREFBa0Q7QUFDbEQsU0FBUyxrQkFBa0IsQ0FDekIsSUFBVSxFQUNWLElBQXVCLEVBQ3ZCLEtBQWdCO0lBRWhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUN2QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQ3pDLENBQUM7SUFFRixJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsWUFBWTtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQ00sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudCwgUGFyZW50LCBUZXh0IH0gZnJvbSBcIm1kYXN0XCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcInVuaXN0XCI7XG5pbXBvcnQgeyBDT05USU5VRSwgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiO1xuXG5leHBvcnQgY29uc3QgRU1CRURERURfSU1BR0VfTkFNRSA9IFwiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlXCI7XG5jb25zdCBFTUJFRERFRF9JTUFHRV9SRUdFWCA9IC9cXFsoSW1nLShcXGQrKD86XFwuXFxkKykrKSkoKD86XFw6XFxkezEsNH0pezR9KT9cXF0vZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1iZWRkZWRJbWFnZVJlZmVyZW5jZVBsdWdpbih0cmVlOiBOb2RlKSB7XG4gIHZpc2l0KHRyZWUsIFwidGV4dFwiLCAobm9kZTogVGV4dCwgaW5kZXg6IG51bWJlciwgcGFyZW50OiBQYXJlbnQpID0+IHtcbiAgICBjb25zdCByZWZzID0gQXJyYXkuZnJvbShub2RlLnZhbHVlLm1hdGNoQWxsKEVNQkVEREVEX0lNQUdFX1JFR0VYKSk7XG5cbiAgICBpZiAocmVmcy5sZW5ndGggPT09IDApIHJldHVybiBDT05USU5VRTtcblxuICAgIGNvbnN0IG5vZGVzID0gZ2V0Q29udGVudE5vZGVzKG5vZGUsIHJlZnMpO1xuXG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIENPTlRJTlVFO1xuXG4gICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4ubm9kZXMpO1xuXG4gICAgcmV0dXJuIGluZGV4ICsgbm9kZXMubGVuZ3RoO1xuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn1cblxuLyoqIFRyYW5zZm9ybSBub2RlIHRleHQgY29udGVudCBpbnRvIGEgc2V0IG9mIG5vZGUgKi8gXG5mdW5jdGlvbiBnZXRDb250ZW50Tm9kZXMobm9kZTogVGV4dCwgcmVmczogUmVnRXhwRXhlY0FycmF5W10pOiBDb250ZW50W10ge1xuICBsZXQgbm9kZXMgPSByZWZzLnJlZHVjZSgoYWNjLCByZWYpID0+IHtcbiAgICBoYW5kbGVMZWFkaW5nVGV4dChhY2MsIG5vZGUsIHJlZik7XG5cbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBFTUJFRERFRF9JTUFHRV9OQU1FLFxuICAgICAgdmFsdWU6IHJlZlsyXSxcbiAgICAgIGJvdW5kaW5nQm94OiByZWZbM10sXG4gICAgICBlbmQ6IHJlZi5pbmRleCArIHJlZlswXS5sZW5ndGgsXG4gICAgfSBhcyBhbnkgYXMgQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSk7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSkgYXMgQ29udGVudFtdO1xuXG4gIGhhbmRsZVRyYWlsaW5nVGV4dChub2RlLCByZWZzLCBub2Rlcyk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vKiogQ29tcHV0ZSBsYXN0IGJsb2NrIGVuZGluZyBmb3IgbGVhZGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVMZWFkaW5nVGV4dChcbiAgYWNjOiAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSxcbiAgbm9kZTogVGV4dCxcbiAgcmVmOiBSZWdFeHBFeGVjQXJyYXlcbik6IENvbnRlbnRbXSB7XG4gIGNvbnN0IGxhc3RFbmQgPSBhY2MuYXQoLTEpPy5lbmQgPz8gMDtcbiAgY29uc3QgbGVhZGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhsYXN0RW5kLCByZWYuaW5kZXgpO1xuXG4gIGlmIChsZWFkaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgdmFsdWU6IGxlYWRpbmdUZXh0LFxuICAgICAgZW5kOiByZWYuaW5kZXgsXG4gICAgfSBhcyBDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KTtcbiAgfVxuXG4gIHJldHVybiBhY2M7XG59XG5cbi8qKiBDb21wdXRlIGxhc3QgYmxvY2sgZW5kaW5nIGZvciB0cmFpbGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVUcmFpbGluZ1RleHQoXG4gIG5vZGU6IFRleHQsXG4gIHJlZnM6IFJlZ0V4cEV4ZWNBcnJheVtdLFxuICBub2RlczogQ29udGVudFtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbGFzdEVuZCA9IHJlZnMuYXQoLTEpPy5pbmRleCA/PyAwO1xuICBjb25zdCB0cmFpbGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhcbiAgICBsYXN0RW5kICsgKHJlZnMuYXQoLTEpPy5bMF0ubGVuZ3RoID8/IDApXG4gICk7XG5cbiAgaWYgKHRyYWlsaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIG5vZGVzLnB1c2goe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICB2YWx1ZTogdHJhaWxpbmdUZXh0LFxuICAgICAgZW5kOiBub2RlLnZhbHVlLmxlbmd0aCxcbiAgICB9IGFzIENvbnRlbnQgJiB7IGVuZDogbnVtYmVyIH0pO1xuICB9XG59XG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3VuaWZpZWQtcGx1Z2lucy9lbWJlZGRlZC1pbWFnZS1yZWZlcmVuY2UucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMEJBQTBCLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUVsRSxNQUFNLENBQUMsT0FBTyxVQUFVLDRCQUE0QixDQUFDLElBQVU7SUFDN0QsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUUzQyxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELFNBQVMsZUFBZSxDQUFDLElBQVUsRUFBRSxJQUF1QjtJQUMxRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25DLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxtQkFBbUI7WUFDekIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNLLENBQUMsQ0FBQztRQUV2QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFtQyxDQUFjLENBQUM7SUFFckQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV0QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxpQkFBaUIsQ0FDeEIsR0FBa0MsRUFDbEMsSUFBVSxFQUNWLEdBQW9CO0lBRXBCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0QsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFdBQVc7WUFDbEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1NBQ2MsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxrREFBa0Q7QUFDbEQsU0FBUyxrQkFBa0IsQ0FDekIsSUFBVSxFQUNWLElBQXVCLEVBQ3ZCLEtBQWdCO0lBRWhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUN2QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQ3pDLENBQUM7SUFFRixJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsWUFBWTtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQ00sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudCwgUGFyZW50LCBUZXh0IH0gZnJvbSBcIm1kYXN0XCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcInVuaXN0XCI7XG5pbXBvcnQgeyBDT05USU5VRSwgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiO1xuXG5leHBvcnQgY29uc3QgRU1CRURERURfSU1BR0VfTkFNRSA9IFwiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlXCI7XG5jb25zdCBFTUJFRERFRF9JTUFHRV9SRUdFWCA9IC9cXFsoSW1nLShbMC05XSsoPzpcXC5bMC05XSspezJ9KSlcXF0vZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1iZWRkZWRJbWFnZVJlZmVyZW5jZVBsdWdpbih0cmVlOiBOb2RlKSB7XG4gIHZpc2l0KHRyZWUsIFwidGV4dFwiLCAobm9kZTogVGV4dCwgaW5kZXg6IG51bWJlciwgcGFyZW50OiBQYXJlbnQpID0+IHtcbiAgICBjb25zdCByZWZzID0gQXJyYXkuZnJvbShub2RlLnZhbHVlLm1hdGNoQWxsKEVNQkVEREVEX0lNQUdFX1JFR0VYKSk7XG5cbiAgICBpZiAocmVmcy5sZW5ndGggPT09IDApIHJldHVybiBDT05USU5VRTtcblxuICAgIGNvbnN0IG5vZGVzID0gZ2V0Q29udGVudE5vZGVzKG5vZGUsIHJlZnMpO1xuXG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIENPTlRJTlVFO1xuXG4gICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4ubm9kZXMpO1xuXG4gICAgcmV0dXJuIGluZGV4ICsgbm9kZXMubGVuZ3RoO1xuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn1cblxuLyoqIFRyYW5zZm9ybSBub2RlIHRleHQgY29udGVudCBpbnRvIGEgc2V0IG9mIG5vZGUgKi8gXG5mdW5jdGlvbiBnZXRDb250ZW50Tm9kZXMobm9kZTogVGV4dCwgcmVmczogUmVnRXhwRXhlY0FycmF5W10pOiBDb250ZW50W10ge1xuICBsZXQgbm9kZXMgPSByZWZzLnJlZHVjZSgoYWNjLCByZWYpID0+IHtcbiAgICBoYW5kbGVMZWFkaW5nVGV4dChhY2MsIG5vZGUsIHJlZik7XG5cbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBFTUJFRERFRF9JTUFHRV9OQU1FLFxuICAgICAgdmFsdWU6IHJlZlsyXSxcbiAgICAgIGVuZDogcmVmLmluZGV4ICsgcmVmWzBdLmxlbmd0aCxcbiAgICB9IGFzIGFueSBhcyBDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIChDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KVtdKSBhcyBDb250ZW50W107XG5cbiAgaGFuZGxlVHJhaWxpbmdUZXh0KG5vZGUsIHJlZnMsIG5vZGVzKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbi8qKiBDb21wdXRlIGxhc3QgYmxvY2sgZW5kaW5nIGZvciBsZWFkaW5nIHRleHQgKi9cbmZ1bmN0aW9uIGhhbmRsZUxlYWRpbmdUZXh0KFxuICBhY2M6IChDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KVtdLFxuICBub2RlOiBUZXh0LFxuICByZWY6IFJlZ0V4cEV4ZWNBcnJheVxuKTogQ29udGVudFtdIHtcbiAgY29uc3QgbGFzdEVuZCA9IGFjYy5hdCgtMSk/LmVuZCA/PyAwO1xuICBjb25zdCBsZWFkaW5nVGV4dCA9IG5vZGUudmFsdWUuc3Vic3RyaW5nKGxhc3RFbmQsIHJlZi5pbmRleCk7XG5cbiAgaWYgKGxlYWRpbmdUZXh0ICE9PSBcIlwiKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICB2YWx1ZTogbGVhZGluZ1RleHQsXG4gICAgICBlbmQ6IHJlZi5pbmRleCxcbiAgICB9IGFzIENvbnRlbnQgJiB7IGVuZDogbnVtYmVyIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjYztcbn1cblxuLyoqIENvbXB1dGUgbGFzdCBibG9jayBlbmRpbmcgZm9yIHRyYWlsaW5nIHRleHQgKi9cbmZ1bmN0aW9uIGhhbmRsZVRyYWlsaW5nVGV4dChcbiAgbm9kZTogVGV4dCxcbiAgcmVmczogUmVnRXhwRXhlY0FycmF5W10sXG4gIG5vZGVzOiBDb250ZW50W11cbik6IHZvaWQge1xuICBjb25zdCBsYXN0RW5kID0gcmVmcy5hdCgtMSk/LmluZGV4ID8/IDA7XG4gIGNvbnN0IHRyYWlsaW5nVGV4dCA9IG5vZGUudmFsdWUuc3Vic3RyaW5nKFxuICAgIGxhc3RFbmQgKyAocmVmcy5hdCgtMSk/LlswXS5sZW5ndGggPz8gMClcbiAgKTtcblxuICBpZiAodHJhaWxpbmdUZXh0ICE9PSBcIlwiKSB7XG4gICAgbm9kZXMucHVzaCh7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIHZhbHVlOiB0cmFpbGluZ1RleHQsXG4gICAgICBlbmQ6IG5vZGUudmFsdWUubGVuZ3RoLFxuICAgIH0gYXMgQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,170 @@
1
+ import { Injectable, LOCALE_ID, inject } from "@angular/core";
2
+ import { TranslocoService } from "@jsverse/transloco";
3
+ import { differenceInDays, differenceInMonths, differenceInYears, endOfYesterday, format, isThisMonth, isThisQuarter, isThisWeek, isThisYear, isToday, isYesterday, parseISO, toDate } from "date-fns";
4
+ import * as i0 from "@angular/core";
5
+ export class AssistantUtils {
6
+ constructor() {
7
+ this.localID = inject(LOCALE_ID, { optional: true });
8
+ this.transloco = inject(TranslocoService);
9
+ }
10
+ /**
11
+ * Retrieves the rank (1-based index) of a message within a chat history array based on its message ID.
12
+ * If the message is not found, returns -1.
13
+ *
14
+ * @param array - An array of `ChatMessage` objects or `undefined`. Represents the chat history.
15
+ * @param messageId - The unique identifier of the message to locate.
16
+ * @returns The 1-based index of the message in the array, or -1 if the message is not found.
17
+ */
18
+ getMessageRankInChatHistory(array, messageId) {
19
+ const index = array?.findIndex(m => m.additionalProperties.messageId === messageId) ?? -1;
20
+ return index === -1 ? -1 : index + 1;
21
+ }
22
+ /**
23
+ * Traverse the array from the end and track the first 'assistant' message among the last group of "assistant" messages where display is true
24
+ * @param array The array of ChatMessage to traverse
25
+ * @returns The index of the first visible assistant message among the last group of "assistant" messages in the array
26
+ */
27
+ firstVisibleAssistantMessageIndex(array) {
28
+ if (!array) {
29
+ return -1;
30
+ }
31
+ let index = array.length - 1;
32
+ let firstVisibleAssistantMessageIndex = -1;
33
+ while (index >= 0 && array[index].role === 'assistant') {
34
+ if (array[index].additionalProperties.display === true) {
35
+ firstVisibleAssistantMessageIndex = index;
36
+ }
37
+ index--;
38
+ }
39
+ return firstVisibleAssistantMessageIndex;
40
+ }
41
+ /**
42
+ * Traverse the array from the end and pick the last 'assistant' message among the last group of "assistant" messages where display is true
43
+ * @param array The array of ChatMessage to traverse
44
+ * @returns The index of the last visible assistant message among the last group of "assistant" messages in the array
45
+ */
46
+ lastVisibleAssistantMessageIndex(array) {
47
+ if (!array) {
48
+ return -1;
49
+ }
50
+ let index = array.length - 1;
51
+ let lastVisibleAssistantMessageIndex = -1;
52
+ while (index >= 0 && array[index].role === 'assistant') {
53
+ if (array[index].additionalProperties.display === true) {
54
+ lastVisibleAssistantMessageIndex = index;
55
+ break;
56
+ }
57
+ index--;
58
+ }
59
+ return lastVisibleAssistantMessageIndex;
60
+ }
61
+ /**
62
+ * Format a date string in UTC to a local date string
63
+ * @param value Date string in UTC to format
64
+ * @returns A formatted local date string
65
+ */
66
+ formatDateTime(value) {
67
+ const localDate = toDate(parseISO(value));
68
+ const formatter = new Intl.DateTimeFormat(undefined, {
69
+ year: 'numeric',
70
+ month: 'short',
71
+ day: 'numeric',
72
+ hour: '2-digit',
73
+ minute: '2-digit',
74
+ second: '2-digit',
75
+ timeZoneName: 'short'
76
+ });
77
+ return formatter.format(localDate);
78
+ }
79
+ /**
80
+ * Takes a text prompt that may contain placeholders for variables
81
+ * and replaces these placeholders if it finds a match in the given
82
+ * context object.
83
+ *
84
+ * @example
85
+ * const p = "Hello, [[user.name]]! You have [[user.notifications.length]] new notifications.";
86
+ * const context = {
87
+ * user: {
88
+ * name: "Alice",
89
+ * notifications: ["Message from Bob", "Reminder for meeting"]
90
+ * }
91
+ * };
92
+ * const formattedPrompt = formatPrompt(p, context);
93
+ * console.log(formattedPrompt); // Output: "Hello, Alice! You have 2 new notifications."
94
+ */
95
+ static formatPrompt(prompt, context) {
96
+ return prompt.replace(/\[\[(.*?)\]\]/g, (match, expr) => {
97
+ // Simple dot notation resolver
98
+ const keys = expr.trim().split(".");
99
+ let value = context;
100
+ for (const key of keys) {
101
+ if (value && typeof value === "object" && key in value) {
102
+ value = value[key];
103
+ }
104
+ else {
105
+ return match;
106
+ }
107
+ }
108
+ return value ?? match;
109
+ });
110
+ }
111
+ /**
112
+ * Determines a time-based key for a given date to be used for translations or formatting.
113
+ * The key represents a relative time period such as "today", "yesterday", "this week", etc.
114
+ * If the date does not fall into any predefined relative time period, it returns the year as a string.
115
+ *
116
+ * @param date - The date for which the time key is to be determined.
117
+ * @returns A string representing the time key, which can be used for translation or display purposes.
118
+ */
119
+ getTimeKey(date) {
120
+ if (isToday(date)) {
121
+ return this.transloco.translate('chat.today');
122
+ }
123
+ else if (isYesterday(date)) {
124
+ return this.transloco.translate('chat.yesterday');
125
+ }
126
+ else if (isThisWeek(date)) {
127
+ return this.transloco.translate('chat.thisWeek');
128
+ }
129
+ else if (differenceInDays(endOfYesterday(), date) <= 7) {
130
+ return this.transloco.translate('chat.lastWeek');
131
+ }
132
+ else if (isThisMonth(date)) {
133
+ return this.transloco.translate('chat.thisMonth');
134
+ }
135
+ else if (differenceInMonths(endOfYesterday(), date) <= 1) {
136
+ return this.transloco.translate('chat.lastMonth');
137
+ }
138
+ else if (isThisQuarter(date)) {
139
+ return this.transloco.translate('chat.thisQuarter');
140
+ }
141
+ else if (differenceInMonths(endOfYesterday(), date) <= 3) {
142
+ return this.transloco.translate('chat.lastQuarter');
143
+ }
144
+ else if (isThisYear(date)) {
145
+ return this.transloco.translate('chat.thisYear');
146
+ }
147
+ else if (differenceInYears(endOfYesterday(), date) === 1) {
148
+ return this.transloco.translate('chat.lastYear');
149
+ }
150
+ else {
151
+ return format(date, 'yyyy');
152
+ }
153
+ }
154
+ /**
155
+ * Get the current locale name.
156
+ * @returns The current locale name or an empty string if not available.
157
+ */
158
+ getCurrentLocaleName() {
159
+ return this.localID || '';
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantUtils, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantUtils, providedIn: 'root' }); }
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantUtils, decorators: [{
165
+ type: Injectable,
166
+ args: [{
167
+ providedIn: 'root'
168
+ }]
169
+ }] });
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3V0aWxzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsTUFBTSxFQUNOLFdBQVcsRUFDWCxhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEVBQ1AsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUM7O0FBTWxCLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1csWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNwQyxjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0F1SnpEO0lBckpDOzs7Ozs7O09BT0c7SUFDSCwyQkFBMkIsQ0FBQyxLQUErQixFQUFFLFNBQWlCO1FBQzVFLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlDQUFpQyxDQUFDLEtBQStCO1FBQy9ELElBQUks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QUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkQsQ0FBQzthQUFNLElBQUksaUJBQWlCLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVIOzs7T0FHRztJQUNILG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7K0dBekpVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTE9DQUxFX0lELCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gXCJAanN2ZXJzZS90cmFuc2xvY29cIjtcbmltcG9ydCB7XG4gIGRpZmZlcmVuY2VJbkRheXMsXG4gIGRpZmZlcmVuY2VJbk1vbnRocyxcbiAgZGlmZmVyZW5jZUluWWVhcnMsXG4gIGVuZE9mWWVzdGVyZGF5LFxuICBmb3JtYXQsXG4gIGlzVGhpc01vbnRoLFxuICBpc1RoaXNRdWFydGVyLFxuICBpc1RoaXNXZWVrLFxuICBpc1RoaXNZZWFyLFxuICBpc1RvZGF5LFxuICBpc1llc3RlcmRheSxcbiAgcGFyc2VJU08sXG4gIHRvRGF0ZVxufSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2lzdGFudFV0aWxzIHtcblxuICByZWFkb25seSBsb2NhbElEID0gaW5qZWN0KExPQ0FMRV9JRCwge29wdGlvbmFsOiB0cnVlfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xvY28gPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmFuayAoMS1iYXNlZCBpbmRleCkgb2YgYSBtZXNzYWdlIHdpdGhpbiBhIGNoYXQgaGlzdG9yeSBhcnJheSBiYXNlZCBvbiBpdHMgbWVzc2FnZSBJRC5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGZvdW5kLCByZXR1cm5zIC0xLlxuICAgKlxuICAgKiBAcGFyYW0gYXJyYXkgLSBBbiBhcnJheSBvZiBgQ2hhdE1lc3NhZ2VgIG9iamVjdHMgb3IgYHVuZGVmaW5lZGAuIFJlcHJlc2VudHMgdGhlIGNoYXQgaGlzdG9yeS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbWVzc2FnZSB0byBsb2NhdGUuXG4gICAqIEByZXR1cm5zIFRoZSAxLWJhc2VkIGluZGV4IG9mIHRoZSBtZXNzYWdlIGluIHRoZSBhcnJheSwgb3IgLTEgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IGZvdW5kLlxuICAgKi9cbiAgZ2V0TWVzc2FnZVJhbmtJbkNoYXRIaXN0b3J5KGFycmF5OiBDaGF0TWVzc2FnZVtdfCB1bmRlZmluZWQsIG1lc3NhZ2VJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbmRleCA9IGFycmF5Py5maW5kSW5kZXgobSA9PiBtLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLm1lc3NhZ2VJZCA9PT0gbWVzc2FnZUlkKSA/PyAtMTtcbiAgICByZXR1cm4gaW5kZXggPT09IC0xID8gLTEgOiBpbmRleCArIDE7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIGFycmF5IGZyb20gdGhlIGVuZCBhbmQgdHJhY2sgdGhlIGZpcnN0ICdhc3Npc3RhbnQnIG1lc3NhZ2UgYW1vbmcgdGhlIGxhc3QgZ3JvdXAgb2YgXCJhc3Npc3RhbnRcIiBtZXNzYWdlcyB3aGVyZSBkaXNwbGF5IGlzIHRydWVcbiAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSBvZiBDaGF0TWVzc2FnZSB0byB0cmF2ZXJzZVxuICAgKiBAcmV0dXJucyBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHZpc2libGUgYXNzaXN0YW50IG1lc3NhZ2UgYW1vbmcgdGhlIGxhc3QgZ3JvdXAgb2YgXCJhc3Npc3RhbnRcIiBtZXNzYWdlcyBpbiB0aGUgYXJyYXlcbiAgICovXG4gIGZpcnN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleChhcnJheTogQ2hhdE1lc3NhZ2VbXXwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgICBpZiAoIWFycmF5KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aCAtIDE7XG4gICAgbGV0IGZpcnN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleCA9IC0xO1xuICAgIHdoaWxlIChpbmRleCA+PSAwICYmIGFycmF5W2luZGV4XS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgaWYgKGFycmF5W2luZGV4XS5hZGRpdGlvbmFsUHJvcGVydGllcy5kaXNwbGF5ID09PSB0cnVlKSB7XG4gICAgICAgIGZpcnN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgICAgaW5kZXgtLTtcbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZSB0aGUgYXJyYXkgZnJvbSB0aGUgZW5kIGFuZCBwaWNrIHRoZSBsYXN0ICdhc3Npc3RhbnQnIG1lc3NhZ2UgYW1vbmcgdGhlIGxhc3QgZ3JvdXAgb2YgXCJhc3Npc3RhbnRcIiBtZXNzYWdlcyB3aGVyZSBkaXNwbGF5IGlzIHRydWVcbiAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSBvZiBDaGF0TWVzc2FnZSB0byB0cmF2ZXJzZVxuICAgKiAgIEByZXR1cm5zIFRoZSBpbmRleCBvZiB0aGUgbGFzdCB2aXNpYmxlIGFzc2lzdGFudCBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgaW4gdGhlIGFycmF5XG4gICAqL1xuICBsYXN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleChhcnJheTogQ2hhdE1lc3NhZ2VbXXwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgICBpZiAoIWFycmF5KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aCAtIDE7XG4gICAgbGV0IGxhc3RWaXNpYmxlQXNzaXN0YW50TWVzc2FnZUluZGV4ID0gLTE7XG4gICAgd2hpbGUgKGluZGV4ID49IDAgJiYgYXJyYXlbaW5kZXhdLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmRpc3BsYXkgPT09IHRydWUpIHtcbiAgICAgICAgbGFzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleC0tO1xuICAgIH1cbiAgICByZXR1cm4gbGFzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgZGF0ZSBzdHJpbmcgaW4gVVRDIHRvIGEgbG9jYWwgZGF0ZSBzdHJpbmdcbiAgICogQHBhcmFtIHZhbHVlIERhdGUgc3RyaW5nIGluIFVUQyB0byBmb3JtYXRcbiAgICogQHJldHVybnMgQSBmb3JtYXR0ZWQgbG9jYWwgZGF0ZSBzdHJpbmdcbiAgICovXG4gIGZvcm1hdERhdGVUaW1lKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsRGF0ZSA9IHRvRGF0ZShwYXJzZUlTTyh2YWx1ZSkpO1xuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHVuZGVmaW5lZCwge1xuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgc2Vjb25kOiAnMi1kaWdpdCcsXG4gICAgICB0aW1lWm9uZU5hbWU6ICdzaG9ydCdcbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChsb2NhbERhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGEgdGV4dCBwcm9tcHQgdGhhdCBtYXkgY29udGFpbiBwbGFjZWhvbGRlcnMgZm9yIHZhcmlhYmxlc1xuICAgKiBhbmQgcmVwbGFjZXMgdGhlc2UgcGxhY2Vob2xkZXJzIGlmIGl0IGZpbmRzIGEgbWF0Y2ggaW4gdGhlIGdpdmVuXG4gICAqIGNvbnRleHQgb2JqZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBwID0gXCJIZWxsbywgW1t1c2VyLm5hbWVdXSEgWW91IGhhdmUgW1t1c2VyLm5vdGlmaWNhdGlvbnMubGVuZ3RoXV0gbmV3IG5vdGlmaWNhdGlvbnMuXCI7XG4gICAqIGNvbnN0IGNvbnRleHQgPSB7XG4gICAqICAgICB1c2VyOiB7XG4gICAqICAgICAgICAgbmFtZTogXCJBbGljZVwiLFxuICAgKiAgICAgICAgIG5vdGlmaWNhdGlvbnM6IFtcIk1lc3NhZ2UgZnJvbSBCb2JcIiwgXCJSZW1pbmRlciBmb3IgbWVldGluZ1wiXVxuICAgKiAgICAgfVxuICAgKiB9O1xuICAgKiBjb25zdCBmb3JtYXR0ZWRQcm9tcHQgPSBmb3JtYXRQcm9tcHQocCwgY29udGV4dCk7XG4gICAqIGNvbnNvbGUubG9nKGZvcm1hdHRlZFByb21wdCk7IC8vIE91dHB1dDogXCJIZWxsbywgQWxpY2UhIFlvdSBoYXZlIDIgbmV3IG5vdGlmaWNhdGlvbnMuXCJcbiAgICovXG4gIHN0YXRpYyBmb3JtYXRQcm9tcHQocHJvbXB0OiBzdHJpbmcsIGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHByb21wdC5yZXBsYWNlKFxuICAgICAgL1xcW1xcWyguKj8pXFxdXFxdL2csXG4gICAgICAobWF0Y2gsIGV4cHIpID0+IHtcbiAgICAgIC8vIFNpbXBsZSBkb3Qgbm90YXRpb24gcmVzb2x2ZXJcbiAgICAgIGNvbnN0IGtleXMgPSBleHByLnRyaW0oKS5zcGxpdChcIi5cIik7XG4gICAgICBsZXQgdmFsdWUgPSBjb250ZXh0O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID8/IG1hdGNoO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBhIHRpbWUtYmFzZWQga2V5IGZvciBhIGdpdmVuIGRhdGUgdG8gYmUgdXNlZCBmb3IgdHJhbnNsYXRpb25zIG9yIGZvcm1hdHRpbmcuXG4gICAqIFRoZSBrZXkgcmVwcmVzZW50cyBhIHJlbGF0aXZlIHRpbWUgcGVyaW9kIHN1Y2ggYXMgXCJ0b2RheVwiLCBcInllc3RlcmRheVwiLCBcInRoaXMgd2Vla1wiLCBldGMuXG4gICAqIElmIHRoZSBkYXRlIGRvZXMgbm90IGZhbGwgaW50byBhbnkgcHJlZGVmaW5lZCByZWxhdGl2ZSB0aW1lIHBlcmlvZCwgaXQgcmV0dXJucyB0aGUgeWVhciBhcyBhIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSBmb3Igd2hpY2ggdGhlIHRpbWUga2V5IGlzIHRvIGJlIGRldGVybWluZWQuXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGltZSBrZXksIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB0cmFuc2xhdGlvbiBvciBkaXNwbGF5IHB1cnBvc2VzLlxuICAgKi9cbiAgZ2V0VGltZUtleShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgIGlmIChpc1RvZGF5KGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXQudG9kYXknKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNZZXN0ZXJkYXkoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdC55ZXN0ZXJkYXknKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUaGlzV2VlayhkYXRlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdjaGF0LnRoaXNXZWVrJyk7XG4gICAgICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbkRheXMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPD0gNykge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdjaGF0Lmxhc3RXZWVrJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGhpc01vbnRoKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXQudGhpc01vbnRoJyk7XG4gICAgICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbk1vbnRocyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA8PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXQubGFzdE1vbnRoJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGhpc1F1YXJ0ZXIoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdC50aGlzUXVhcnRlcicpO1xuICAgICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlSW5Nb250aHMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPD0gMykge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdjaGF0Lmxhc3RRdWFydGVyJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzVGhpc1llYXIoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdC50aGlzWWVhcicpO1xuICAgICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlSW5ZZWFycyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdjaGF0Lmxhc3RZZWFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZm9ybWF0KGRhdGUsICd5eXl5Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbG9jYWxlIG5hbWUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGxvY2FsZSBuYW1lIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgZ2V0Q3VycmVudExvY2FsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbElEIHx8ICcnO1xuICB9XG59XG4iXX0=