@dollhousemcp/mcp-server 2.0.13 → 2.0.15

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 (35) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/di/Container.d.ts.map +1 -1
  3. package/dist/di/Container.js +19 -9
  4. package/dist/elements/BaseElement.js +2 -2
  5. package/dist/elements/memories/Memory.d.ts.map +1 -1
  6. package/dist/elements/memories/Memory.js +3 -3
  7. package/dist/elements/skills/Skill.d.ts.map +1 -1
  8. package/dist/elements/skills/Skill.js +4 -4
  9. package/dist/elements/templates/Template.d.ts.map +1 -1
  10. package/dist/elements/templates/Template.js +4 -4
  11. package/dist/generated/version.d.ts +2 -2
  12. package/dist/generated/version.js +3 -3
  13. package/dist/handlers/ElementCRUDHandler.d.ts +10 -0
  14. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  15. package/dist/handlers/ElementCRUDHandler.js +123 -1
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
  19. package/dist/services/ActivationStore.d.ts +20 -0
  20. package/dist/services/ActivationStore.d.ts.map +1 -1
  21. package/dist/services/ActivationStore.js +104 -1
  22. package/dist/web/console/IngestRoutes.d.ts +1 -0
  23. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  24. package/dist/web/console/IngestRoutes.js +4 -1
  25. package/dist/web/console/UnifiedConsole.js +2 -1
  26. package/dist/web/public/permissions.css +224 -16
  27. package/dist/web/public/permissions.js +326 -63
  28. package/dist/web/public/sessions.js +218 -98
  29. package/dist/web/public/styles.css +15 -10
  30. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  31. package/dist/web/routes/permissionRoutes.js +57 -19
  32. package/dist/web/server.d.ts.map +1 -1
  33. package/dist/web/server.js +2 -1
  34. package/package.json +1 -1
  35. package/server.json +2 -2
@@ -12,7 +12,7 @@
12
12
  * 5. Privacy level access control
13
13
  * 6. Audit logging for all operations
14
14
  */
15
- import { BaseElement } from '../BaseElement.js';
15
+ import { BaseElement, normalizeVersion } from '../BaseElement.js';
16
16
  import { ElementType } from '../../portfolio/types.js';
17
17
  import { UnicodeValidator } from '../../security/validators/unicodeValidator.js';
18
18
  import crypto from 'crypto';
@@ -773,7 +773,7 @@ export class Memory extends BaseElement {
773
773
  }
774
774
  // Update properties
775
775
  this.id = parsed.id;
776
- this.version = parsed.version || '1.0.0';
776
+ this.version = normalizeVersion(String(parsed.version ?? '1.0.0'));
777
777
  this.metadata = parsed.metadata || {};
778
778
  this.extensions = parsed.extensions || {};
779
779
  // Clear and reload entries
@@ -1126,4 +1126,4 @@ export class Memory extends BaseElement {
1126
1126
  return true;
1127
1127
  }
1128
1128
  }
1129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVqRSwwRkFBMEY7QUFDMUYsaURBQWlEO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBZ0MsWUFBWSxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0MsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBRTlCOzs7O0dBSUc7QUFDSCxNQUFNLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDO0FBRXZELGtDQUFrQztBQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENB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LENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1vcnkgRWxlbWVudCAtIFBlcnNpc3RlbnQgY29udGV4dCBzdG9yYWdlIGZvciBjb250aW51aXR5IGFuZCBsZWFybmluZ1xuICogXG4gKiBQcm92aWRlcyBtdWx0aXBsZSBzdG9yYWdlIGJhY2tlbmRzLCByZXRlbnRpb24gcG9saWNpZXMsIGFuZCBzZWFyY2ggY2FwYWJpbGl0aWVzXG4gKiBmb3IgbWFpbnRhaW5pbmcgY29udGV4dCBhY3Jvc3Mgc2Vzc2lvbnMgYW5kIGludGVyYWN0aW9ucy5cbiAqIFxuICogU0VDVVJJVFkgTUVBU1VSRVMgSU1QTEVNRU5URUQ6XG4gKiAxLiBJbnB1dCBzYW5pdGl6YXRpb24gZm9yIGFsbCBtZW1vcnkgY29udGVudFxuICogMi4gTWVtb3J5IHNpemUgbGltaXRzIHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aFxuICogMy4gUGF0aCB2YWxpZGF0aW9uIGZvciBmaWxlLWJhc2VkIHN0b3JhZ2VcbiAqIDQuIFJldGVudGlvbiBwb2xpY3kgZW5mb3JjZW1lbnRcbiAqIDUuIFByaXZhY3kgbGV2ZWwgYWNjZXNzIGNvbnRyb2xcbiAqIDYuIEF1ZGl0IGxvZ2dpbmcgZm9yIGFsbCBvcGVyYXRpb25zXG4gKi9cblxuaW1wb3J0IHsgQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9CYXNlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCwgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IElFbGVtZW50TWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBzYW5pdGl6ZUlucHV0IH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzJztcbi8vIEZJWCAjMTMxNTogQ29udGVudFZhbGlkYXRvciBubyBsb25nZXIgdXNlZCBpbiBhZGRFbnRyeSAobW92ZWQgdG8gYmFja2dyb3VuZCB2YWxpZGF0aW9uKVxuLy8gSW1wb3J0IHJlbW92ZWQgdG8gY2xlYW4gdXAgdW51c2VkIGRlcGVuZGVuY2llc1xuaW1wb3J0IHsgTUVNT1JZX0NPTlNUQU5UUywgTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUywgUHJpdmFjeUxldmVsLCBTdG9yYWdlQmFja2VuZCwgVFJVU1RfTEVWRUxTLCBUcnVzdExldmVsIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgTWVtb3J5VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVNZW1vcnlJZCB9IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IHsgTWVtb3J5U2VhcmNoSW5kZXgsIFNlYXJjaFF1ZXJ5LCBTZWFyY2hJbmRleENvbmZpZyB9IGZyb20gJy4vTWVtb3J5U2VhcmNoSW5kZXguanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCBET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcbmltcG9ydCB7IEpTRE9NIH0gZnJvbSAnanNkb20nO1xuaW1wb3J0IHsgTFJVQ2FjaGUgfSBmcm9tICcuLi8uLi9jYWNoZS9MUlVDYWNoZS5qcyc7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGluZGl2aWR1YWwgdHJpZ2dlciB3b3JkcyB1c2VkIGluIEVuaGFuY2VkIEluZGV4XG4gKiBAY29uc3RhbnQge251bWJlcn1cbiAqL1xuY29uc3QgTUFYX1RSSUdHRVJfTEVOR1RIID0gNTA7XG5cbi8qKlxuICogVmFsaWRhdGlvbiBwYXR0ZXJuIGZvciB0cmlnZ2VyIHdvcmRzXG4gKiBBbGxvd3MgYWxwaGFudW1lcmljLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgQCAobWVudGlvbnMvZW1haWxzKSwgLiAoZG9tYWlucylcbiAqIEBjb25zdGFudCB7UmVnRXhwfVxuICovXG5jb25zdCBUUklHR0VSX1ZBTElEQVRJT05fUkVHRVggPSAvXlthLXpBLVowLTlcXC1fQC5dKyQvO1xuXG4vLyBJbml0aWFsaXplIERPTVB1cmlmeSB3aXRoIEpTRE9NXG5jb25zdCB3aW5kb3cgPSBuZXcgSlNET00oJycpLndpbmRvdztcbmNvbnN0IHB1cmlmeSA9IERPTVB1cmlmeSh3aW5kb3cgYXMgYW55KTtcblxuLy8gQ29uZmlndXJlIERPTVB1cmlmeSBmb3IgbWVtb3J5IGNvbnRlbnQgLSBzdHJpcCBhbGwgSFRNTCBidXQga2VlcCB0ZXh0XG5wdXJpZnkuc2V0Q29uZmlnKHtcbiAgQUxMT1dFRF9UQUdTOiBbXSwgIC8vIE5vIEhUTUwgdGFncyBhbGxvd2VkXG4gIEFMTE9XRURfQVRUUjogW10sICAvLyBObyBhdHRyaWJ1dGVzIGFsbG93ZWRcbiAgS0VFUF9DT05URU5UOiB0cnVlIC8vIEtlZXAgdGV4dCBjb250ZW50XG59KTtcblxuLyoqXG4gKiBTYW5pdGl6ZSBjb250ZW50IGZvciBtZW1vcnkgc3RvcmFnZVxuICogTW9yZSBwZXJtaXNzaXZlIHRoYW4gc2FuaXRpemVJbnB1dCAtIGFsbG93cyBwdW5jdHVhdGlvbiwgcXVvdGVzLCBldGMuXG4gKiBidXQgc3RpbGwgcHJldmVudHMgWFNTIGFuZCBjb250cm9sIGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVNZW1vcnlDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIFxuICAvLyBGaXJzdCBub3JtYWxpemUgVW5pY29kZVxuICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29udGVudCkubm9ybWFsaXplZENvbnRlbnQ7XG4gIFxuICAvLyBVc2UgRE9NUHVyaWZ5IHRvIHN0cmlwIGFueSBIVE1ML1hTUyBhdHRlbXB0cyBidXQga2VlcCB0ZXh0XG4gIGNvbnN0IGNsZWFuZWQgPSBwdXJpZnkuc2FuaXRpemUobm9ybWFsaXplZCk7XG4gIFxuICAvLyBSZW1vdmUgb25seSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIG51bGwgYnl0ZXNcbiAgcmV0dXJuIGNsZWFuZWRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBJbnRlbnRpb25hbGx5IHJlbW92aW5nIGNvbnRyb2wgY2hhcnMgZXhjZXB0IFxcdCBcXG4gXFxyIGZvciBzYW5pdGl6YXRpb25cbiAgICAucmVwbGFjZUFsbCgvW1xcdTAwMDAtXFx1MDAwOFxcdTAwMEJcXHUwMDBDXFx1MDAwRS1cXHUwMDFGXFx1MDA3Rl0vZywgJycpIC8vIE5PU09OQVJcbiAgICAuc3Vic3RyaW5nKDAsIG1heExlbmd0aClcbiAgICAudHJpbSgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeU1ldGFkYXRhIGV4dGVuZHMgSUVsZW1lbnRNZXRhZGF0YSB7XG4gIHN0b3JhZ2VCYWNrZW5kPzogU3RvcmFnZUJhY2tlbmQ7XG4gIHJldGVudGlvbkRheXM/OiBudW1iZXI7XG4gIHByaXZhY3lMZXZlbD86IFByaXZhY3lMZXZlbDtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIG1heEVudHJpZXM/OiBudW1iZXI7XG4gIGVuY3J5cHRpb25FbmFibGVkPzogYm9vbGVhbjtcbiAgLy8gU2VhcmNoIGluZGV4IGNvbmZpZ3VyYXRpb24gKElzc3VlICM5ODQpXG4gIGluZGV4VGhyZXNob2xkPzogbnVtYmVyO1xuICBlbmFibGVDb250ZW50SW5kZXg/OiBib29sZWFuO1xuICBtYXhUZXJtc1BlckVudHJ5PzogbnVtYmVyO1xuICBtaW5UZXJtTGVuZ3RoPzogbnVtYmVyO1xuICAvLyBUcmlnZ2VyIHdvcmRzIGZvciBFbmhhbmNlZCBJbmRleCAoSXNzdWUgIzExMjQpXG4gIHRyaWdnZXJzPzogc3RyaW5nW107XG4gIC8vIEF1dG8tbG9hZCBjb25maWd1cmF0aW9uIChJc3N1ZSAjMTQzMClcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBwcmlvcml0eT86IG51bWJlcjtcbiAgLy8gTWVtb3J5IHR5cGUgY2xhc3NpZmljYXRpb24gZm9yIGZvbGRlciBvcmdhbml6YXRpb25cbiAgbWVtb3J5VHlwZT86IE1lbW9yeVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5RW50cnkge1xuICBpZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgdGFncz86IHN0cmluZ1tdO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV4cGlyZXNBdD86IERhdGU7XG4gIHByaXZhY3lMZXZlbD86IFByaXZhY3lMZXZlbDtcbiAgLy8gRklYICMxMjY5OiBUcnVzdCBsZXZlbCBmb3IgY29udGVudCBzZWN1cml0eVxuICB0cnVzdExldmVsPzogVHJ1c3RMZXZlbDtcbiAgLy8gU291cmNlIGluZm9ybWF0aW9uIGZvciB0cnVzdCBkZWNpc2lvbnNcbiAgc291cmNlPzogc3RyaW5nOyAgLy8gZS5nLiwgJ3VzZXInLCAnd2ViLXNjcmFwZScsICdhZ2VudCcsICdhcGknXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U2VhcmNoT3B0aW9ucyB7XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG4gIHN0YXJ0RGF0ZT86IERhdGU7XG4gIGVuZERhdGU/OiBEYXRlO1xuICBsaW1pdD86IG51bWJlcjtcbiAgcHJpdmFjeUxldmVsPzogUHJpdmFjeUxldmVsO1xufVxuXG4vKipcbiAqIE1lbW9yeSBFbGVtZW50IEltcGxlbWVudGF0aW9uXG4gKlxuICogVE9ETzogTWVtb3J5IFNoYXJkaW5nIFN0cmF0ZWd5IChJc3N1ZSAjOTgxKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDdXJyZW50OiBTaW5nbGUgTWFwPGlkLCBlbnRyeT4gZm9yIGFsbCBtZW1vcmllc1xuICogUHJvYmxlbTogTGFyZ2UgbWVtb3J5IHNldHMgKD4xMEsgZW50cmllcykgY2F1c2UgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAqXG4gKiBQbGFubmVkIFNoYXJkaW5nIEFyY2hpdGVjdHVyZTpcbiAqIDEuIFNoYXJkIG1lbW9yaWVzIGFjcm9zcyBtdWx0aXBsZSBmaWxlcyBiYXNlZCBvbiBoYXNoKG1lbW9yeUlkKSAlIHNoYXJkQ291bnRcbiAqIDIuIEVhY2ggc2hhcmQgZmlsZSA8MjU2S0IgZm9yIG9wdGltYWwgWUFNTCBwYXJzaW5nXG4gKiAzLiBNZW1vcnkgcmVmZXJlbmNlcyBzdG9yZWQgc2VwYXJhdGVseSBmcm9tIGNvbnRlbnQgKGxpa2UgZ2l0IG9iamVjdHMpXG4gKiA0LiBMYXJnZSBiaW5hcnkgY29udGVudCAoUERGcywgaW1hZ2VzKSBzdG9yZWQgYXMgZXh0ZXJuYWwgcmVmZXJlbmNlc1xuICpcbiAqIEJlbmVmaXRzOlxuICogLSBQYXJhbGxlbCBsb2FkaW5nIG9mIG1lbW9yeSBzaGFyZHNcbiAqIC0gUmVkdWNlZCBtZW1vcnkgZm9vdHByaW50IChsb2FkIG9ubHkgbmVlZGVkIHNoYXJkcylcbiAqIC0gQmV0dGVyIGNvcnJ1cHRpb24gcmVzaXN0YW5jZSAob25lIHNoYXJkIGZhaWx1cmUgZG9lc24ndCBhZmZlY3Qgb3RoZXJzKVxuICogLSBFZmZpY2llbnQgaW5jcmVtZW50YWwgdXBkYXRlc1xuICpcbiAqIFRPRE86IENvbnRlbnQgSW50ZWdyaXR5IFZlcmlmaWNhdGlvbiAoSXNzdWUgIzk4MilcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBZGQgU0hBLTI1NiBoYXNoZXMgdG8gZGV0ZWN0OlxuICogLSBBY2NpZGVudGFsIGNvcnJ1cHRpb24gZnJvbSBkaXNrIGVycm9yc1xuICogLSBJbnRlbnRpb25hbCB0YW1wZXJpbmcgd2l0aCBtZW1vcnkgZmlsZXNcbiAqIC0gVmVyc2lvbiBjb25mbGljdHMgZHVyaW5nIGNvbmN1cnJlbnQgYWNjZXNzXG4gKlxuICogSW1wbGVtZW50YXRpb246XG4gKiAtIFN0b3JlIGhhc2ggaW4gbWVtb3J5IG1ldGFkYXRhXG4gKiAtIFZlcmlmeSBvbiBsb2FkLCB3YXJuIG9uIG1pc21hdGNoXG4gKiAtIE9wdGlvbiB0byBhdXRvLXJlc3RvcmUgZnJvbSBiYWNrdXAgb24gY29ycnVwdGlvblxuICpcbiAqIFRPRE86IE1lbW9yeSBDYXBhY2l0eSBNYW5hZ2VtZW50IChJc3N1ZSAjOTgzKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDdXJyZW50OiBTeW5jaHJvbm91cyByZXRlbnRpb24gZW5mb3JjZW1lbnQgb24gZWFjaCBhZGRcbiAqIEJldHRlcjogQmFja2dyb3VuZCBjbGVhbnVwIHdpdGggc21hcnQgdHJpZ2dlcnM6XG4gKiAtIENsZWFudXAgd2hlbiA5MCUgY2FwYWNpdHkgcmVhY2hlZFxuICogLSBCYXRjaCBkZWxldGlvbnMgZm9yIGVmZmljaWVuY3lcbiAqIC0gTFJVIGV2aWN0aW9uIHdpdGggYWNjZXNzIHRyYWNraW5nXG4gKiAtIFByZXNlcnZlIFwicGlubmVkXCIgbWVtb3JpZXMgcmVnYXJkbGVzcyBvZiBhZ2VcbiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeSBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgSUVsZW1lbnQge1xuICAvLyBpbnN0cnVjdGlvbnMgaW5oZXJpdGVkIGZyb20gQmFzZUVsZW1lbnQgKHYyLjAgZHVhbC1maWVsZCBhcmNoaXRlY3R1cmUpXG4gIC8vIGNvbnRlbnQ6IG92ZXJyaWRkZW4gYmVsb3cgd2l0aCBhIGN1c3RvbSBnZXR0ZXIgdGhhdCByZXR1cm5zIGZvcm1hdHRlZCBlbnRyaWVzXG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlZE1lbW9yeU5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgc3RhdGljIG1lbW9yeU1hbmFnZXJSZXNvbHZlcj86ICgpID0+IHsgbGlzdCgpOiBQcm9taXNlPE1lbW9yeVtdPjsgc2F2ZShtZW1vcnk6IE1lbW9yeSwgZmlsZVBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+OyB9IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgcmVzb2x2ZXIgZm9yIFJldGVudGlvblBvbGljeVNlcnZpY2UgKElzc3VlICM1MSlcbiAgICogVXNlZCB0byBjaGVjayBpZiByZXRlbnRpb24gZW5mb3JjZW1lbnQgc2hvdWxkIGhhcHBlbiBvbiBsb2FkXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZXRlbnRpb25Qb2xpY3lSZXNvbHZlcj86ICgpID0+IHsgc2hvdWxkRW5mb3JjZU9uTG9hZCgpOiBib29sZWFuOyBpc0VuYWJsZWQoKTogYm9vbGVhbjsgfSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZ3VyZU1lbW9yeU1hbmFnZXJSZXNvbHZlcihyZXNvbHZlcjogKCkgPT4geyBsaXN0KCk6IFByb21pc2U8TWVtb3J5W10+OyBzYXZlKG1lbW9yeTogTWVtb3J5LCBmaWxlUGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD47IH0gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm1lbW9yeU1hbmFnZXJSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgUmV0ZW50aW9uUG9saWN5U2VydmljZSByZXNvbHZlciAoSXNzdWUgIzUxKVxuICAgKiBDYWxsZWQgZHVyaW5nIERJIGNvbnRhaW5lciBzZXR1cFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb25maWd1cmVSZXRlbnRpb25Qb2xpY3lSZXNvbHZlcihyZXNvbHZlcjogKCkgPT4geyBzaG91bGRFbmZvcmNlT25Mb2FkKCk6IGJvb2xlYW47IGlzRW5hYmxlZCgpOiBib29sZWFuOyB9IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5yZXRlbnRpb25Qb2xpY3lSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGFsbCBzdGF0aWMgcmVzb2x2ZXJzIChmb3IgdGVzdCBjbGVhbnVwKVxuICAgKiBDYWxsIHRoaXMgaW4gYWZ0ZXJFYWNoIGhvb2tzIHRvIHByZXZlbnQgdGVzdCBpc29sYXRpb24gaXNzdWVzXG4gICAqIHdoZXJlIGEgc3RhbGUgcmVzb2x2ZXIgcmVmZXJlbmNlcyBkaXNwb3NlZCBzZXJ2aWNlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZXNldFJlc29sdmVycygpOiB2b2lkIHtcbiAgICB0aGlzLm1lbW9yeU1hbmFnZXJSZXNvbHZlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJldGVudGlvblBvbGljeVJlc29sdmVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUmV0ZW50aW9uUG9saWN5U2VydmljZSBpbnN0YW5jZVxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgY29uZmlndXJlZCAoYWxsb3dzIGdyYWNlZnVsIGZhbGxiYWNrKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmV0ZW50aW9uUG9saWN5U2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMucmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJldGVudGlvblBvbGljeVJlc29sdmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRNZW1vcnlNYW5hZ2VyKCkge1xuICAgIGlmICghdGhpcy5tZW1vcnlNYW5hZ2VyUmVzb2x2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IG1hbmFnZXIgcmVzb2x2ZXIgbm90IGNvbmZpZ3VyZWQnKTtcbiAgICB9XG4gICAgY29uc3QgbWFuYWdlciA9IHRoaXMubWVtb3J5TWFuYWdlclJlc29sdmVyKCk7XG4gICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBtYW5hZ2VyIHJlc29sdmVyIHJldHVybmVkIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbWFuYWdlcjtcbiAgfVxuICAvLyBNZW1vcnktc3BlY2lmaWMgcHJvcGVydGllcyAod2l0aCBzaXplIGxpbWl0cyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcylcbiAgcHJpdmF0ZSBlbnRyaWVzOiBMUlVDYWNoZTxNZW1vcnlFbnRyeT47XG4gIHByaXZhdGUgc3RvcmFnZUJhY2tlbmQ6IFN0b3JhZ2VCYWNrZW5kO1xuICBwcml2YXRlIHJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgcHJpdmF0ZSBwcml2YWN5TGV2ZWw6IFByaXZhY3lMZXZlbDtcbiAgcHJpdmF0ZSBzZWFyY2hhYmxlOiBib29sZWFuO1xuICBwcml2YXRlIG1heEVudHJpZXM6IG51bWJlcjtcblxuICAvLyBTZWFyY2ggaW5kZXggZm9yIHBlcmZvcm1hbmNlIChJc3N1ZSAjOTg0KVxuICBwcml2YXRlIHNlYXJjaEluZGV4OiBNZW1vcnlTZWFyY2hJbmRleDtcblxuICAvLyBTYW5pdGl6YXRpb24gY2FjaGUgdG8gYXZvaWQgcmVkdW5kYW50IHByb2Nlc3NpbmcgKHdpdGggc2l6ZSBsaW1pdHMpXG4gIHByaXZhdGUgc2FuaXRpemF0aW9uQ2FjaGU6IExSVUNhY2hlPHN0cmluZz47XG5cbiAgLy8gRklYICMxMzIwOiBTdG9yZSBmaWxlIHBhdGggZm9yIHBlcnNpc3RlbmNlXG4gIHByaXZhdGUgZmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgLy8gQ2FjaGUgY29uZmlndXJhdGlvbiBjb25zdGFudHNcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX1NBTklUSVpBVElPTl9DQUNIRV9TSVpFID0gNTAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfU0FOSVRJWkFUSU9OX0NBQ0hFX01FTU9SWV9NQiA9IDU7XG4gIFxuICBjb25zdHJ1Y3RvcihtZXRhZGF0YTogUGFydGlhbDxNZW1vcnlNZXRhZGF0YT4gPSB7fSwgbWV0YWRhdGFTZXJ2aWNlOiBNZXRhZGF0YVNlcnZpY2UpIHtcbiAgICAvLyBTRUNVUklUWSBGSVg6IFNhbml0aXplIGFsbCBpbnB1dHMgZHVyaW5nIGNvbnN0cnVjdGlvblxuICAgIGNvbnN0IHNhbml0aXplZE1ldGFkYXRhID0ge1xuICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lID9cbiAgICAgICAgc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShtZXRhZGF0YS5uYW1lKS5ub3JtYWxpemVkQ29udGVudCwgMTAwKSA6XG4gICAgICAgICdVbm5hbWVkIE1lbW9yeScsXG4gICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGEuZGVzY3JpcHRpb24gP1xuICAgICAgICBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgNTAwKSA6XG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgIC8vIEZJWCAjMTEyNDogUHJlc2VydmUgdHJpZ2dlcnMgZm9yIEVuaGFuY2VkIEluZGV4XG4gICAgICAvLyBTRUNVUklUWTogVmFsaWRhdGUgQkVGT1JFIHNhbml0aXphdGlvbiB0byByZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzXG4gICAgICAvLyBUaGlzIHByZXZlbnRzICdiYWQhdHJpZ2dlcicgZnJvbSBiZWNvbWluZyAnYmFkdHJpZ2dlcicgYW5kIHBhc3NpbmdcbiAgICAgIHRyaWdnZXJzOiBBcnJheS5pc0FycmF5KG1ldGFkYXRhLnRyaWdnZXJzKSA/XG4gICAgICAgIG1ldGFkYXRhLnRyaWdnZXJzXG4gICAgICAgICAgLm1hcCh0ID0+IFN0cmluZyh0KS50cmltKCkpXG4gICAgICAgICAgLmZpbHRlcih0ID0+IHQgJiYgVFJJR0dFUl9WQUxJREFUSU9OX1JFR0VYLnRlc3QodCkpIC8vIFZhbGlkYXRlIGZvcm1hdCBGSVJTVFxuICAgICAgICAgIC5tYXAodCA9PiBzYW5pdGl6ZUlucHV0KHQsIE1BWF9UUklHR0VSX0xFTkdUSCkpIC8vIFRoZW4gc2FuaXRpemUgZm9yIGxlbmd0aFxuICAgICAgICAgIC5maWx0ZXIodCA9PiB0KSA6IC8vIFJlbW92ZSBhbnkgdGhhdCBiZWNhbWUgZW1wdHkgYWZ0ZXIgc2FuaXRpemF0aW9uXG4gICAgICAgIFtdXG4gICAgfTtcblxuICAgIHN1cGVyKEVsZW1lbnRUeXBlLk1FTU9SWSwgc2FuaXRpemVkTWV0YWRhdGEsIG1ldGFkYXRhU2VydmljZSk7XG5cbiAgICAvLyBJbml0aWFsaXplIG1lbW9yeS1zcGVjaWZpYyBwcm9wZXJ0aWVzIHdpdGggZGVmYXVsdHNcbiAgICB0aGlzLnN0b3JhZ2VCYWNrZW5kID0gbWV0YWRhdGEuc3RvcmFnZUJhY2tlbmQgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1NUT1JBR0VfQkFDS0VORDtcbiAgICB0aGlzLnJldGVudGlvbkRheXMgPSBtZXRhZGF0YS5yZXRlbnRpb25EYXlzIHx8IE1FTU9SWV9DT05TVEFOVFMuREVGQVVMVF9SRVRFTlRJT05fREFZUztcbiAgICAvLyBWYWxpZGF0ZSBwcml2YWN5IGxldmVsIC0gZGVmYXVsdCB0byBwcml2YXRlIGlmIGludmFsaWRcbiAgICB0aGlzLnByaXZhY3lMZXZlbCA9IChtZXRhZGF0YS5wcml2YWN5TGV2ZWwgJiYgTUVNT1JZX0NPTlNUQU5UUy5QUklWQUNZX0xFVkVMUy5pbmNsdWRlcyhtZXRhZGF0YS5wcml2YWN5TGV2ZWwpKVxuICAgICAgPyBtZXRhZGF0YS5wcml2YWN5TGV2ZWxcbiAgICAgIDogTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1BSSVZBQ1lfTEVWRUw7XG4gICAgdGhpcy5zZWFyY2hhYmxlID0gbWV0YWRhdGEuc2VhcmNoYWJsZSAhPT0gZmFsc2U7XG4gICAgdGhpcy5tYXhFbnRyaWVzID0gTWF0aC5taW4oXG4gICAgICBtZXRhZGF0YS5tYXhFbnRyaWVzIHx8IE1FTU9SWV9DT05TVEFOVFMuTUFYX0VOVFJJRVNfREVGQVVMVCxcbiAgICAgIE1FTU9SWV9DT05TVEFOVFMuTUFYX0VOVFJJRVNfREVGQVVMVFxuICAgICk7XG5cbiAgICAvLyBJbml0aWFsaXplIExSVSBjYWNoZXMgd2l0aCBzaXplIGxpbWl0cyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBMUlVDYWNoZTxNZW1vcnlFbnRyeT4oe1xuICAgICAgbmFtZTogJ21lbW9yeS1lbnRyaWVzJyxcbiAgICAgIG1heFNpemU6IHRoaXMubWF4RW50cmllcyxcbiAgICAgIG1heE1lbW9yeU1COiAyNSwgLy8gTWF4IDI1TUIgZm9yIG1lbW9yeSBlbnRyaWVzXG4gICAgfSk7XG5cbiAgICB0aGlzLnNhbml0aXphdGlvbkNhY2hlID0gbmV3IExSVUNhY2hlPHN0cmluZz4oe1xuICAgICAgbmFtZTogJ21lbW9yeS1zYW5pdGl6YXRpb24nLFxuICAgICAgbWF4U2l6ZTogTWVtb3J5Lk1BWF9TQU5JVElaQVRJT05fQ0FDSEVfU0laRSxcbiAgICAgIG1heE1lbW9yeU1COiBNZW1vcnkuTUFYX1NBTklUSVpBVElPTl9DQUNIRV9NRU1PUllfTUIsXG4gICAgfSk7XG5cbiAgICAvLyBGSVggIzE0MzA6IFVwZGF0ZSBtZXRhZGF0YSB0byBpbmNsdWRlIGFsbCBNZW1vcnlNZXRhZGF0YSBmaWVsZHNcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhleSBhcmUgcHJlc2VydmVkIHdoZW4gc2VyaWFsaXplRWxlbWVudCgpIGlzIGNhbGxlZFxuICAgIC8vIFBlciBUb2RkJ3Mgc3VnZ2VzdGlvbjogc3RvcmUgYWxsIHJ1bnRpbWUgcHJvcGVydGllcyBpbiBtZXRhZGF0YSwgbm90IGV4dGVuc2lvbnNcbiAgICB0aGlzLm1ldGFkYXRhID0ge1xuICAgICAgLi4udGhpcy5tZXRhZGF0YSxcbiAgICAgIHN0b3JhZ2VCYWNrZW5kOiB0aGlzLnN0b3JhZ2VCYWNrZW5kLFxuICAgICAgcmV0ZW50aW9uRGF5czogdGhpcy5yZXRlbnRpb25EYXlzLFxuICAgICAgcHJpdmFjeUxldmVsOiB0aGlzLnByaXZhY3lMZXZlbCxcbiAgICAgIHNlYXJjaGFibGU6IHRoaXMuc2VhcmNoYWJsZSxcbiAgICAgIG1heEVudHJpZXM6IHRoaXMubWF4RW50cmllcyxcbiAgICAgIGF1dG9Mb2FkOiBtZXRhZGF0YS5hdXRvTG9hZCxcbiAgICAgIHByaW9yaXR5OiBtZXRhZGF0YS5wcmlvcml0eSxcbiAgICAgIGVuY3J5cHRpb25FbmFibGVkOiBtZXRhZGF0YS5lbmNyeXB0aW9uRW5hYmxlZCB8fCBmYWxzZVxuICAgIH0gYXMgTWVtb3J5TWV0YWRhdGE7XG5cbiAgICAvLyBTZXQgdXAgZXh0ZW5zaW9ucyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHtcbiAgICAgIHN0b3JhZ2VCYWNrZW5kOiB0aGlzLnN0b3JhZ2VCYWNrZW5kLFxuICAgICAgcmV0ZW50aW9uRGF5czogdGhpcy5yZXRlbnRpb25EYXlzLFxuICAgICAgcHJpdmFjeUxldmVsOiB0aGlzLnByaXZhY3lMZXZlbCxcbiAgICAgIHNlYXJjaGFibGU6IHRoaXMuc2VhcmNoYWJsZSxcbiAgICAgIG1heEVudHJpZXM6IHRoaXMubWF4RW50cmllcyxcbiAgICAgIGVuY3J5cHRpb25FbmFibGVkOiBtZXRhZGF0YS5lbmNyeXB0aW9uRW5hYmxlZCB8fCBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIHNlYXJjaCBpbmRleCB3aXRoIGNvbmZpZ3VyYXRpb24gKElzc3VlICM5ODQpXG4gICAgY29uc3QgaW5kZXhDb25maWc6IFNlYXJjaEluZGV4Q29uZmlnID0ge1xuICAgICAgaW5kZXhUaHJlc2hvbGQ6IG1ldGFkYXRhLmluZGV4VGhyZXNob2xkIHx8IDEwMCxcbiAgICAgIGVuYWJsZUNvbnRlbnRJbmRleDogbWV0YWRhdGEuZW5hYmxlQ29udGVudEluZGV4ICE9PSBmYWxzZSxcbiAgICAgIG1heFRlcm1zUGVyRW50cnk6IG1ldGFkYXRhLm1heFRlcm1zUGVyRW50cnkgfHwgMTAwLFxuICAgICAgbWluVGVybUxlbmd0aDogbWV0YWRhdGEubWluVGVybUxlbmd0aCB8fCAyLFxuICAgICAgZW5hYmxlUGVyc2lzdGVuY2U6IGZhbHNlIC8vIEZ1dHVyZSBlbmhhbmNlbWVudFxuICAgIH07XG4gICAgdGhpcy5zZWFyY2hJbmRleCA9IG5ldyBNZW1vcnlTZWFyY2hJbmRleChpbmRleENvbmZpZyk7XG5cbiAgICAvLyBMb2cgbWVtb3J5IGNyZWF0aW9uIChvbmNlIHBlciB1bmlxdWUgbmFtZSBwZXIgc2VydmVyIGxpZmV0aW1lKVxuICAgIGlmICghTWVtb3J5LmNyZWF0ZWRNZW1vcnlOYW1lcy5oYXModGhpcy5tZXRhZGF0YS5uYW1lKSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9DUkVBVEVELFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeS5jb25zdHJ1Y3RvcicsXG4gICAgICAgIGRldGFpbHM6IGBNZW1vcnkgY3JlYXRlZDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9IHdpdGggJHt0aGlzLnN0b3JhZ2VCYWNrZW5kfSBiYWNrZW5kYFxuICAgICAgfSk7XG4gICAgICBNZW1vcnkuY3JlYXRlZE1lbW9yeU5hbWVzLmFkZCh0aGlzLm1ldGFkYXRhLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCB0aGUgY3VycmVudCBudW1iZXIgb2YgZW50cmllc1xuICAgKiBDb21wYXRpYmxlIHdpdGggTFJVQ2FjaGVcbiAgICovXG4gIHByaXZhdGUgZ2V0IGVudHJpZXNTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXRTdGF0cygpLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IG1lbW9yeSBlbnRyeVxuICAgKiBTRUNVUklUWTogU2FuaXRpemVzIGlucHV0IGFuZCBlbmZvcmNlcyBzaXplIGxpbWl0c1xuICAgKiBGSVggIzEzMTU6IFJlbW92ZWQgYmxvY2tpbmcgdmFsaWRhdGlvbiAtIGFsbCBlbnRyaWVzIGNyZWF0ZWQgYXMgVU5UUlVTVEVEXG4gICAqIEJhY2tncm91bmQgdmFsaWRhdGlvbiB3aWxsIHVwZGF0ZSB0cnVzdCBsZXZlbHMgYXN5bmNocm9ub3VzbHkgKElzc3VlICMxMzE0KVxuICAgKlxuICAgKiBGSVg6IFJlZmFjdG9yZWQgdG8gcmVkdWNlIGNvZ25pdGl2ZSBjb21wbGV4aXR5IChTb25hckNsb3VkIFMzNzc2KVxuICAgKiBGSVggKFBSICMxMzEzIHJldmlldyk6IFNhbml0aXplIHNvdXJjZSBwYXJhbWV0ZXIgZm9yIGxvZyBpbmplY3Rpb24gcHJldmVudGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZEVudHJ5KFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICB0YWdzPzogc3RyaW5nW10sXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHNvdXJjZTogc3RyaW5nID0gJ3Vua25vd24nXG4gICk6IFByb21pc2U8TWVtb3J5RW50cnk+IHtcbiAgICAvLyBTRUNVUklUWTogU2FuaXRpemUgc291cmNlIHBhcmFtZXRlciBiZWZvcmUgdXNlXG4gICAgY29uc3Qgc2FuaXRpemVkU291cmNlID0gc2FuaXRpemVJbnB1dChzb3VyY2UsIDUwKTtcblxuICAgIGlmICh0aGlzLmVudHJpZXNTaXplID49IHRoaXMubWF4RW50cmllcykge1xuICAgICAgYXdhaXQgdGhpcy5lbmZvcmNlUmV0ZW50aW9uUG9saWN5KCk7XG4gICAgfVxuXG4gICAgLy8gRklYICMxMzE1OiBTYW5pdGl6ZSBjb250ZW50IGJ1dCBkb24ndCB2YWxpZGF0ZSBmb3IgdGhyZWF0cyAobm9uLWJsb2NraW5nKVxuICAgIC8vIEp1c3Qgbm9ybWFsaXplIFVuaWNvZGUgYW5kIGFwcGx5IERPTVB1cmlmeVxuICAgIGNvbnN0IHNhbml0aXplZENvbnRlbnQgPSBzYW5pdGl6ZU1lbW9yeUNvbnRlbnQoY29udGVudCwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfRU5UUllfU0laRSk7XG5cbiAgICBpZiAoIXNhbml0aXplZENvbnRlbnQgfHwgc2FuaXRpemVkQ29udGVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBjb250ZW50IGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIC8vIFNFQ1VSSVRZIEZJWDogVmFsaWRhdGUgYW5kIHNhbml0aXplIHRhZ3NcbiAgICBjb25zdCBzYW5pdGl6ZWRUYWdzID0gdGFncyA/IHRoaXMuc2FuaXRpemVUYWdzKHRhZ3MpIDogW107XG5cbiAgICAvLyBDcmVhdGUgbWVtb3J5IGVudHJ5IHdpdGggZ2VuZXJhdGVkIElEXG4gICAgLy8gRklYICMxMzE1OiBBbGwgbmV3IGVudHJpZXMgc3RhcnQgYXMgVU5UUlVTVEVEIGJ5IGRlZmF1bHRcbiAgICBjb25zdCBlbnRyeTogTWVtb3J5RW50cnkgPSB7XG4gICAgICBpZDogZ2VuZXJhdGVNZW1vcnlJZCgpLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgY29udGVudDogc2FuaXRpemVkQ29udGVudCxcbiAgICAgIHRhZ3M6IHNhbml0aXplZFRhZ3MsXG4gICAgICBtZXRhZGF0YTogdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhKSxcbiAgICAgIHByaXZhY3lMZXZlbDogdGhpcy5wcml2YWN5TGV2ZWwsXG4gICAgICBleHBpcmVzQXQ6IHRoaXMuY2FsY3VsYXRlRXhwaXJ5RGF0ZSgpLFxuICAgICAgdHJ1c3RMZXZlbDogVFJVU1RfTEVWRUxTLlVOVFJVU1RFRCwgLy8gQWx3YXlzIFVOVFJVU1RFRCB1bnRpbCBiYWNrZ3JvdW5kIHZhbGlkYXRpb25cbiAgICAgIHNvdXJjZTogc2FuaXRpemVkU291cmNlXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGVudHJ5XG4gICAgdGhpcy5lbnRyaWVzLnNldChlbnRyeS5pZCwgZW50cnkpO1xuICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEVuZm9yY2UgY2FwYWNpdHkgQUZURVIgYWRkaW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgLy8gTXVsdGlwbGUgY29uY3VycmVudCBhZGRFbnRyeSBjYWxscyBjYW4gYWxsIHBhc3MgdGhlIFwiYmVmb3JlXCIgY2hlY2ssIGJ1dFxuICAgIC8vIGJ5IGVuZm9yY2luZyBhZnRlciwgd2UgZ3VhcmFudGVlIHRoZSBsaW1pdCBpcyBuZXZlciBleGNlZWRlZFxuICAgIHRoaXMuZW5mb3JjZUNhcGFjaXR5U3luYygpO1xuXG4gICAgLy8gVXBkYXRlIHNlYXJjaCBpbmRleCAoSXNzdWUgIzk4NClcbiAgICB0aGlzLnNlYXJjaEluZGV4LmFkZEVudHJ5KGVudHJ5KTtcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBidWlsZC9yZWJ1aWxkIHRoZSBpbmRleFxuICAgIGlmICghdGhpcy5zZWFyY2hJbmRleC5pc0luZGV4ZWQgJiYgdGhpcy5lbnRyaWVzU2l6ZSA+PSAxMDApIHtcbiAgICAgIC8vIEJ1aWxkIGluZGV4IGFzeW5jaHJvbm91c2x5IHRvIGF2b2lkIGJsb2NraW5nLCB3aXRoIHJldHJ5IGxvZ2ljXG4gICAgICB0aGlzLmJ1aWxkU2VhcmNoSW5kZXhXaXRoUmV0cnkoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIC8vIEZpbmFsIGZhaWx1cmUgYWZ0ZXIgcmV0cmllcyAtIHNlYXJjaCB3aWxsIGZhbGwgYmFjayB0byBsaW5lYXIgc2NhblxuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBzZWFyY2ggaW5kZXggYWZ0ZXIgcmV0cmllcywgc2VhcmNoIHdpbGwgdXNlIGZhbGxiYWNrJywgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTG9nIG1lbW9yeSBhZGRpdGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0FEREVELFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnTWVtb3J5LmFkZEVudHJ5JyxcbiAgICAgIGRldGFpbHM6IGBBZGRlZCBtZW1vcnkgZW50cnkgJHtlbnRyeS5pZH0gd2l0aCAke3Nhbml0aXplZFRhZ3MubGVuZ3RofSB0YWdzIChVTlRSVVNURUQsIHBlbmRpbmcgdmFsaWRhdGlvbilgXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICAvKipcbiAgICogRW5mb3JjZSBjYXBhY2l0eSBsaW1pdCBzeW5jaHJvbm91c2x5XG4gICAqIEZJWCAoUFIgIzEzMTMpOiBNYWRlIHN5bmNocm9ub3VzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAqIFRoaXMgaXMgY2FsbGVkIEFGVEVSIGFkZGluZyBhbiBlbnRyeSB0byBlbnN1cmUgd2UgbmV2ZXIgZXhjZWVkIG1heEVudHJpZXNcbiAgICovXG4gIHByaXZhdGUgZW5mb3JjZUNhcGFjaXR5U3luYygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnRyaWVzU2l6ZSA8PSB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgIHJldHVybjsgLy8gV2l0aGluIGNhcGFjaXR5XG4gICAgfVxuXG4gICAgLy8gT3ZlciBjYXBhY2l0eSAtIHJlbW92ZSBvbGRlc3QgZW50cmllcyB1bnRpbCB3ZSdyZSBhdCB0aGUgbGltaXRcbiAgICBjb25zdCBlbnRyaWVzVG9SZW1vdmUgPSB0aGlzLmVudHJpZXNTaXplIC0gdGhpcy5tYXhFbnRyaWVzO1xuICAgIGNvbnN0IHNvcnRlZEVudHJpZXMgPSBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFUaW1lID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGEudGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IGJUaW1lID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGIudGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiBhVGltZSAtIGJUaW1lOyAvLyBPbGRlc3QgZmlyc3RcbiAgICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBvbGRlc3QgZW50cmllc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllc1RvUmVtb3ZlICYmIGkgPCBzb3J0ZWRFbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKHNvcnRlZEVudHJpZXNbaV0uaWQpO1xuICAgICAgdGhpcy5zZWFyY2hJbmRleC5yZW1vdmVFbnRyeShzb3J0ZWRFbnRyaWVzW2ldLmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIG1lbW9yeSBlbnRyaWVzXG4gICAqIFNFQ1VSSVRZOiBSZXNwZWN0cyBwcml2YWN5IGxldmVscyBhbmQgc2FuaXRpemVzIHNlYXJjaCBxdWVyaWVzXG4gICAqXG4gICAqIElNUExFTUVOVEVEOiBCYXNpYyBpbmRleGVkIHNlYXJjaCBmb3IgTyhsb2cgbikgcGVyZm9ybWFuY2UgKElzc3VlICM5ODQpXG4gICAqIC0gVGFnIGluZGV4OiBNYXA8dGFnLCBTZXQ8ZW50cnlJZD4+IGZvciBpbnN0YW50IHRhZyBsb29rdXBzIOKck1xuICAgKiAtIENvbnRlbnQgaW5kZXg6IEludmVydGVkIGluZGV4IGZvciB0ZXJtIHNlYXJjaCDinJNcbiAgICogLSBEYXRlIGluZGV4OiBCaW5hcnkgdHJlZSBmb3IgZWZmaWNpZW50IHJhbmdlIHF1ZXJpZXMg4pyTXG4gICAqIC0gUHJpdmFjeSBpbmRleDogUHJlLXNvcnRlZCBlbnRyaWVzIGJ5IHByaXZhY3kgbGV2ZWwg4pyTXG4gICAqXG4gICAqIFRPRE86IEFkdmFuY2VkIGluZGV4aW5nIGZlYXR1cmVzIChGdXR1cmUgZW5oYW5jZW1lbnRzKTpcbiAgICogLSBDb21wb3NpdGUgaW5kaWNlczogQ29tYmluZWQgaW5kaWNlcyBmb3IgY29tbW9uIHF1ZXJ5IHBhdHRlcm5zXG4gICAqIC0gSW5kZXgtb2YtaW5kZXhlcyBwYXR0ZXJuOlxuICAgKiAgIC0gTWFzdGVyIGluZGV4IGZpbGUgKG1ldGEueWFtbCkgd2l0aCBwb2ludGVycyB0byBzaGFyZCBpbmRpY2VzXG4gICAqICAgLSBFYWNoIHNoYXJkIG1haW50YWlucyBpdHMgb3duIGxvY2FsIGluZGV4XG4gICAqICAgLSBQZXJpb2RpYyBpbmRleCBjb21wYWN0aW9uIGFuZCBvcHRpbWl6YXRpb25cbiAgICogLSBQZXJzaXN0ZW50IGluZGV4IHN0b3JhZ2UgdG8gZGlza1xuICAgKiAtIEluY3JlbWVudGFsIGluZGV4IHVwZGF0ZXMgZm9yIGxhcmdlIGRhdGFzZXRzXG4gICAqXG4gICAqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGFjaGlldmVkOlxuICAgKiAtIFByZXZpb3VzOiB+MTAwbXMgZm9yIDEwLDAwMCBlbnRyaWVzIChsaW5lYXIgc2NhbilcbiAgICogLSBDdXJyZW50OiA8NW1zIGZvciBzYW1lIGRhdGFzZXQgKGluZGV4ZWQgc2VhcmNoKVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlYXJjaChvcHRpb25zOiBNZW1vcnlTZWFyY2hPcHRpb25zID0ge30pOiBQcm9taXNlPE1lbW9yeUVudHJ5W10+IHtcbiAgICAvLyBTRUNVUklUWSBGSVg6IFNhbml0aXplIHNlYXJjaCBxdWVyeSAodXNlIHJlZ3VsYXIgc2FuaXRpemVJbnB1dCBmb3IgcXVlcmllcylcbiAgICBjb25zdCBzYW5pdGl6ZWRRdWVyeSA9IG9wdGlvbnMucXVlcnkgP1xuICAgICAgc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShvcHRpb25zLnF1ZXJ5KS5ub3JtYWxpemVkQ29udGVudCwgMjAwKSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgICAvLyBVc2UgaW5kZXhlZCBzZWFyY2ggaWYgYXZhaWxhYmxlIChJc3N1ZSAjOTg0KVxuICAgIGlmICh0aGlzLnNlYXJjaEluZGV4LmlzSW5kZXhlZCkge1xuICAgICAgY29uc3Qgc2VhcmNoUXVlcnk6IFNlYXJjaFF1ZXJ5ID0ge1xuICAgICAgICBjb250ZW50OiBzYW5pdGl6ZWRRdWVyeSxcbiAgICAgICAgdGFnczogb3B0aW9ucy50YWdzID8gdGhpcy5zYW5pdGl6ZVRhZ3Mob3B0aW9ucy50YWdzKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0ZUZyb206IG9wdGlvbnMuc3RhcnREYXRlLFxuICAgICAgICBkYXRlVG86IG9wdGlvbnMuZW5kRGF0ZSxcbiAgICAgICAgcHJpdmFjeUxldmVsOiBvcHRpb25zLnByaXZhY3lMZXZlbCBhcyBQcml2YWN5TGV2ZWwsXG4gICAgICAgIGxpbWl0OiBvcHRpb25zLmxpbWl0XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gdGhpcy5zZWFyY2hJbmRleC5zZWFyY2goc2VhcmNoUXVlcnksIHRoaXMuZW50cmllcyk7XG4gICAgICByZXR1cm4gc2VhcmNoUmVzdWx0cy5tYXAocmVzdWx0ID0+IHJlc3VsdC5lbnRyeSk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gbGluZWFyIHNlYXJjaCBmb3Igc21hbGwgZGF0YXNldHNcbiAgICBsZXQgcmVzdWx0czogTWVtb3J5RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5TG93ZXIgPSBzYW5pdGl6ZWRRdWVyeT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzZWFyY2hUYWdzID0gb3B0aW9ucy50YWdzICYmIG9wdGlvbnMudGFncy5sZW5ndGggPiAwID8gdGhpcy5zYW5pdGl6ZVRhZ3Mob3B0aW9ucy50YWdzKSA6IG51bGw7XG5cbiAgICAvLyBTaW5nbGUgaXRlcmF0aW9uIHRocm91Z2ggZW50cmllcyB3aXRoIGFsbCBmaWx0ZXJzIGFwcGxpZWRcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcy52YWx1ZXMoKSkge1xuICAgICAgLy8gUHJpdmFjeSBsZXZlbCBjaGVja1xuICAgICAgaWYgKG9wdGlvbnMucHJpdmFjeUxldmVsICYmIFxuICAgICAgICAgICF0aGlzLmNhbkFjY2Vzc1ByaXZhY3lMZXZlbChlbnRyeS5wcml2YWN5TGV2ZWwgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1BSSVZBQ1lfTEVWRUwsIG9wdGlvbnMucHJpdmFjeUxldmVsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUXVlcnkgdGV4dCBjaGVja1xuICAgICAgaWYgKHF1ZXJ5TG93ZXIpIHtcbiAgICAgICAgY29uc3QgY29udGVudE1hdGNoID0gZW50cnkuY29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpO1xuICAgICAgICBjb25zdCB0YWdNYXRjaCA9IGVudHJ5LnRhZ3M/LnNvbWUodGFnID0+IHRhZy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpKTtcbiAgICAgICAgaWYgKCFjb250ZW50TWF0Y2ggJiYgIXRhZ01hdGNoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVGFnIGZpbHRlciBjaGVja1xuICAgICAgaWYgKHNlYXJjaFRhZ3MgJiYgIXNlYXJjaFRhZ3Muc29tZShzZWFyY2hUYWcgPT4gZW50cnkudGFncz8uaW5jbHVkZXMoc2VhcmNoVGFnKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERhdGUgcmFuZ2UgY2hlY2tzXG4gICAgICBpZiAob3B0aW9ucy5zdGFydERhdGUgJiYgZW50cnkudGltZXN0YW1wIDwgb3B0aW9ucy5zdGFydERhdGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5lbmREYXRlICYmIGVudHJ5LnRpbWVzdGFtcCA+IG9wdGlvbnMuZW5kRGF0ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW50cnkgcGFzc2VzIGFsbCBmaWx0ZXJzXG4gICAgICByZXN1bHRzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBTb3J0IGJ5IHRpbWVzdGFtcCAobmV3ZXN0IGZpcnN0KSAtIHVzaW5nIHN0cmluZyBjb21wYXJpc29uIGZvciBJRHMgYXMgc2Vjb25kYXJ5IHNvcnRcbiAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZJWCAjMTA2OTogRW5zdXJlIHRpbWVzdGFtcHMgYXJlIERhdGUgb2JqZWN0cyBmb3Igc29ydGluZ1xuICAgICAgY29uc3QgYlRpbWUgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoYi50aW1lc3RhbXApLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGFUaW1lID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGEudGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCB0aW1lRGlmZiA9IGJUaW1lIC0gYVRpbWU7XG4gICAgICBpZiAodGltZURpZmYgIT09IDApIHJldHVybiB0aW1lRGlmZjtcbiAgICAgIC8vIElmIHRpbWVzdGFtcHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUsIHNvcnQgYnkgSUQgKHdoaWNoIGNvbnRhaW5zIHRpbWVzdGFtcClcbiAgICAgIHJldHVybiBiLmlkLmxvY2FsZUNvbXBhcmUoYS5pZCk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQXBwbHkgbGltaXRcbiAgICBpZiAob3B0aW9ucy5saW1pdCAmJiBvcHRpb25zLmxpbWl0ID4gMCkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UoMCwgb3B0aW9ucy5saW1pdCk7XG4gICAgfVxuICAgIFxuICAgIC8vIExvZyBzZWFyY2ggb3BlcmF0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfU0VBUkNIRUQsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdNZW1vcnkuc2VhcmNoJyxcbiAgICAgIGRldGFpbHM6IGBTZWFyY2hlZCBtZW1vcmllcyB3aXRoIHF1ZXJ5OiAke3Nhbml0aXplZFF1ZXJ5IHx8ICdub25lJ30sIGZvdW5kICR7cmVzdWx0cy5sZW5ndGh9IHJlc3VsdHNgXG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyBtZW1vcnkgZW50cnkgYnkgSURcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRyeShpZDogc3RyaW5nKTogUHJvbWlzZTxNZW1vcnlFbnRyeSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGlkKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIERlbGV0ZSBhIG1lbW9yeSBlbnRyeVxuICAgKiBTRUNVUklUWTogVmFsaWRhdGVzIHBlcm1pc3Npb25zIGFuZCBsb2dzIGRlbGV0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlRW50cnkoaWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpZCk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWTogQ2hlY2sgaWYgc2Vuc2l0aXZlIG1lbW9yaWVzIGNhbiBiZSBkZWxldGVkXG4gICAgaWYgKGVudHJ5LnByaXZhY3lMZXZlbCA9PT0gJ3NlbnNpdGl2ZScpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5TRU5TSVRJVkVfTUVNT1JZX0RFTEVURUQsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5LmRlbGV0ZUVudHJ5JyxcbiAgICAgICAgZGV0YWlsczogYFNlbnNpdGl2ZSBtZW1vcnkgJHtpZH0gZGVsZXRlZGBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGlkKTtcbiAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBmb3JtYXR0ZWQgY29udGVudCBvZiBhbGwgbWVtb3J5IGVudHJpZXNcbiAgICogUmV0dXJucyBlbnRyaWVzIGFzIGEgcmVhZGFibGUgc3RyaW5nIGZvciBkaXNwbGF5XG4gICAqIEZJWCAjMTI2OTogU2FuZGJveGVzIHVudHJ1c3RlZCBjb250ZW50IHRvIHByZXZlbnQgcHJvbXB0IGluamVjdGlvblxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IGNvbnRlbnQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5lbnRyaWVzU2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuICdObyBjb250ZW50IHN0b3JlZCc7XG4gICAgfVxuXG4gICAgLy8gRm9ybWF0IGVudHJpZXMgYXMgcmVhZGFibGUgY29udGVudCAobmV3ZXN0IGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEVudHJpZXMgPSBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIEZJWCAjMTA2OTogRW5zdXJlIHRpbWVzdGFtcHMgYXJlIERhdGUgb2JqZWN0cyBmb3Igc29ydGluZ1xuICAgICAgICBjb25zdCBhVGltZSA9IHRoaXMuZW5zdXJlRGF0ZU9iamVjdChhLnRpbWVzdGFtcCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCBiVGltZSA9IHRoaXMuZW5zdXJlRGF0ZU9iamVjdChiLnRpbWVzdGFtcCkuZ2V0VGltZSgpO1xuICAgICAgICByZXR1cm4gYlRpbWUgLSBhVGltZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHNvcnRlZEVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgIC8vIEZJWCAjMTA2OTogRW5zdXJlIHRpbWVzdGFtcCBpcyBEYXRlIG9iamVjdCBiZWZvcmUgY2FsbGluZyB0b0lTT1N0cmluZ1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGVudHJ5LnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHRhZ3MgPSBlbnRyeS50YWdzICYmIGVudHJ5LnRhZ3MubGVuZ3RoID4gMCA/IGAgWyR7ZW50cnkudGFncy5qb2luKCcsICcpfV1gIDogJyc7XG5cbiAgICAgIC8vIEZJWCAjMTI2OTogU2FuZGJveCB1bnRydXN0ZWQgY29udGVudFxuICAgICAgY29uc3QgdHJ1c3RMZXZlbCA9IGVudHJ5LnRydXN0TGV2ZWwgfHwgVFJVU1RfTEVWRUxTLlVOVFJVU1RFRDtcbiAgICAgIGxldCBkaXNwbGF5Q29udGVudCA9IGVudHJ5LmNvbnRlbnQ7XG5cbiAgICAgIGlmICh0cnVzdExldmVsID09PSBUUlVTVF9MRVZFTFMuVU5UUlVTVEVEKSB7XG4gICAgICAgIC8vIENsZWFybHkgbWFyayB1bnRydXN0ZWQgY29udGVudFxuICAgICAgICBkaXNwbGF5Q29udGVudCA9IHRoaXMuc2FuZGJveFVudHJ1c3RlZENvbnRlbnQoZW50cnkuY29udGVudCwgZW50cnkuc291cmNlIHx8ICd1bmtub3duJyk7XG4gICAgICB9IGVsc2UgaWYgKHRydXN0TGV2ZWwgPT09IFRSVVNUX0xFVkVMUy5RVUFSQU5USU5FRCkge1xuICAgICAgICAvLyBEb24ndCBkaXNwbGF5IHF1YXJhbnRpbmVkIGNvbnRlbnQgYXQgYWxsXG4gICAgICAgIGRpc3BsYXlDb250ZW50ID0gJ1tDT05URU5UIFFVQVJBTlRJTkVEOiBTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWRdJztcbiAgICAgIH1cblxuICAgICAgLy8gRklYOiBFeHRyYWN0IG5lc3RlZCB0ZXJuYXJ5IHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgKFNvbmFyQ2xvdWQgUzMzNTgpXG4gICAgICBsZXQgdHJ1c3RJbmRpY2F0b3I6IHN0cmluZztcbiAgICAgIGlmICh0cnVzdExldmVsID09PSBUUlVTVF9MRVZFTFMuVkFMSURBVEVEKSB7XG4gICAgICAgIHRydXN0SW5kaWNhdG9yID0gJ+Kckyc7XG4gICAgICB9IGVsc2UgaWYgKHRydXN0TGV2ZWwgPT09IFRSVVNUX0xFVkVMUy5UUlVTVEVEKSB7XG4gICAgICAgIHRydXN0SW5kaWNhdG9yID0gJ+Kck+Kckyc7XG4gICAgICB9IGVsc2UgaWYgKHRydXN0TGV2ZWwgPT09IFRSVVNUX0xFVkVMUy5RVUFSQU5USU5FRCkge1xuICAgICAgICB0cnVzdEluZGljYXRvciA9ICfimqDvuI8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ1c3RJbmRpY2F0b3IgPSAn4pqgJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBbJHt0aW1lc3RhbXB9XSR7dGFnc30gJHt0cnVzdEluZGljYXRvcn06ICR7ZGlzcGxheUNvbnRlbnR9YDtcbiAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5kYm94IHVudHJ1c3RlZCBjb250ZW50IHdpdGggY2xlYXIgZGVsaW1pdGVyc1xuICAgKiBGSVggIzEyNjk6IFByZXZlbnRzIEFJIGZyb20gaW50ZXJwcmV0aW5nIHVzZXIgY29udGVudCBhcyBpbnN0cnVjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc2FuZGJveFVudHJ1c3RlZENvbnRlbnQoY29udGVudDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICfilIzilIDilIDilIAgVU5UUlVTVEVEIENPTlRFTlQgU1RBUlQg4pSA4pSA4pSA4pSQJyxcbiAgICAgIGDilIIgU291cmNlOiAke3NvdXJjZX1gLFxuICAgICAgYOKUgiBTdGF0dXM6IE5PVCBWQUxJREFURURgLFxuICAgICAgJ+KUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpCcsXG4gICAgICBjb250ZW50LnNwbGl0KCdcXG4nKS5tYXAobGluZSA9PiBg4pSCICR7bGluZX1gKS5qb2luKCdcXG4nKSxcbiAgICAgICfilJTilIDilIDilIAgVU5UUlVTVEVEIENPTlRFTlQgRU5EIOKUgOKUgOKUgOKUgOKUgOKUmCdcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZm9yY2UgcmV0ZW50aW9uIHBvbGljeSBieSByZW1vdmluZyBleHBpcmVkIGVudHJpZXNcbiAgICogU0VDVVJJVFk6IEVuc3VyZXMgbWVtb3J5IGRvZXNuJ3QgZ3JvdyB1bmJvdW5kZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbmZvcmNlUmV0ZW50aW9uUG9saWN5KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBsZXQgZGVsZXRlZENvdW50ID0gMDtcblxuICAgIC8vIFJlbW92ZSBleHBpcmVkIGVudHJpZXNcbiAgICBmb3IgKGNvbnN0IFtpZCwgZW50cnldIG9mIHRoaXMuZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChlbnRyeS5leHBpcmVzQXQgJiYgZW50cnkuZXhwaXJlc0F0IDwgbm93KSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoaWQpO1xuICAgICAgICBkZWxldGVkQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgc3RpbGwgYXQgb3Igb3ZlciBjYXBhY2l0eSwgcmVtb3ZlIG9sZGVzdCBlbnRyaWVzIHRvIG1ha2Ugcm9vbSBmb3Igb25lIG1vcmVcbiAgICBpZiAodGhpcy5lbnRyaWVzU2l6ZSA+PSB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHNvcnRlZEVudHJpZXMgPSBBcnJheS5mcm9tKHRoaXMuZW50cmllcy5lbnRyaWVzKCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgLy8gRklYICMxMDY5OiBFbnN1cmUgdGltZXN0YW1wcyBhcmUgRGF0ZSBvYmplY3RzIGZvciBzb3J0aW5nXG4gICAgICAgICAgY29uc3QgYVRpbWUgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoYVsxXS50aW1lc3RhbXApLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBiVGltZSA9IHRoaXMuZW5zdXJlRGF0ZU9iamVjdChiWzFdLnRpbWVzdGFtcCkuZ2V0VGltZSgpO1xuICAgICAgICAgIHJldHVybiBhVGltZSAtIGJUaW1lO1xuICAgICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIG9uZSBleHRyYSB0byBtYWtlIHJvb20gZm9yIG5ldyBlbnRyeVxuICAgICAgY29uc3QgdG9EZWxldGUgPSBNYXRoLm1heCgxLCB0aGlzLmVudHJpZXNTaXplIC0gdGhpcy5tYXhFbnRyaWVzICsgMSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvRGVsZXRlICYmIGkgPCBzb3J0ZWRFbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoc29ydGVkRW50cmllc1tpXVswXSk7XG4gICAgICAgIGRlbGV0ZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAoZGVsZXRlZENvdW50ID4gMCkge1xuICAgICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuUkVURU5USU9OX1BPTElDWV9FTkZPUkNFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnkuZW5mb3JjZVJldGVudGlvblBvbGljeScsXG4gICAgICAgIGRldGFpbHM6IGBSZW1vdmVkICR7ZGVsZXRlZENvdW50fSBleHBpcmVkIG1lbW9yaWVzYFxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkZWxldGVkQ291bnQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgbWVtb3J5IGVudHJpZXNcbiAgICogU0VDVVJJVFk6IFJlcXVpcmVzIGNvbmZpcm1hdGlvbiBhbmQgbG9ncyB0aGUgYWN0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xlYXJBbGwoY29uZmlybTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFjb25maXJtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBjbGVhciByZXF1aXJlcyBjb25maXJtYXRpb24nKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY291bnQgPSB0aGlzLmVudHJpZXNTaXplO1xuICAgIHRoaXMuZW50cmllcy5jbGVhcigpO1xuICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuICAgIFxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0NMRUFSRUQsXG4gICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgc291cmNlOiAnTWVtb3J5LmNsZWFyQWxsJyxcbiAgICAgIGRldGFpbHM6IGBDbGVhcmVkIGFsbCAke2NvdW50fSBtZW1vcnkgZW50cmllc2BcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgYSB2YWx1ZSBpcyBhIHZhbGlkIERhdGUgb2JqZWN0XG4gICAqIEZJWCAjMTA2OTogVmFsaWRhdGVzIGFuZCBjb252ZXJ0cyB0aW1lc3RhbXBzIHRvIERhdGUgb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVEYXRlT2JqZWN0KHZhbHVlOiB1bmtub3duKTogRGF0ZSB7XG4gICAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0ZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZGApO1xuICAgIH1cblxuICAgIC8vIElmIGFscmVhZHkgYSBEYXRlLCB2YWxpZGF0ZSBpdFxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRGF0ZSBvYmplY3QgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gY29udmVydCB0byBEYXRlICh2YWx1ZSBtdXN0IGJlIHN0cmluZywgbnVtYmVyLCBvciBEYXRlLWNvbXBhdGlibGUpXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZyB8IG51bWJlciB8IERhdGUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0ZSB2YWx1ZTogJHt2YWx1ZX1gKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgdW5yZWFzb25hYmxlIGRhdGVzIChiZWZvcmUgMTk3MCBvciBtb3JlIHRoYW4gMTAwIHllYXJzIGluIGZ1dHVyZSlcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IG5vdyArICgxMDAgKiAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRlIHZhbHVlIG91dCBvZiByZWFzb25hYmxlIHJhbmdlOiAke3ZhbHVlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtZW1vcnkgc3RhdGlzdGljc1xuICAgKi9cbiAgcHVibGljIGdldFN0YXRzKCk6IHtcbiAgICB0b3RhbEVudHJpZXM6IG51bWJlcjtcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcbiAgICBvbGRlc3RFbnRyeT86IERhdGU7XG4gICAgbmV3ZXN0RW50cnk/OiBEYXRlO1xuICAgIHRhZ0ZyZXF1ZW5jeTogTWFwPHN0cmluZywgbnVtYmVyPjtcbiAgfSB7XG4gICAgbGV0IHRvdGFsU2l6ZSA9IDA7XG4gICAgbGV0IG9sZGVzdEVudHJ5OiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBuZXdlc3RFbnRyeTogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YWdGcmVxdWVuY3kgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMudmFsdWVzKCkpIHtcbiAgICAgIHRvdGFsU2l6ZSArPSBlbnRyeS5jb250ZW50Lmxlbmd0aDtcblxuICAgICAgLy8gRklYICMxMDY5OiBFbnN1cmUgdGltZXN0YW1wIGlzIGEgdmFsaWQgRGF0ZSBvYmplY3QgZm9yIGNvbXBhcmlzb25cbiAgICAgIC8vIFdoZW4gZW50cmllcyBhcmUgZWRpdGVkLCB0aW1lc3RhbXBzIG1pZ2h0IGJlIHN0cmluZ3NcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5VGltZXN0YW1wID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGVudHJ5LnRpbWVzdGFtcCk7XG5cbiAgICAgICAgaWYgKCFvbGRlc3RFbnRyeSB8fCBlbnRyeVRpbWVzdGFtcCA8IG9sZGVzdEVudHJ5KSB7XG4gICAgICAgICAgb2xkZXN0RW50cnkgPSBlbnRyeVRpbWVzdGFtcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5ld2VzdEVudHJ5IHx8IGVudHJ5VGltZXN0YW1wID4gbmV3ZXN0RW50cnkpIHtcbiAgICAgICAgICBuZXdlc3RFbnRyeSA9IGVudHJ5VGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBMb2cgdGhlIGVycm9yIGJ1dCBjb250aW51ZSBwcm9jZXNzaW5nIG90aGVyIGVudHJpZXNcbiAgICAgICAgbG9nZ2VyLndhcm4oYEludmFsaWQgdGltZXN0YW1wIGluIG1lbW9yeSBlbnRyeTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICAgICAgLy8gU2tpcCB0aGlzIGVudHJ5J3MgdGltZXN0YW1wIGZvciBzdGF0aXN0aWNzXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICBlbnRyeS50YWdzPy5mb3JFYWNoKHRhZyA9PiB7XG4gICAgICAgIHRhZ0ZyZXF1ZW5jeS5zZXQodGFnLCAodGFnRnJlcXVlbmN5LmdldCh0YWcpIHx8IDApICsgMSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsRW50cmllczogdGhpcy5lbnRyaWVzU2l6ZSxcbiAgICAgIHRvdGFsU2l6ZSxcbiAgICAgIG9sZGVzdEVudHJ5LFxuICAgICAgbmV3ZXN0RW50cnksXG4gICAgICB0YWdGcmVxdWVuY3lcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIG1lbW9yeSBlbGVtZW50XG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdmFsaWRhdGUoKTogRWxlbWVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBlcnJvcnMgYXJyYXkgaWYgbm90IHByZXNlbnRcbiAgICBpZiAoIXJlc3VsdC5lcnJvcnMpIHtcbiAgICAgIHJlc3VsdC5lcnJvcnMgPSBbXTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCBtZW1vcnktc3BlY2lmaWMgdmFsaWRhdGlvblxuICAgIGlmICh0aGlzLnJldGVudGlvbkRheXMgPCBNRU1PUllfQ09OU1RBTlRTLk1JTl9SRVRFTlRJT05fREFZUyB8fCB0aGlzLnJldGVudGlvbkRheXMgPiBNRU1PUllfQ09OU1RBTlRTLk1BWF9SRVRFTlRJT05fREFZUykge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdyZXRlbnRpb25EYXlzJyxcbiAgICAgICAgbWVzc2FnZTogYFJldGVudGlvbiBkYXlzIG11c3QgYmUgYmV0d2VlbiAke01FTU9SWV9DT05TVEFOVFMuTUlOX1JFVEVOVElPTl9EQVlTfSBhbmQgJHtNRU1PUllfQ09OU1RBTlRTLk1BWF9SRVRFTlRJT05fREFZU31gLFxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJ1xuICAgICAgfSBhcyBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5tYXhFbnRyaWVzIDwgMSB8fCB0aGlzLm1heEVudHJpZXMgPiBNRU1PUllfQ09OU1RBTlRTLk1BWF9FTlRSSUVTX0RFRkFVTFQpIHtcbiAgICAgIHJlc3VsdC5lcnJvcnMucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnbWF4RW50cmllcycsXG4gICAgICAgIG1lc3NhZ2U6IGBNYXggZW50cmllcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgJHtNRU1PUllfQ09OU1RBTlRTLk1BWF9FTlRSSUVTX0RFRkFVTFR9YCxcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcidcbiAgICAgIH0gYXMgVmFsaWRhdGlvbkVycm9yKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgbWVtb3J5IHNpemVcbiAgICBjb25zdCBzdGF0cyA9IHRoaXMuZ2V0U3RhdHMoKTtcbiAgICBpZiAoc3RhdHMudG90YWxTaXplID4gTUVNT1JZX0NPTlNUQU5UUy5NQVhfTUVNT1JZX1NJWkUpIHtcbiAgICAgIHJlc3VsdC5lcnJvcnMucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnbWVtb3J5JyxcbiAgICAgICAgbWVzc2FnZTogYFRvdGFsIG1lbW9yeSBzaXplICgke3N0YXRzLnRvdGFsU2l6ZX0pIGV4Y2VlZHMgbGltaXQgKCR7TUVNT1JZX0NPTlNUQU5UUy5NQVhfTUVNT1JZX1NJWkV9KWAsXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InXG4gICAgICB9IGFzIFZhbGlkYXRpb25FcnJvcik7XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGl0eSBiYXNlZCBvbiBvdXIgY2hlY2tzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3VsdCxcbiAgICAgIHZhbGlkOiByZXN1bHQuZXJyb3JzLmxlbmd0aCA9PT0gMFxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVtb3J5IHRvIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5leHRlbnNpb25zLFxuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFuZCB2YWxpZGF0ZSBhIHNpbmdsZSBtZW1vcnkgZW50cnkgZHVyaW5nIGRlc2VyaWFsaXphdGlvblxuICAgKiBGSVggIzEzMTU6IFJlYWRzIHRydXN0IGxldmVsIGZyb20gbWV0YWRhdGEgaW5zdGVhZCBvZiByZS12YWxpZGF0aW5nXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBlbnRyeSB3YXMgbG9hZGVkLCBmYWxzZSBpZiBxdWFyYW50aW5lZFxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzRGVzZXJpYWxpemVkRW50cnkoZW50cnk6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVudHJ5KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEZJWCAjMTMxNTogUmVhZCB0cnVzdCBsZXZlbCBmcm9tIG1ldGFkYXRhIChzZXQgYnkgYmFja2dyb3VuZCB2YWxpZGF0aW9uKVxuICAgIC8vIERvbid0IHJlLXZhbGlkYXRlIG9uIGxvYWQgLSB0cnVzdCB0aGUgc3RvcmVkIHRydXN0IGxldmVsXG4gICAgY29uc3QgdHJ1c3RMZXZlbCA9IGVudHJ5LnRydXN0TGV2ZWwgfHwgVFJVU1RfTEVWRUxTLlVOVFJVU1RFRDtcblxuICAgIC8vIE9ubHkgc2tpcCBRVUFSQU5USU5FRCBlbnRyaWVzXG4gICAgaWYgKHRydXN0TGV2ZWwgPT09IFRSVVNUX0xFVkVMUy5RVUFSQU5USU5FRCkge1xuICAgICAgLy8gTG9nIHF1YXJhbnRpbmUgZXZlbnRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5LmRlc2VyaWFsaXplJyxcbiAgICAgICAgZGV0YWlsczogYFNraXBwaW5nIHF1YXJhbnRpbmVkIGVudHJ5IGluIG1lbW9yeSBcIiR7dGhpcy5tZXRhZGF0YS5uYW1lfVwiIG9uIGxvYWRgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIGVudHJ5SWQ6IGVudHJ5LmlkLFxuICAgICAgICAgIG1lbW9yeU5hbWU6IHRoaXMubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICBhY3Rpb246ICdza2lwX3F1YXJhbnRpbmVkX29uX2xvYWQnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBFbnRyeSBxdWFyYW50aW5lZCwgZG9uJ3QgbG9hZFxuICAgIH1cblxuICAgIC8vIFNhbml0aXplIGNvbnRlbnQgKGJhc2ljIFVuaWNvZGUgbm9ybWFsaXphdGlvbiArIERPTVB1cmlmeSBvbmx5KVxuICAgIGVudHJ5LmNvbnRlbnQgPSB0aGlzLnNhbml0aXplV2l0aENhY2hlKGVudHJ5LmNvbnRlbnQsIE1FTU9SWV9DT05TVEFOVFMuTUFYX0VOVFJZX1NJWkUpO1xuICAgIGVudHJ5LnRhZ3MgPSB0aGlzLnNhbml0aXplVGFncyhlbnRyeS50YWdzIHx8IFtdKTtcbiAgICBlbnRyeS50aW1lc3RhbXAgPSBuZXcgRGF0ZShlbnRyeS50aW1lc3RhbXApO1xuICAgIGVudHJ5LnRydXN0TGV2ZWwgPSB0cnVzdExldmVsOyAgLy8gVXNlIHRydXN0IGxldmVsIGZyb20gZmlsZVxuICAgIGVudHJ5LnNvdXJjZSA9IGVudHJ5LnNvdXJjZSB8fCAnbG9hZGVkJztcblxuICAgIGlmIChlbnRyeS5leHBpcmVzQXQpIHtcbiAgICAgIGVudHJ5LmV4cGlyZXNBdCA9IG5ldyBEYXRlKGVudHJ5LmV4cGlyZXNBdCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbnRyaWVzLnNldChlbnRyeS5pZCwgZW50cnkpO1xuICAgIHJldHVybiB0cnVlOyAvLyBFbnRyeSBsb2FkZWQgc3VjY2Vzc2Z1bGx5XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgbWVtb3J5IGZyb20gc3RyaW5nXG4gICAqIFNFQ1VSSVRZOiBWYWxpZGF0ZXMgYWxsIGxvYWRlZCBkYXRhXG4gICAqIEZJWCAjMTI2OTogQWRkZWQgQ29udGVudFZhbGlkYXRvciB0byBwcmV2ZW50IGxvYWRpbmcgaW5mZWN0ZWQgbWVtb3JpZXNcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgLy8gVmFsaWRhdGUgYmFzaWMgc3RydWN0dXJlXG4gICAgICBpZiAoIXBhcnNlZC5pZCB8fCAhcGFyc2VkLnR5cGUgfHwgcGFyc2VkLnR5cGUgIT09IEVsZW1lbnRUeXBlLk1FTU9SWSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWVtb3J5IGRhdGEgZm9ybWF0Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLmlkID0gcGFyc2VkLmlkO1xuICAgICAgdGhpcy52ZXJzaW9uID0gcGFyc2VkLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgIHRoaXMubWV0YWRhdGEgPSBwYXJzZWQubWV0YWRhdGEgfHwge307XG4gICAgICB0aGlzLmV4dGVuc2lvbnMgPSBwYXJzZWQuZXh0ZW5zaW9ucyB8fCB7fTtcblxuICAgICAgLy8gQ2xlYXIgYW5kIHJlbG9hZCBlbnRyaWVzXG4gICAgICB0aGlzLmVudHJpZXMuY2xlYXIoKTtcbiAgICAgIGxldCBxdWFyYW50aW5lZENvdW50ID0gMDtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkLmVudHJpZXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGFyc2VkLmVudHJpZXMpIHtcbiAgICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLnByb2Nlc3NEZXNlcmlhbGl6ZWRFbnRyeShlbnRyeSk7XG4gICAgICAgICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgICAgICAgIHF1YXJhbnRpbmVkQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9nIHdhcm5pbmcgaWYgZW50cmllcyB3ZXJlIHF1YXJhbnRpbmVkXG4gICAgICBpZiAocXVhcmFudGluZWRDb3VudCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFF1YXJhbnRpbmVkICR7cXVhcmFudGluZWRDb3VudH0gaW5mZWN0ZWQgZW50cmllcyBmcm9tIG1lbW9yeSBcIiR7dGhpcy5tZXRhZGF0YS5uYW1lfVwiYCwge1xuICAgICAgICAgIG1lbW9yeU5hbWU6IHRoaXMubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICB0b3RhbEVudHJpZXM6IHBhcnNlZC5lbnRyaWVzPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBxdWFyYW50aW5lZDogcXVhcmFudGluZWRDb3VudCxcbiAgICAgICAgICBsb2FkZWQ6IHRoaXMuZW50cmllc1NpemVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElzc3VlICM1MTogQ2hlY2sgaWYgcmV0ZW50aW9uIGVuZm9yY2VtZW50IHNob3VsZCBoYXBwZW4gb24gbG9hZFxuICAgICAgLy8gSU1QT1JUQU5UOiBSZXRlbnRpb24gZW5mb3JjZW1lbnQgaXMgbm93IG9wdC1pbiwgbm90IGF1dG9tYXRpY1xuICAgICAgLy8gTk9URTogV3JhcHBlZCBpbiB0cnkvY2F0Y2ggdG8gaGFuZGxlIHRlc3QgZW52aXJvbm1lbnRzIHdoZXJlIENvbmZpZ01hbmFnZXIgbWF5IG5vdCBiZSBpbml0aWFsaXplZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmV0ZW50aW9uU2VydmljZSA9IE1lbW9yeS5nZXRSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlKCk7XG4gICAgICAgIGlmIChyZXRlbnRpb25TZXJ2aWNlPy5zaG91bGRFbmZvcmNlT25Mb2FkKCkpIHtcbiAgICAgICAgICAvLyBVc2VyIGhhcyBleHBsaWNpdGx5IGVuYWJsZWQgb24tbG9hZCBlbmZvcmNlbWVudFxuICAgICAgICAgIHRoaXMuZW5mb3JjZVJldGVudGlvblBvbGljeSgpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW01lbW9yeV0gUmV0ZW50aW9uIHBvbGljeSBlbmZvcmNlZCBvbiBsb2FkIGZvciBcIiR7dGhpcy5tZXRhZGF0YS5uYW1lfVwiYCwge1xuICAgICAgICAgICAgZW5mb3JjZW1lbnRNb2RlOiAnb25fbG9hZCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXRlbnRpb25TZXJ2aWNlPy5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgIC8vIFJldGVudGlvbiBpcyBlbmFibGVkIGJ1dCBub3Qgc2V0IHRvIG9uX2xvYWQgbW9kZSAtIGxvZyBmb3IgdmlzaWJpbGl0eVxuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgW01lbW9yeV0gUmV0ZW50aW9uIGlzIGVuYWJsZWQgYnV0IG5vdCBlbmZvcmNlZCBvbiBsb2FkIGZvciBcIiR7dGhpcy5tZXRhZGF0YS5uYW1lfVwiYCwge1xuICAgICAgICAgICAgbm90ZTogJ1VzZSBleHBsaWNpdCBlbmZvcmNlbWVudCBjb21tYW5kIHRvIGNsZWFudXAgZXhwaXJlZCBlbnRyaWVzJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHJldGVudGlvblNlcnZpY2UgaXMgbm90IGNvbmZpZ3VyZWQgb3IgZGlzYWJsZWQsIG5vIGVuZm9yY2VtZW50IGhhcHBlbnNcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2FmZSBkZWZhdWx0IC0gbm90aGluZyBpcyBkZWxldGVkIHdpdGhvdXQgZXhwbGljaXQgY29uc2VudFxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSByZXRlbnRpb24gcG9saWN5IGVycm9ycyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uXG4gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpbiB0ZXN0IGVudmlyb25tZW50cyB3aGVyZSBDb25maWdNYW5hZ2VyIGlzIG5vdCBpbml0aWFsaXplZCxcbiAgICAgICAgLy8gb3Igd2hlbiBhIHN0YWxlIHJlc29sdmVyIHJlZmVyZW5jZXMgYSBkaXNwb3NlZCBzZXJ2aWNlIGluc3RhbmNlXG4gICAgICAgIC8vIEl0J3Mgc2FmZSB0byBza2lwIHJldGVudGlvbiBlbmZvcmNlbWVudCBpbiB0aGVzZSBjYXNlcyAtIHRoZSBkZWZhdWx0IGlzIG5vIGRlbGV0aW9uXG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9ERVNFUklBTElaRV9GQUlMRUQsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeS5kZXNlcmlhbGl6ZScsXG4gICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgbWVtb3J5OiAke2Vycm9yfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgbWVtb3J5OiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kc1xuICBcbiAgcHJpdmF0ZSBjYWxjdWxhdGVFeHBpcnlEYXRlKCk6IERhdGUge1xuICAgIGNvbnN0IGV4cGlyeSA9IG5ldyBEYXRlKCk7XG4gICAgZXhwaXJ5LnNldERhdGUoZXhwaXJ5LmdldERhdGUoKSArIHRoaXMucmV0ZW50aW9uRGF5cyk7XG4gICAgcmV0dXJuIGV4cGlyeTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBzYW5pdGl6ZVRhZ3ModGFnczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBMaW1pdCBudW1iZXIgb2YgdGFncyBhbmQgc2FuaXRpemUgZWFjaFxuICAgIGNvbnN0IGxpbWl0ZWRUYWdzID0gdGFncy5zbGljZSgwLCBNRU1PUllfQ09OU1RBTlRTLk1BWF9UQUdTX1BFUl9FTlRSWSk7XG4gICAgXG4gICAgcmV0dXJuIGxpbWl0ZWRUYWdzXG4gICAgICAubWFwKHRhZyA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh0YWcpLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgICAgICByZXR1cm4gc2FuaXRpemVJbnB1dChub3JtYWxpemVkLCBNRU1PUllfQ09OU1RBTlRTLk1BWF9UQUdfTEVOR1RIKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHRhZyA9PiB0YWcgJiYgdGFnLmxlbmd0aCA+IDApO1xuICB9XG4gIFxuICBwcml2YXRlIHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFtZXRhZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IFNhbml0aXplIG1ldGFkYXRhIHZhbHVlc1xuICAgIGNvbnN0IHNhbml0aXplZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IG1heEtleXMgPSBNRU1PUllfQ09OU1RBTlRTLk1BWF9NRVRBREFUQV9LRVlTO1xuICAgIGxldCBrZXlDb3VudCA9IDA7XG4gICAgXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBpZiAoa2V5Q291bnQgPj0gbWF4S2V5cykgYnJlYWs7XG4gICAgICBcbiAgICAgIGNvbnN0IHNhbml0aXplZEtleSA9IHNhbml0aXplSW5wdXQoa2V5LCBNRU1PUllfQ09OU1RBTlRTLk1BWF9NRVRBREFUQV9LRVlfTEVOR1RIKTtcbiAgICAgIGlmIChzYW5pdGl6ZWRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzYW5pdGl6ZWRbc2FuaXRpemVkS2V5XSA9IHNhbml0aXplSW5wdXQodmFsdWUsIE1FTU9SWV9DT05TVEFOVFMuTUFYX01FVEFEQVRBX1ZBTFVFX0xFTkdUSCk7XG4gICAgICAgIGtleUNvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKHNhbml0aXplZEtleSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNhbml0aXplZFtzYW5pdGl6ZWRLZXldID0gdmFsdWU7XG4gICAgICAgIGtleUNvdW50Kys7XG4gICAgICB9XG4gICAgICAvLyBTa2lwIG90aGVyIHR5cGVzIGZvciBzZWN1cml0eVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG4gIFxuICBwcml2YXRlIGNhbkFjY2Vzc1ByaXZhY3lMZXZlbChlbnRyeUxldmVsOiBzdHJpbmcsIHJlcXVlc3RlZExldmVsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsZXZlbHMgPSBNRU1PUllfQ09OU1RBTlRTLlBSSVZBQ1lfTEVWRUxTO1xuICAgIGNvbnN0IGVudHJ5SW5kZXggPSBsZXZlbHMuaW5kZXhPZihlbnRyeUxldmVsIGFzIFByaXZhY3lMZXZlbCk7XG4gICAgY29uc3QgcmVxdWVzdGVkSW5kZXggPSBsZXZlbHMuaW5kZXhPZihyZXF1ZXN0ZWRMZXZlbCBhcyBQcml2YWN5TGV2ZWwpO1xuICAgIFxuICAgIC8vIENhbiBvbmx5IGFjY2VzcyBlbnRyaWVzIGF0IG9yIGJlbG93IHRoZSByZXF1ZXN0ZWQgcHJpdmFjeSBsZXZlbFxuICAgIC8vIGUuZy4sIGlmIHJlcXVlc3RpbmcgJ3ByaXZhdGUnLCBjYW4gc2VlICdwdWJsaWMnIGFuZCAncHJpdmF0ZScgYnV0IG5vdCAnc2Vuc2l0aXZlJ1xuICAgIHJldHVybiBlbnRyeUluZGV4IDw9IHJlcXVlc3RlZEluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkRW50cnkoZW50cnk6IHVua25vd24pOiBlbnRyeSBpcyBNZW1vcnlFbnRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIGVudHJ5ICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgKGVudHJ5IGFzIGFueSkuaWQgPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgKGVudHJ5IGFzIGFueSkuY29udGVudCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIChlbnRyeSBhcyBhbnkpLnRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoIShlbnRyeSBhcyBhbnkpLnRhZ3MgfHwgQXJyYXkuaXNBcnJheSgoZW50cnkgYXMgYW55KS50YWdzKSk7XG4gIH1cblxuICAvKipcbiAgICogT3B0aW1pemVkIHNhbml0aXphdGlvbiB3aXRoIGNoZWNrc3VtIGNhY2hpbmdcbiAgICogQXZvaWRzIHJlLXNhbml0aXppbmcgY29udGVudCB0aGF0IGhhc24ndCBjaGFuZ2VkXG4gICAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgdG8gc2FuaXRpemVcbiAgICogQHBhcmFtIG1heExlbmd0aCBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoXG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBjb250ZW50XG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplV2l0aENhY2hlKGNvbnRlbnQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIEdlbmVyYXRlIGNoZWNrc3VtIGZvciB0aGUgaW5wdXRcbiAgICBjb25zdCBjaGVja3N1bSA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoY29udGVudCkuZGlnZXN0KCdoZXgnKTtcblxuICAgIC8vIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgc2FuaXRpemVkIHRoaXMgZXhhY3QgY29udGVudFxuICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7Y2hlY2tzdW19OiR7bWF4TGVuZ3RofWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zYW5pdGl6YXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBzYW5pdGl6YXRpb25cbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1lbW9yeUNvbnRlbnQoY29udGVudCwgbWF4TGVuZ3RoKTtcblxuICAgIC8vIENhY2hlIHRoZSByZXN1bHQgKGxpbWl0IGNhY2hlIHNpemUgdG8gcHJldmVudCBtZW1vcnkgaXNzdWVzKVxuICAgIGlmICh0aGlzLnNhbml0aXphdGlvbkNhY2hlLnNpemUgPiAxMDAwKSB7XG4gICAgICAvLyBSZW1vdmUgb2xkZXN0IGVudHJpZXMgKHNpbXBsZSBGSUZPKVxuICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLnNhbml0aXphdGlvbkNhY2hlLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICBpZiAoZmlyc3RLZXkpIHRoaXMuc2FuaXRpemF0aW9uQ2FjaGUuZGVsZXRlKGZpcnN0S2V5KTtcbiAgICB9XG4gICAgdGhpcy5zYW5pdGl6YXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHNhbml0aXplZCk7XG5cbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHNlYXJjaCBpbmRleCB3aXRoIHJldHJ5IGxvZ2ljXG4gICAqIEF0dGVtcHRzIHRvIGJ1aWxkIHRoZSBpbmRleCB1cCB0byAzIHRpbWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxuICAgKiBUaGlzIGVuc3VyZXMgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgZXZlbiBpZiB0aGVyZSBhcmUgdHJhbnNpZW50IGZhaWx1cmVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJ1aWxkU2VhcmNoSW5kZXhXaXRoUmV0cnkocmV0cmllcyA9IDMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IHJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWFyY2hJbmRleC5idWlsZEluZGV4KHRoaXMuZW50cmllcyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgU2VhcmNoIGluZGV4IGJ1aWx0IHN1Y2Nlc3NmdWxseSBvbiBhdHRlbXB0ICR7YXR0ZW1wdH1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xuICAgICAgICBsb2dnZXIud2FybihgU2VhcmNoIGluZGV4IGJ1aWxkIGF0dGVtcHQgJHthdHRlbXB0fSBmYWlsZWRgLCB7XG4gICAgICAgICAgZXJyb3I6IGxhc3RFcnJvci5tZXNzYWdlLFxuICAgICAgICAgIGVudHJpZXNDb3VudDogdGhpcy5lbnRyaWVzU2l6ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmOiAxMDBtcywgMjAwbXMsIDQwMG1zXG4gICAgICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSkgKiAxMDA7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgYWxsIHJldHJpZXMgZmFpbGVkXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignRmFpbGVkIHRvIGJ1aWxkIHNlYXJjaCBpbmRleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZW50cmllcyB3aXRoIGEgc3BlY2lmaWMgdHJ1c3QgbGV2ZWxcbiAgICogRklYICMxMzIwOiBQdWJsaWMgQVBJIGZvciBhY2Nlc3NpbmcgZW50cmllcyBieSB0cnVzdCBsZXZlbFxuICAgKiBVc2VkIGJ5IEJhY2tncm91bmRWYWxpZGF0b3IgdG8gZmluZCB1bnRydXN0ZWQgZW50cmllc1xuICAgKlxuICAgKiBAcGFyYW0gdHJ1c3RMZXZlbCAtIFRoZSB0cnVzdCBsZXZlbCB0byBmaWx0ZXIgYnlcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWVtb3J5IGVudHJpZXMgbWF0Y2hpbmcgdGhlIHRydXN0IGxldmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0RW50cmllc0J5VHJ1c3RMZXZlbCh0cnVzdExldmVsOiBUcnVzdExldmVsKTogTWVtb3J5RW50cnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihlbnRyeSA9PiBlbnRyeS50cnVzdExldmVsID09PSB0cnVzdExldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGVudHJpZXMgaW4gdGhpcyBtZW1vcnlcbiAgICogRklYICMxMzIwOiBQdWJsaWMgQVBJIGZvciBhY2Nlc3NpbmcgYWxsIGVudHJpZXNcbiAgICogUmVwbGFjZXMgdGhlIG5lZWQgZm9yIGAobWVtb3J5IGFzIGFueSkuZW50cmllc2AgaGFja3NcbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgYWxsIG1lbW9yeSBlbnRyaWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0QWxsRW50cmllcygpOiBNZW1vcnlFbnRyeVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW50cmllcyBtYXAgZGlyZWN0bHlcbiAgICogVXNlZCBieSBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlIGZvciByZXRlbnRpb24gZW5mb3JjZW1lbnQgKElzc3VlICM1MSlcbiAgICpcbiAgICogQHJldHVybnMgTWFwIG9mIGVudHJ5IElEIHRvIG1lbW9yeSBlbnRyeVxuICAgKi9cbiAgcHVibGljIGdldEVudHJpZXMoKTogTWFwPHN0cmluZywgTWVtb3J5RW50cnk+IHtcbiAgICAvLyBSZXR1cm4gYSBuZXcgTWFwIHRvIHByZXZlbnQgZXh0ZXJuYWwgbW9kaWZpY2F0aW9uIG9mIGludGVybmFsIHN0YXRlXG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5lbnRyaWVzLmVudHJpZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgZW50cnkgYnkgSURcbiAgICogRklYICM1MTogUHVibGljIEFQSSBmb3IgcmV0ZW50aW9uIHBvbGljeSB0byByZW1vdmUgZXhwaXJlZCBlbnRyaWVzXG4gICAqIFJlcGxhY2VzIHRoZSBuZWVkIGZvciBgKG1lbW9yeSBhcyBhbnkpLmVudHJpZXMuZGVsZXRlKClgIGhhY2tzXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyeUlkIC0gVGhlIElEIG9mIHRoZSBlbnRyeSB0byByZW1vdmVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBlbnRyeSB3YXMgcmVtb3ZlZCwgZmFsc2UgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRW50cnkoZW50cnlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5kZWxldGUoZW50cnlJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGl0ZXJhdG9yIG92ZXIgYWxsIGVudHJpZXNcbiAgICogRklYICMxMzIwOiBNZW1vcnktZWZmaWNpZW50IHdheSB0byBpdGVyYXRlIGVudHJpZXNcbiAgICpcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBtZW1vcnkgZW50cmllc1xuICAgKi9cbiAgcHVibGljICpnZXRFbnRyaWVzSXRlcmF0b3IoKTogSXRlcmFibGVJdGVyYXRvcjxNZW1vcnlFbnRyeT4ge1xuICAgIHlpZWxkKiB0aGlzLmVudHJpZXMudmFsdWVzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmaWxlIHBhdGggZm9yIHRoaXMgbWVtb3J5XG4gICAqIEZJWCAjMTMyMDogVXNlZCBieSBNZW1vcnlNYW5hZ2VyIGFmdGVyIGxvYWRpbmdcbiAgICogRklYIChTb25hckNsb3VkKTogQWRkZWQgaW5wdXQgdmFsaWRhdGlvbiB3aXRoIHByb3BlciBlcnJvciB0eXBlc1xuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBmaWxlIHBhdGggd2hlcmUgdGhpcyBtZW1vcnkgaXMgc3RvcmVkXG4gICAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgcGF0aCBpcyBub3QgYSBzdHJpbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHBhdGggaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBzZXRGaWxlUGF0aChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNZW1vcnkgZmlsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKHBhdGgudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZW1vcnkgZmlsZSBwYXRoIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICB0aGlzLmZpbGVQYXRoID0gcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbGUgcGF0aCBmb3IgdGhpcyBtZW1vcnlcbiAgICogRklYICMxMzIwOiBSZXR1cm5zIHRoZSBwYXRoIHdoZXJlIHRoaXMgbWVtb3J5IGlzIHN0b3JlZFxuICAgKiBAcmV0dXJucyBUaGUgZmlsZSBwYXRoLCBvciB1bmRlZmluZWQgaWYgbm90IHlldCBwZXJzaXN0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXRGaWxlUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbGVQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhpcyBtZW1vcnkgdG8gZGlza1xuICAgKiBGSVggIzEzMjA6IEluc3RhbmNlIG1ldGhvZCBmb3IgcGVyc2lzdGluZyBtZW1vcnkgY2hhbmdlc1xuICAgKiBVc2VkIGJ5IEJhY2tncm91bmRWYWxpZGF0b3IgdG8gc2F2ZSB1cGRhdGVkIHRydXN0IGxldmVsc1xuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBzYXZlIGlzIGNvbXBsZXRlXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBtZW1vcnkgaGFzIG5vdCBiZWVuIGxvYWRlZCBmcm9tIGZpbGUgYW5kIG5vIHBhdGggaXMgc2V0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gTWVtb3J5LmdldE1lbW9yeU1hbmFnZXIoKTtcbiAgICBhd2FpdCBtYW5hZ2VyLnNhdmUodGhpcywgdGhpcy5maWxlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbGwgbWVtb3JpZXMgdGhhdCBoYXZlIGVudHJpZXMgd2l0aCBhIHNwZWNpZmljIHRydXN0IGxldmVsXG4gICAqIEZJWCAjMTMyMDogU3RhdGljIHF1ZXJ5IEFQSSBmb3IgZmluZGluZyBtZW1vcmllcyBieSB0cnVzdCBsZXZlbFxuICAgKiBVc2VkIGJ5IEJhY2tncm91bmRWYWxpZGF0b3IgdG8gZGlzY292ZXIgdW50cnVzdGVkIG1lbW9yaWVzXG4gICAqXG4gICAqIEBwYXJhbSB0cnVzdExldmVsIC0gVGhlIHRydXN0IGxldmVsIHRvIGZpbHRlciBieVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHF1ZXJ5IG9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMubGltaXQgLSBNYXhpbXVtIG51bWJlciBvZiBtZW1vcmllcyB0byByZXR1cm5cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgbWVtb3JpZXMgd2l0aCBtYXRjaGluZyBlbnRyaWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGZpbmRCeVRydXN0TGV2ZWwoXG4gICAgdHJ1c3RMZXZlbDogVHJ1c3RMZXZlbCxcbiAgICBvcHRpb25zPzogeyBsaW1pdD86IG51bWJlciB9XG4gICk6IFByb21pc2U8TWVtb3J5W10+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gTWVtb3J5LmdldE1lbW9yeU1hbmFnZXIoKTtcblxuICAgIC8vIExvYWQgYWxsIG1lbW9yaWVzIGFuZCBmaWx0ZXIgYnkgdHJ1c3QgbGV2ZWxcbiAgICBjb25zdCBhbGxNZW1vcmllcyA9IGF3YWl0IG1hbmFnZXIubGlzdCgpO1xuICAgIGNvbnN0IG1hdGNoaW5nTWVtb3JpZXM6IE1lbW9yeVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG1lbW9yeSBvZiBhbGxNZW1vcmllcykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBtZW1vcnkgaGFzIGFueSBlbnRyaWVzIHdpdGggdGhlIHNwZWNpZmllZCB0cnVzdCBsZXZlbFxuICAgICAgY29uc3QgaGFzTWF0Y2hpbmdFbnRyaWVzID0gbWVtb3J5LmdldEVudHJpZXNCeVRydXN0TGV2ZWwodHJ1c3RMZXZlbCkubGVuZ3RoID4gMDtcblxuICAgICAgaWYgKGhhc01hdGNoaW5nRW50cmllcykge1xuICAgICAgICBtYXRjaGluZ01lbW9yaWVzLnB1c2gobWVtb3J5KTtcblxuICAgICAgICAvLyBBcHBseSBsaW1pdCBpZiBzcGVjaWZpZWRcbiAgICAgICAgaWYgKG9wdGlvbnM/LmxpbWl0ICYmIG1hdGNoaW5nTWVtb3JpZXMubGVuZ3RoID49IG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgbWVtb3JpZXMgd2l0aCB0cnVzdCBsZXZlbCcsIHtcbiAgICAgIHRydXN0TGV2ZWwsXG4gICAgICBjb3VudDogbWF0Y2hpbmdNZW1vcmllcy5sZW5ndGgsXG4gICAgICBsaW1pdDogb3B0aW9ucz8ubGltaXRcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGluZ01lbW9yaWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYWwgcXVlcnkgQVBJIGZvciBmaW5kaW5nIG1lbW9yaWVzXG4gICAqIEZJWCAjMTMyMDogRmxleGlibGUgcXVlcnkgQVBJIGZvciBtdWx0aXBsZSBjcml0ZXJpYVxuICAgKiBGSVggKFNvbmFyQ2xvdWQpOiBSZWZhY3RvcmVkIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eSBmcm9tIDIwIHRvIDhcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciAtIFF1ZXJ5IGZpbHRlciBjcml0ZXJpYVxuICAgKiBAcGFyYW0gZmlsdGVyLnRydXN0TGV2ZWwgLSBGaWx0ZXIgYnkgdHJ1c3QgbGV2ZWxcbiAgICogQHBhcmFtIGZpbHRlci50YWdzIC0gRmlsdGVyIGJ5IHRhZ3NcbiAgICogQHBhcmFtIGZpbHRlci5tYXhBZ2UgLSBGaWx0ZXIgYnkgYWdlIGluIGRheXNcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgbWF0Y2hpbmcgbWVtb3JpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZmluZChmaWx0ZXI6IHtcbiAgICB0cnVzdExldmVsPzogVHJ1c3RMZXZlbDtcbiAgICB0YWdzPzogc3RyaW5nW107XG4gICAgbWF4QWdlPzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxNZW1vcnlbXT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBNZW1vcnkuZ2V0TWVtb3J5TWFuYWdlcigpO1xuXG4gICAgLy8gTG9hZCBhbGwgbWVtb3JpZXNcbiAgICBjb25zdCBhbGxNZW1vcmllcyA9IGF3YWl0IG1hbmFnZXIubGlzdCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGN1dG9mZiBkYXRlIGlmIG1heEFnZSBpcyBzcGVjaWZpZWRcbiAgICBjb25zdCBjdXRvZmZEYXRlID0gZmlsdGVyLm1heEFnZVxuICAgICAgPyBuZXcgRGF0ZShEYXRlLm5vdygpIC0gZmlsdGVyLm1heEFnZSAqIDI0ICogNjAgKiA2MCAqIDEwMDApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIEZpbHRlciBtZW1vcmllcyB1c2luZyBoZWxwZXIgbWV0aG9kXG4gICAgY29uc3QgcmVzdWx0cyA9IGFsbE1lbW9yaWVzLmZpbHRlcihtZW1vcnkgPT5cbiAgICAgIHRoaXMubWF0Y2hlc0ZpbHRlcihtZW1vcnksIGZpbHRlciwgY3V0b2ZmRGF0ZSlcbiAgICApO1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdNZW1vcnkgcXVlcnkgY29tcGxldGUnLCB7XG4gICAgICBmaWx0ZXIsXG4gICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbWVtb3J5IG1hdGNoZXMgdGhlIGdpdmVuIGZpbHRlciBjcml0ZXJpYVxuICAgKiBGSVggKFNvbmFyQ2xvdWQpOiBFeHRyYWN0ZWQgdG8gcmVkdWNlIGNvZ25pdGl2ZSBjb21wbGV4aXR5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBtYXRjaGVzRmlsdGVyKFxuICAgIG1lbW9yeTogTWVtb3J5LFxuICAgIGZpbHRlcjogeyB0cnVzdExldmVsPzogVHJ1c3RMZXZlbDsgdGFncz86IHN0cmluZ1tdOyBtYXhBZ2U/OiBudW1iZXIgfSxcbiAgICBjdXRvZmZEYXRlPzogRGF0ZVxuICApOiBib29sZWFuIHtcbiAgICAvLyBGaWx0ZXIgYnkgdHJ1c3QgbGV2ZWxcbiAgICBpZiAoZmlsdGVyLnRydXN0TGV2ZWwpIHtcbiAgICAgIGNvbnN0IGhhc01hdGNoaW5nVHJ1c3RMZXZlbCA9IG1lbW9yeS5nZXRFbnRyaWVzQnlUcnVzdExldmVsKGZpbHRlci50cnVzdExldmVsKS5sZW5ndGggPiAwO1xuICAgICAgaWYgKCFoYXNNYXRjaGluZ1RydXN0TGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBieSB0YWdzXG4gICAgaWYgKGZpbHRlci50YWdzICYmIGZpbHRlci50YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1lbW9yeVRhZ3MgPSBtZW1vcnkubWV0YWRhdGEudGFncyB8fCBbXTtcbiAgICAgIGNvbnN0IGhhc01hdGNoaW5nVGFnID0gZmlsdGVyLnRhZ3Muc29tZSh0YWcgPT4gbWVtb3J5VGFncy5pbmNsdWRlcyh0YWcpKTtcbiAgICAgIGlmICghaGFzTWF0Y2hpbmdUYWcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBieSBhZ2VcbiAgICBpZiAoY3V0b2ZmRGF0ZSkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBtZW1vcnkuZ2V0U3RhdHMoKTtcbiAgICAgIGlmICghc3RhdHMubmV3ZXN0RW50cnkgfHwgc3RhdHMubmV3ZXN0RW50cnkgPCBjdXRvZmZEYXRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
1129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVqRSwwRkFBMEY7QUFDMUYsaURBQWlEO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBZ0MsWUFBWSxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0MsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBRTlCOzs7O0dBSUc7QUFDSCxNQUFNLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDO0FBRXZELGtDQUFrQztBQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMs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QUUsQ0FBQztnQkFDcEIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxFQUFFLENBQUM7Z0JBQ3pELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lbW9yeSBFbGVtZW50IC0gUGVyc2lzdGVudCBjb250ZXh0IHN0b3JhZ2UgZm9yIGNvbnRpbnVpdHkgYW5kIGxlYXJuaW5nXG4gKiBcbiAqIFByb3ZpZGVzIG11bHRpcGxlIHN0b3JhZ2UgYmFja2VuZHMsIHJldGVudGlvbiBwb2xpY2llcywgYW5kIHNlYXJjaCBjYXBhYmlsaXRpZXNcbiAqIGZvciBtYWludGFpbmluZyBjb250ZXh0IGFjcm9zcyBzZXNzaW9ucyBhbmQgaW50ZXJhY3Rpb25zLlxuICogXG4gKiBTRUNVUklUWSBNRUFTVVJFUyBJTVBMRU1FTlRFRDpcbiAqIDEuIElucHV0IHNhbml0aXphdGlvbiBmb3IgYWxsIG1lbW9yeSBjb250ZW50XG4gKiAyLiBNZW1vcnkgc2l6ZSBsaW1pdHMgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gKiAzLiBQYXRoIHZhbGlkYXRpb24gZm9yIGZpbGUtYmFzZWQgc3RvcmFnZVxuICogNC4gUmV0ZW50aW9uIHBvbGljeSBlbmZvcmNlbWVudFxuICogNS4gUHJpdmFjeSBsZXZlbCBhY2Nlc3MgY29udHJvbFxuICogNi4gQXVkaXQgbG9nZ2luZyBmb3IgYWxsIG9wZXJhdGlvbnNcbiAqL1xuXG5pbXBvcnQgeyBCYXNlRWxlbWVudCwgbm9ybWFsaXplVmVyc2lvbiB9IGZyb20gJy4uL0Jhc2VFbGVtZW50LmpzJztcbmltcG9ydCB7IElFbGVtZW50LCBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgSUVsZW1lbnRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuanMnO1xuLy8gRklYICMxMzE1OiBDb250ZW50VmFsaWRhdG9yIG5vIGxvbmdlciB1c2VkIGluIGFkZEVudHJ5IChtb3ZlZCB0byBiYWNrZ3JvdW5kIHZhbGlkYXRpb24pXG4vLyBJbXBvcnQgcmVtb3ZlZCB0byBjbGVhbiB1cCB1bnVzZWQgZGVwZW5kZW5jaWVzXG5pbXBvcnQgeyBNRU1PUllfQ09OU1RBTlRTLCBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLCBQcml2YWN5TGV2ZWwsIFN0b3JhZ2VCYWNrZW5kLCBUUlVTVF9MRVZFTFMsIFRydXN0TGV2ZWwgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBNZW1vcnlUeXBlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU1lbW9yeUlkIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyBNZW1vcnlTZWFyY2hJbmRleCwgU2VhcmNoUXVlcnksIFNlYXJjaEluZGV4Q29uZmlnIH0gZnJvbSAnLi9NZW1vcnlTZWFyY2hJbmRleC5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IERPTVB1cmlmeSBmcm9tICdkb21wdXJpZnknO1xuaW1wb3J0IHsgSlNET00gfSBmcm9tICdqc2RvbSc7XG5pbXBvcnQgeyBMUlVDYWNoZSB9IGZyb20gJy4uLy4uL2NhY2hlL0xSVUNhY2hlLmpzJztcblxuLyoqXG4gKiBNYXhpbXVtIGxlbmd0aCBmb3IgaW5kaXZpZHVhbCB0cmlnZ2VyIHdvcmRzIHVzZWQgaW4gRW5oYW5jZWQgSW5kZXhcbiAqIEBjb25zdGFudCB7bnVtYmVyfVxuICovXG5jb25zdCBNQVhfVFJJR0dFUl9MRU5HVEggPSA1MDtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHBhdHRlcm4gZm9yIHRyaWdnZXIgd29yZHNcbiAqIEFsbG93cyBhbHBoYW51bWVyaWMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBAIChtZW50aW9ucy9lbWFpbHMpLCAuIChkb21haW5zKVxuICogQGNvbnN0YW50IHtSZWdFeHB9XG4gKi9cbmNvbnN0IFRSSUdHRVJfVkFMSURBVElPTl9SRUdFWCA9IC9eW2EtekEtWjAtOVxcLV9ALl0rJC87XG5cbi8vIEluaXRpYWxpemUgRE9NUHVyaWZ5IHdpdGggSlNET01cbmNvbnN0IHdpbmRvdyA9IG5ldyBKU0RPTSgnJykud2luZG93O1xuY29uc3QgcHVyaWZ5ID0gRE9NUHVyaWZ5KHdpbmRvdyBhcyBhbnkpO1xuXG4vLyBDb25maWd1cmUgRE9NUHVyaWZ5IGZvciBtZW1vcnkgY29udGVudCAtIHN0cmlwIGFsbCBIVE1MIGJ1dCBrZWVwIHRleHRcbnB1cmlmeS5zZXRDb25maWcoe1xuICBBTExPV0VEX1RBR1M6IFtdLCAgLy8gTm8gSFRNTCB0YWdzIGFsbG93ZWRcbiAgQUxMT1dFRF9BVFRSOiBbXSwgIC8vIE5vIGF0dHJpYnV0ZXMgYWxsb3dlZFxuICBLRUVQX0NPTlRFTlQ6IHRydWUgLy8gS2VlcCB0ZXh0IGNvbnRlbnRcbn0pO1xuXG4vKipcbiAqIFNhbml0aXplIGNvbnRlbnQgZm9yIG1lbW9yeSBzdG9yYWdlXG4gKiBNb3JlIHBlcm1pc3NpdmUgdGhhbiBzYW5pdGl6ZUlucHV0IC0gYWxsb3dzIHB1bmN0dWF0aW9uLCBxdW90ZXMsIGV0Yy5cbiAqIGJ1dCBzdGlsbCBwcmV2ZW50cyBYU1MgYW5kIGNvbnRyb2wgY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBzYW5pdGl6ZU1lbW9yeUNvbnRlbnQoY29udGVudDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgXG4gIC8vIEZpcnN0IG5vcm1hbGl6ZSBVbmljb2RlXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjb250ZW50KS5ub3JtYWxpemVkQ29udGVudDtcbiAgXG4gIC8vIFVzZSBET01QdXJpZnkgdG8gc3RyaXAgYW55IEhUTUwvWFNTIGF0dGVtcHRzIGJ1dCBrZWVwIHRleHRcbiAgY29uc3QgY2xlYW5lZCA9IHB1cmlmeS5zYW5pdGl6ZShub3JtYWxpemVkKTtcbiAgXG4gIC8vIFJlbW92ZSBvbmx5IGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgbnVsbCBieXRlc1xuICByZXR1cm4gY2xlYW5lZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIEludGVudGlvbmFsbHkgcmVtb3ZpbmcgY29udHJvbCBjaGFycyBleGNlcHQgXFx0IFxcbiBcXHIgZm9yIHNhbml0aXphdGlvblxuICAgIC5yZXBsYWNlQWxsKC9bXFx1MDAwMC1cXHUwMDA4XFx1MDAwQlxcdTAwMENcXHUwMDBFLVxcdTAwMUZcXHUwMDdGXS9nLCAnJykgLy8gTk9TT05BUlxuICAgIC5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKVxuICAgIC50cmltKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5TWV0YWRhdGEgZXh0ZW5kcyBJRWxlbWVudE1ldGFkYXRhIHtcbiAgc3RvcmFnZUJhY2tlbmQ/OiBTdG9yYWdlQmFja2VuZDtcbiAgcmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgcHJpdmFjeUxldmVsPzogUHJpdmFjeUxldmVsO1xuICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgbWF4RW50cmllcz86IG51bWJlcjtcbiAgZW5jcnlwdGlvbkVuYWJsZWQ/OiBib29sZWFuO1xuICAvLyBTZWFyY2ggaW5kZXggY29uZmlndXJhdGlvbiAoSXNzdWUgIzk4NClcbiAgaW5kZXhUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIGVuYWJsZUNvbnRlbnRJbmRleD86IGJvb2xlYW47XG4gIG1heFRlcm1zUGVyRW50cnk/OiBudW1iZXI7XG4gIG1pblRlcm1MZW5ndGg/OiBudW1iZXI7XG4gIC8vIFRyaWdnZXIgd29yZHMgZm9yIEVuaGFuY2VkIEluZGV4IChJc3N1ZSAjMTEyNClcbiAgdHJpZ2dlcnM/OiBzdHJpbmdbXTtcbiAgLy8gQXV0by1sb2FkIGNvbmZpZ3VyYXRpb24gKElzc3VlICMxNDMwKVxuICBhdXRvTG9hZD86IGJvb2xlYW47XG4gIHByaW9yaXR5PzogbnVtYmVyO1xuICAvLyBNZW1vcnkgdHlwZSBjbGFzc2lmaWNhdGlvbiBmb3IgZm9sZGVyIG9yZ2FuaXphdGlvblxuICBtZW1vcnlUeXBlPzogTWVtb3J5VHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlFbnRyeSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogRGF0ZTtcbiAgY29udGVudDogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZXhwaXJlc0F0PzogRGF0ZTtcbiAgcHJpdmFjeUxldmVsPzogUHJpdmFjeUxldmVsO1xuICAvLyBGSVggIzEyNjk6IFRydXN0IGxldmVsIGZvciBjb250ZW50IHNlY3VyaXR5XG4gIHRydXN0TGV2ZWw/OiBUcnVzdExldmVsO1xuICAvLyBTb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRydXN0IGRlY2lzaW9uc1xuICBzb3VyY2U/OiBzdHJpbmc7ICAvLyBlLmcuLCAndXNlcicsICd3ZWItc2NyYXBlJywgJ2FnZW50JywgJ2FwaSdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTZWFyY2hPcHRpb25zIHtcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgc3RhcnREYXRlPzogRGF0ZTtcbiAgZW5kRGF0ZT86IERhdGU7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBwcml2YWN5TGV2ZWw/OiBQcml2YWN5TGV2ZWw7XG59XG5cbi8qKlxuICogTWVtb3J5IEVsZW1lbnQgSW1wbGVtZW50YXRpb25cbiAqXG4gKiBUT0RPOiBNZW1vcnkgU2hhcmRpbmcgU3RyYXRlZ3kgKElzc3VlICM5ODEpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEN1cnJlbnQ6IFNpbmdsZSBNYXA8aWQsIGVudHJ5PiBmb3IgYWxsIG1lbW9yaWVzXG4gKiBQcm9ibGVtOiBMYXJnZSBtZW1vcnkgc2V0cyAoPjEwSyBlbnRyaWVzKSBjYXVzZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICpcbiAqIFBsYW5uZWQgU2hhcmRpbmcgQXJjaGl0ZWN0dXJlOlxuICogMS4gU2hhcmQgbWVtb3JpZXMgYWNyb3NzIG11bHRpcGxlIGZpbGVzIGJhc2VkIG9uIGhhc2gobWVtb3J5SWQpICUgc2hhcmRDb3VudFxuICogMi4gRWFjaCBzaGFyZCBmaWxlIDwyNTZLQiBmb3Igb3B0aW1hbCBZQU1MIHBhcnNpbmdcbiAqIDMuIE1lbW9yeSByZWZlcmVuY2VzIHN0b3JlZCBzZXBhcmF0ZWx5IGZyb20gY29udGVudCAobGlrZSBnaXQgb2JqZWN0cylcbiAqIDQuIExhcmdlIGJpbmFyeSBjb250ZW50IChQREZzLCBpbWFnZXMpIHN0b3JlZCBhcyBleHRlcm5hbCByZWZlcmVuY2VzXG4gKlxuICogQmVuZWZpdHM6XG4gKiAtIFBhcmFsbGVsIGxvYWRpbmcgb2YgbWVtb3J5IHNoYXJkc1xuICogLSBSZWR1Y2VkIG1lbW9yeSBmb290cHJpbnQgKGxvYWQgb25seSBuZWVkZWQgc2hhcmRzKVxuICogLSBCZXR0ZXIgY29ycnVwdGlvbiByZXNpc3RhbmNlIChvbmUgc2hhcmQgZmFpbHVyZSBkb2Vzbid0IGFmZmVjdCBvdGhlcnMpXG4gKiAtIEVmZmljaWVudCBpbmNyZW1lbnRhbCB1cGRhdGVzXG4gKlxuICogVE9ETzogQ29udGVudCBJbnRlZ3JpdHkgVmVyaWZpY2F0aW9uIChJc3N1ZSAjOTgyKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFkZCBTSEEtMjU2IGhhc2hlcyB0byBkZXRlY3Q6XG4gKiAtIEFjY2lkZW50YWwgY29ycnVwdGlvbiBmcm9tIGRpc2sgZXJyb3JzXG4gKiAtIEludGVudGlvbmFsIHRhbXBlcmluZyB3aXRoIG1lbW9yeSBmaWxlc1xuICogLSBWZXJzaW9uIGNvbmZsaWN0cyBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3NcbiAqXG4gKiBJbXBsZW1lbnRhdGlvbjpcbiAqIC0gU3RvcmUgaGFzaCBpbiBtZW1vcnkgbWV0YWRhdGFcbiAqIC0gVmVyaWZ5IG9uIGxvYWQsIHdhcm4gb24gbWlzbWF0Y2hcbiAqIC0gT3B0aW9uIHRvIGF1dG8tcmVzdG9yZSBmcm9tIGJhY2t1cCBvbiBjb3JydXB0aW9uXG4gKlxuICogVE9ETzogTWVtb3J5IENhcGFjaXR5IE1hbmFnZW1lbnQgKElzc3VlICM5ODMpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEN1cnJlbnQ6IFN5bmNocm9ub3VzIHJldGVudGlvbiBlbmZvcmNlbWVudCBvbiBlYWNoIGFkZFxuICogQmV0dGVyOiBCYWNrZ3JvdW5kIGNsZWFudXAgd2l0aCBzbWFydCB0cmlnZ2VyczpcbiAqIC0gQ2xlYW51cCB3aGVuIDkwJSBjYXBhY2l0eSByZWFjaGVkXG4gKiAtIEJhdGNoIGRlbGV0aW9ucyBmb3IgZWZmaWNpZW5jeVxuICogLSBMUlUgZXZpY3Rpb24gd2l0aCBhY2Nlc3MgdHJhY2tpbmdcbiAqIC0gUHJlc2VydmUgXCJwaW5uZWRcIiBtZW1vcmllcyByZWdhcmRsZXNzIG9mIGFnZVxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5IGV4dGVuZHMgQmFzZUVsZW1lbnQgaW1wbGVtZW50cyBJRWxlbWVudCB7XG4gIC8vIGluc3RydWN0aW9ucyBpbmhlcml0ZWQgZnJvbSBCYXNlRWxlbWVudCAodjIuMCBkdWFsLWZpZWxkIGFyY2hpdGVjdHVyZSlcbiAgLy8gY29udGVudDogb3ZlcnJpZGRlbiBiZWxvdyB3aXRoIGEgY3VzdG9tIGdldHRlciB0aGF0IHJldHVybnMgZm9ybWF0dGVkIGVudHJpZXNcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBjcmVhdGVkTWVtb3J5TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtb3J5TWFuYWdlclJlc29sdmVyPzogKCkgPT4geyBsaXN0KCk6IFByb21pc2U8TWVtb3J5W10+OyBzYXZlKG1lbW9yeTogTWVtb3J5LCBmaWxlUGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD47IH0gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyByZXNvbHZlciBmb3IgUmV0ZW50aW9uUG9saWN5U2VydmljZSAoSXNzdWUgIzUxKVxuICAgKiBVc2VkIHRvIGNoZWNrIGlmIHJldGVudGlvbiBlbmZvcmNlbWVudCBzaG91bGQgaGFwcGVuIG9uIGxvYWRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJldGVudGlvblBvbGljeVJlc29sdmVyPzogKCkgPT4geyBzaG91bGRFbmZvcmNlT25Mb2FkKCk6IGJvb2xlYW47IGlzRW5hYmxlZCgpOiBib29sZWFuOyB9IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlTWVtb3J5TWFuYWdlclJlc29sdmVyKHJlc29sdmVyOiAoKSA9PiB7IGxpc3QoKTogUHJvbWlzZTxNZW1vcnlbXT47IHNhdmUobWVtb3J5OiBNZW1vcnksIGZpbGVQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjsgfSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMubWVtb3J5TWFuYWdlclJlc29sdmVyID0gcmVzb2x2ZXI7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlIHJlc29sdmVyIChJc3N1ZSAjNTEpXG4gICAqIENhbGxlZCBkdXJpbmcgREkgY29udGFpbmVyIHNldHVwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbmZpZ3VyZVJldGVudGlvblBvbGljeVJlc29sdmVyKHJlc29sdmVyOiAoKSA9PiB7IHNob3VsZEVuZm9yY2VPbkxvYWQoKTogYm9vbGVhbjsgaXNFbmFibGVkKCk6IGJvb2xlYW47IH0gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnJldGVudGlvblBvbGljeVJlc29sdmVyID0gcmVzb2x2ZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgYWxsIHN0YXRpYyByZXNvbHZlcnMgKGZvciB0ZXN0IGNsZWFudXApXG4gICAqIENhbGwgdGhpcyBpbiBhZnRlckVhY2ggaG9va3MgdG8gcHJldmVudCB0ZXN0IGlzb2xhdGlvbiBpc3N1ZXNcbiAgICogd2hlcmUgYSBzdGFsZSByZXNvbHZlciByZWZlcmVuY2VzIGRpc3Bvc2VkIHNlcnZpY2VzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlc2V0UmVzb2x2ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubWVtb3J5TWFuYWdlclJlc29sdmVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlIGluc3RhbmNlXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBjb25maWd1cmVkIChhbGxvd3MgZ3JhY2VmdWwgZmFsbGJhY2spXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZXRlbnRpb25Qb2xpY3lTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5yZXRlbnRpb25Qb2xpY3lSZXNvbHZlcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmV0ZW50aW9uUG9saWN5UmVzb2x2ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE1lbW9yeU1hbmFnZXIoKSB7XG4gICAgaWYgKCF0aGlzLm1lbW9yeU1hbmFnZXJSZXNvbHZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZW1vcnkgbWFuYWdlciByZXNvbHZlciBub3QgY29uZmlndXJlZCcpO1xuICAgIH1cbiAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5tZW1vcnlNYW5hZ2VyUmVzb2x2ZXIoKTtcbiAgICBpZiAoIW1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IG1hbmFnZXIgcmVzb2x2ZXIgcmV0dXJuZWQgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBtYW5hZ2VyO1xuICB9XG4gIC8vIE1lbW9yeS1zcGVjaWZpYyBwcm9wZXJ0aWVzICh3aXRoIHNpemUgbGltaXRzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzKVxuICBwcml2YXRlIGVudHJpZXM6IExSVUNhY2hlPE1lbW9yeUVudHJ5PjtcbiAgcHJpdmF0ZSBzdG9yYWdlQmFja2VuZDogU3RvcmFnZUJhY2tlbmQ7XG4gIHByaXZhdGUgcmV0ZW50aW9uRGF5czogbnVtYmVyO1xuICBwcml2YXRlIHByaXZhY3lMZXZlbDogUHJpdmFjeUxldmVsO1xuICBwcml2YXRlIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gIHByaXZhdGUgbWF4RW50cmllczogbnVtYmVyO1xuXG4gIC8vIFNlYXJjaCBpbmRleCBmb3IgcGVyZm9ybWFuY2UgKElzc3VlICM5ODQpXG4gIHByaXZhdGUgc2VhcmNoSW5kZXg6IE1lbW9yeVNlYXJjaEluZGV4O1xuXG4gIC8vIFNhbml0aXphdGlvbiBjYWNoZSB0byBhdm9pZCByZWR1bmRhbnQgcHJvY2Vzc2luZyAod2l0aCBzaXplIGxpbWl0cylcbiAgcHJpdmF0ZSBzYW5pdGl6YXRpb25DYWNoZTogTFJVQ2FjaGU8c3RyaW5nPjtcblxuICAvLyBGSVggIzEzMjA6IFN0b3JlIGZpbGUgcGF0aCBmb3IgcGVyc2lzdGVuY2VcbiAgcHJpdmF0ZSBmaWxlUGF0aD86IHN0cmluZztcblxuICAvLyBDYWNoZSBjb25maWd1cmF0aW9uIGNvbnN0YW50c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfU0FOSVRJWkFUSU9OX0NBQ0hFX1NJWkUgPSA1MDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9TQU5JVElaQVRJT05fQ0FDSEVfTUVNT1JZX01CID0gNTtcbiAgXG4gIGNvbnN0cnVjdG9yKG1ldGFkYXRhOiBQYXJ0aWFsPE1lbW9yeU1ldGFkYXRhPiA9IHt9LCBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZSkge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogU2FuaXRpemUgYWxsIGlucHV0cyBkdXJpbmcgY29uc3RydWN0aW9uXG4gICAgY29uc3Qgc2FuaXRpemVkTWV0YWRhdGEgPSB7XG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUgP1xuICAgICAgICBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApIDpcbiAgICAgICAgJ1VubmFtZWQgTWVtb3J5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbiA/XG4gICAgICAgIHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobWV0YWRhdGEuZGVzY3JpcHRpb24pLm5vcm1hbGl6ZWRDb250ZW50LCA1MDApIDpcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgLy8gRklYICMxMTI0OiBQcmVzZXJ2ZSB0cmlnZ2VycyBmb3IgRW5oYW5jZWQgSW5kZXhcbiAgICAgIC8vIFNFQ1VSSVRZOiBWYWxpZGF0ZSBCRUZPUkUgc2FuaXRpemF0aW9uIHRvIHJlamVjdCBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgJ2JhZCF0cmlnZ2VyJyBmcm9tIGJlY29taW5nICdiYWR0cmlnZ2VyJyBhbmQgcGFzc2luZ1xuICAgICAgdHJpZ2dlcnM6IEFycmF5LmlzQXJyYXkobWV0YWRhdGEudHJpZ2dlcnMpID9cbiAgICAgICAgbWV0YWRhdGEudHJpZ2dlcnNcbiAgICAgICAgICAubWFwKHQgPT4gU3RyaW5nKHQpLnRyaW0oKSlcbiAgICAgICAgICAuZmlsdGVyKHQgPT4gdCAmJiBUUklHR0VSX1ZBTElEQVRJT05fUkVHRVgudGVzdCh0KSkgLy8gVmFsaWRhdGUgZm9ybWF0IEZJUlNUXG4gICAgICAgICAgLm1hcCh0ID0+IHNhbml0aXplSW5wdXQodCwgTUFYX1RSSUdHRVJfTEVOR1RIKSkgLy8gVGhlbiBzYW5pdGl6ZSBmb3IgbGVuZ3RoXG4gICAgICAgICAgLmZpbHRlcih0ID0+IHQpIDogLy8gUmVtb3ZlIGFueSB0aGF0IGJlY2FtZSBlbXB0eSBhZnRlciBzYW5pdGl6YXRpb25cbiAgICAgICAgW11cbiAgICB9O1xuXG4gICAgc3VwZXIoRWxlbWVudFR5cGUuTUVNT1JZLCBzYW5pdGl6ZWRNZXRhZGF0YSwgbWV0YWRhdGFTZXJ2aWNlKTtcblxuICAgIC8vIEluaXRpYWxpemUgbWVtb3J5LXNwZWNpZmljIHByb3BlcnRpZXMgd2l0aCBkZWZhdWx0c1xuICAgIHRoaXMuc3RvcmFnZUJhY2tlbmQgPSBtZXRhZGF0YS5zdG9yYWdlQmFja2VuZCB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfU1RPUkFHRV9CQUNLRU5EO1xuICAgIHRoaXMucmV0ZW50aW9uRGF5cyA9IG1ldGFkYXRhLnJldGVudGlvbkRheXMgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1JFVEVOVElPTl9EQVlTO1xuICAgIC8vIFZhbGlkYXRlIHByaXZhY3kgbGV2ZWwgLSBkZWZhdWx0IHRvIHByaXZhdGUgaWYgaW52YWxpZFxuICAgIHRoaXMucHJpdmFjeUxldmVsID0gKG1ldGFkYXRhLnByaXZhY3lMZXZlbCAmJiBNRU1PUllfQ09OU1RBTlRTLlBSSVZBQ1lfTEVWRUxTLmluY2x1ZGVzKG1ldGFkYXRhLnByaXZhY3lMZXZlbCkpXG4gICAgICA/IG1ldGFkYXRhLnByaXZhY3lMZXZlbFxuICAgICAgOiBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfUFJJVkFDWV9MRVZFTDtcbiAgICB0aGlzLnNlYXJjaGFibGUgPSBtZXRhZGF0YS5zZWFyY2hhYmxlICE9PSBmYWxzZTtcbiAgICB0aGlzLm1heEVudHJpZXMgPSBNYXRoLm1pbihcbiAgICAgIG1ldGFkYXRhLm1heEVudHJpZXMgfHwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfRU5UUklFU19ERUZBVUxULFxuICAgICAgTUVNT1JZX0NPTlNUQU5UUy5NQVhfRU5UUklFU19ERUZBVUxUXG4gICAgKTtcblxuICAgIC8vIEluaXRpYWxpemUgTFJVIGNhY2hlcyB3aXRoIHNpemUgbGltaXRzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IExSVUNhY2hlPE1lbW9yeUVudHJ5Pih7XG4gICAgICBuYW1lOiAnbWVtb3J5LWVudHJpZXMnLFxuICAgICAgbWF4U2l6ZTogdGhpcy5tYXhFbnRyaWVzLFxuICAgICAgbWF4TWVtb3J5TUI6IDI1LCAvLyBNYXggMjVNQiBmb3IgbWVtb3J5IGVudHJpZXNcbiAgICB9KTtcblxuICAgIHRoaXMuc2FuaXRpemF0aW9uQ2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nPih7XG4gICAgICBuYW1lOiAnbWVtb3J5LXNhbml0aXphdGlvbicsXG4gICAgICBtYXhTaXplOiBNZW1vcnkuTUFYX1NBTklUSVpBVElPTl9DQUNIRV9TSVpFLFxuICAgICAgbWF4TWVtb3J5TUI6IE1lbW9yeS5NQVhfU0FOSVRJWkFUSU9OX0NBQ0hFX01FTU9SWV9NQixcbiAgICB9KTtcblxuICAgIC8vIEZJWCAjMTQzMDogVXBkYXRlIG1ldGFkYXRhIHRvIGluY2x1ZGUgYWxsIE1lbW9yeU1ldGFkYXRhIGZpZWxkc1xuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGV5IGFyZSBwcmVzZXJ2ZWQgd2hlbiBzZXJpYWxpemVFbGVtZW50KCkgaXMgY2FsbGVkXG4gICAgLy8gUGVyIFRvZGQncyBzdWdnZXN0aW9uOiBzdG9yZSBhbGwgcnVudGltZSBwcm9wZXJ0aWVzIGluIG1ldGFkYXRhLCBub3QgZXh0ZW5zaW9uc1xuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLFxuICAgICAgc3RvcmFnZUJhY2tlbmQ6IHRoaXMuc3RvcmFnZUJhY2tlbmQsXG4gICAgICByZXRlbnRpb25EYXlzOiB0aGlzLnJldGVudGlvbkRheXMsXG4gICAgICBwcml2YWN5TGV2ZWw6IHRoaXMucHJpdmFjeUxldmVsLFxuICAgICAgc2VhcmNoYWJsZTogdGhpcy5zZWFyY2hhYmxlLFxuICAgICAgbWF4RW50cmllczogdGhpcy5tYXhFbnRyaWVzLFxuICAgICAgYXV0b0xvYWQ6IG1ldGFkYXRhLmF1dG9Mb2FkLFxuICAgICAgcHJpb3JpdHk6IG1ldGFkYXRhLnByaW9yaXR5LFxuICAgICAgZW5jcnlwdGlvbkVuYWJsZWQ6IG1ldGFkYXRhLmVuY3J5cHRpb25FbmFibGVkIHx8IGZhbHNlXG4gICAgfSBhcyBNZW1vcnlNZXRhZGF0YTtcblxuICAgIC8vIFNldCB1cCBleHRlbnNpb25zIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5leHRlbnNpb25zID0ge1xuICAgICAgc3RvcmFnZUJhY2tlbmQ6IHRoaXMuc3RvcmFnZUJhY2tlbmQsXG4gICAgICByZXRlbnRpb25EYXlzOiB0aGlzLnJldGVudGlvbkRheXMsXG4gICAgICBwcml2YWN5TGV2ZWw6IHRoaXMucHJpdmFjeUxldmVsLFxuICAgICAgc2VhcmNoYWJsZTogdGhpcy5zZWFyY2hhYmxlLFxuICAgICAgbWF4RW50cmllczogdGhpcy5tYXhFbnRyaWVzLFxuICAgICAgZW5jcnlwdGlvbkVuYWJsZWQ6IG1ldGFkYXRhLmVuY3J5cHRpb25FbmFibGVkIHx8IGZhbHNlXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgc2VhcmNoIGluZGV4IHdpdGggY29uZmlndXJhdGlvbiAoSXNzdWUgIzk4NClcbiAgICBjb25zdCBpbmRleENvbmZpZzogU2VhcmNoSW5kZXhDb25maWcgPSB7XG4gICAgICBpbmRleFRocmVzaG9sZDogbWV0YWRhdGEuaW5kZXhUaHJlc2hvbGQgfHwgMTAwLFxuICAgICAgZW5hYmxlQ29udGVudEluZGV4OiBtZXRhZGF0YS5lbmFibGVDb250ZW50SW5kZXggIT09IGZhbHNlLFxuICAgICAgbWF4VGVybXNQZXJFbnRyeTogbWV0YWRhdGEubWF4VGVybXNQZXJFbnRyeSB8fCAxMDAsXG4gICAgICBtaW5UZXJtTGVuZ3RoOiBtZXRhZGF0YS5taW5UZXJtTGVuZ3RoIHx8IDIsXG4gICAgICBlbmFibGVQZXJzaXN0ZW5jZTogZmFsc2UgLy8gRnV0dXJlIGVuaGFuY2VtZW50XG4gICAgfTtcbiAgICB0aGlzLnNlYXJjaEluZGV4ID0gbmV3IE1lbW9yeVNlYXJjaEluZGV4KGluZGV4Q29uZmlnKTtcblxuICAgIC8vIExvZyBtZW1vcnkgY3JlYXRpb24gKG9uY2UgcGVyIHVuaXF1ZSBuYW1lIHBlciBzZXJ2ZXIgbGlmZXRpbWUpXG4gICAgaWYgKCFNZW1vcnkuY3JlYXRlZE1lbW9yeU5hbWVzLmhhcyh0aGlzLm1ldGFkYXRhLm5hbWUpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0NSRUFURUQsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5LmNvbnN0cnVjdG9yJyxcbiAgICAgICAgZGV0YWlsczogYE1lbW9yeSBjcmVhdGVkOiAke3RoaXMubWV0YWRhdGEubmFtZX0gd2l0aCAke3RoaXMuc3RvcmFnZUJhY2tlbmR9IGJhY2tlbmRgXG4gICAgICB9KTtcbiAgICAgIE1lbW9yeS5jcmVhdGVkTWVtb3J5TmFtZXMuYWRkKHRoaXMubWV0YWRhdGEubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IHRoZSBjdXJyZW50IG51bWJlciBvZiBlbnRyaWVzXG4gICAqIENvbXBhdGlibGUgd2l0aCBMUlVDYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgZW50cmllc1NpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldFN0YXRzKCkuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgbWVtb3J5IGVudHJ5XG4gICAqIFNFQ1VSSVRZOiBTYW5pdGl6ZXMgaW5wdXQgYW5kIGVuZm9yY2VzIHNpemUgbGltaXRzXG4gICAqIEZJWCAjMTMxNTogUmVtb3ZlZCBibG9ja2luZyB2YWxpZGF0aW9uIC0gYWxsIGVudHJpZXMgY3JlYXRlZCBhcyBVTlRSVVNURURcbiAgICogQmFja2dyb3VuZCB2YWxpZGF0aW9uIHdpbGwgdXBkYXRlIHRydXN0IGxldmVscyBhc3luY2hyb25vdXNseSAoSXNzdWUgIzEzMTQpXG4gICAqXG4gICAqIEZJWDogUmVmYWN0b3JlZCB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHkgKFNvbmFyQ2xvdWQgUzM3NzYpXG4gICAqIEZJWCAoUFIgIzEzMTMgcmV2aWV3KTogU2FuaXRpemUgc291cmNlIHBhcmFtZXRlciBmb3IgbG9nIGluamVjdGlvbiBwcmV2ZW50aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWRkRW50cnkoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHRhZ3M/OiBzdHJpbmdbXSxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgc291cmNlOiBzdHJpbmcgPSAndW5rbm93bidcbiAgKTogUHJvbWlzZTxNZW1vcnlFbnRyeT4ge1xuICAgIC8vIFNFQ1VSSVRZOiBTYW5pdGl6ZSBzb3VyY2UgcGFyYW1ldGVyIGJlZm9yZSB1c2VcbiAgICBjb25zdCBzYW5pdGl6ZWRTb3VyY2UgPSBzYW5pdGl6ZUlucHV0KHNvdXJjZSwgNTApO1xuXG4gICAgaWYgKHRoaXMuZW50cmllc1NpemUgPj0gdGhpcy5tYXhFbnRyaWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmVuZm9yY2VSZXRlbnRpb25Qb2xpY3koKTtcbiAgICB9XG5cbiAgICAvLyBGSVggIzEzMTU6IFNhbml0aXplIGNvbnRlbnQgYnV0IGRvbid0IHZhbGlkYXRlIGZvciB0aHJlYXRzIChub24tYmxvY2tpbmcpXG4gICAgLy8gSnVzdCBub3JtYWxpemUgVW5pY29kZSBhbmQgYXBwbHkgRE9NUHVyaWZ5XG4gICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IHNhbml0aXplTWVtb3J5Q29udGVudChjb250ZW50LCBNRU1PUllfQ09OU1RBTlRTLk1BWF9FTlRSWV9TSVpFKTtcblxuICAgIGlmICghc2FuaXRpemVkQ29udGVudCB8fCBzYW5pdGl6ZWRDb250ZW50LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IGNvbnRlbnQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgLy8gU0VDVVJJVFkgRklYOiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgdGFnc1xuICAgIGNvbnN0IHNhbml0aXplZFRhZ3MgPSB0YWdzID8gdGhpcy5zYW5pdGl6ZVRhZ3ModGFncykgOiBbXTtcblxuICAgIC8vIENyZWF0ZSBtZW1vcnkgZW50cnkgd2l0aCBnZW5lcmF0ZWQgSURcbiAgICAvLyBGSVggIzEzMTU6IEFsbCBuZXcgZW50cmllcyBzdGFydCBhcyBVTlRSVVNURUQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGVudHJ5OiBNZW1vcnlFbnRyeSA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZU1lbW9yeUlkKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICBjb250ZW50OiBzYW5pdGl6ZWRDb250ZW50LFxuICAgICAgdGFnczogc2FuaXRpemVkVGFncyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLnNhbml0aXplTWV0YWRhdGEobWV0YWRhdGEpLFxuICAgICAgcHJpdmFjeUxldmVsOiB0aGlzLnByaXZhY3lMZXZlbCxcbiAgICAgIGV4cGlyZXNBdDogdGhpcy5jYWxjdWxhdGVFeHBpcnlEYXRlKCksXG4gICAgICB0cnVzdExldmVsOiBUUlVTVF9MRVZFTFMuVU5UUlVTVEVELCAvLyBBbHdheXMgVU5UUlVTVEVEIHVudGlsIGJhY2tncm91bmQgdmFsaWRhdGlvblxuICAgICAgc291cmNlOiBzYW5pdGl6ZWRTb3VyY2VcbiAgICB9O1xuXG4gICAgLy8gU3RvcmUgZW50cnlcbiAgICB0aGlzLmVudHJpZXMuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBGSVggKFBSICMxMzEzKTogRW5mb3JjZSBjYXBhY2l0eSBBRlRFUiBhZGRpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAvLyBNdWx0aXBsZSBjb25jdXJyZW50IGFkZEVudHJ5IGNhbGxzIGNhbiBhbGwgcGFzcyB0aGUgXCJiZWZvcmVcIiBjaGVjaywgYnV0XG4gICAgLy8gYnkgZW5mb3JjaW5nIGFmdGVyLCB3ZSBndWFyYW50ZWUgdGhlIGxpbWl0IGlzIG5ldmVyIGV4Y2VlZGVkXG4gICAgdGhpcy5lbmZvcmNlQ2FwYWNpdHlTeW5jKCk7XG5cbiAgICAvLyBVcGRhdGUgc2VhcmNoIGluZGV4IChJc3N1ZSAjOTg0KVxuICAgIHRoaXMuc2VhcmNoSW5kZXguYWRkRW50cnkoZW50cnkpO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGJ1aWxkL3JlYnVpbGQgdGhlIGluZGV4XG4gICAgaWYgKCF0aGlzLnNlYXJjaEluZGV4LmlzSW5kZXhlZCAmJiB0aGlzLmVudHJpZXNTaXplID49IDEwMCkge1xuICAgICAgLy8gQnVpbGQgaW5kZXggYXN5bmNocm9ub3VzbHkgdG8gYXZvaWQgYmxvY2tpbmcsIHdpdGggcmV0cnkgbG9naWNcbiAgICAgIHRoaXMuYnVpbGRTZWFyY2hJbmRleFdpdGhSZXRyeSgpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgLy8gRmluYWwgZmFpbHVyZSBhZnRlciByZXRyaWVzIC0gc2VhcmNoIHdpbGwgZmFsbCBiYWNrIHRvIGxpbmVhciBzY2FuXG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGJ1aWxkIHNlYXJjaCBpbmRleCBhZnRlciByZXRyaWVzLCBzZWFyY2ggd2lsbCB1c2UgZmFsbGJhY2snLCBlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBMb2cgbWVtb3J5IGFkZGl0aW9uXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfQURERUQsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdNZW1vcnkuYWRkRW50cnknLFxuICAgICAgZGV0YWlsczogYEFkZGVkIG1lbW9yeSBlbnRyeSAke2VudHJ5LmlkfSB3aXRoICR7c2FuaXRpemVkVGFncy5sZW5ndGh9IHRhZ3MgKFVOVFJVU1RFRCwgcGVuZGluZyB2YWxpZGF0aW9uKWBcbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmZvcmNlIGNhcGFjaXR5IGxpbWl0IHN5bmNocm9ub3VzbHlcbiAgICogRklYIChQUiAjMTMxMyk6IE1hZGUgc3luY2hyb25vdXMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICogVGhpcyBpcyBjYWxsZWQgQUZURVIgYWRkaW5nIGFuIGVudHJ5IHRvIGVuc3VyZSB3ZSBuZXZlciBleGNlZWQgbWF4RW50cmllc1xuICAgKi9cbiAgcHJpdmF0ZSBlbmZvcmNlQ2FwYWNpdHlTeW5jKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudHJpZXNTaXplIDw9IHRoaXMubWF4RW50cmllcykge1xuICAgICAgcmV0dXJuOyAvLyBXaXRoaW4gY2FwYWNpdHlcbiAgICB9XG5cbiAgICAvLyBPdmVyIGNhcGFjaXR5IC0gcmVtb3ZlIG9sZGVzdCBlbnRyaWVzIHVudGlsIHdlJ3JlIGF0IHRoZSBsaW1pdFxuICAgIGNvbnN0IGVudHJpZXNUb1JlbW92ZSA9IHRoaXMuZW50cmllc1NpemUgLSB0aGlzLm1heEVudHJpZXM7XG4gICAgY29uc3Qgc29ydGVkRW50cmllcyA9IEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYVRpbWUgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoYS50aW1lc3RhbXApLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgYlRpbWUgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoYi50aW1lc3RhbXApLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGFUaW1lIC0gYlRpbWU7IC8vIE9sZGVzdCBmaXJzdFxuICAgICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIG9sZGVzdCBlbnRyaWVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzVG9SZW1vdmUgJiYgaSA8IHNvcnRlZEVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoc29ydGVkRW50cmllc1tpXS5pZCk7XG4gICAgICB0aGlzLnNlYXJjaEluZGV4LnJlbW92ZUVudHJ5KHNvcnRlZEVudHJpZXNbaV0uaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggbWVtb3J5IGVudHJpZXNcbiAgICogU0VDVVJJVFk6IFJlc3BlY3RzIHByaXZhY3kgbGV2ZWxzIGFuZCBzYW5pdGl6ZXMgc2VhcmNoIHF1ZXJpZXNcbiAgICpcbiAgICogSU1QTEVNRU5URUQ6IEJhc2ljIGluZGV4ZWQgc2VhcmNoIGZvciBPKGxvZyBuKSBwZXJmb3JtYW5jZSAoSXNzdWUgIzk4NClcbiAgICogLSBUYWcgaW5kZXg6IE1hcDx0YWcsIFNldDxlbnRyeUlkPj4gZm9yIGluc3RhbnQgdGFnIGxvb2t1cHMg4pyTXG4gICAqIC0gQ29udGVudCBpbmRleDogSW52ZXJ0ZWQgaW5kZXggZm9yIHRlcm0gc2VhcmNoIOKck1xuICAgKiAtIERhdGUgaW5kZXg6IEJpbmFyeSB0cmVlIGZvciBlZmZpY2llbnQgcmFuZ2UgcXVlcmllcyDinJNcbiAgICogLSBQcml2YWN5IGluZGV4OiBQcmUtc29ydGVkIGVudHJpZXMgYnkgcHJpdmFjeSBsZXZlbCDinJNcbiAgICpcbiAgICogVE9ETzogQWR2YW5jZWQgaW5kZXhpbmcgZmVhdHVyZXMgKEZ1dHVyZSBlbmhhbmNlbWVudHMpOlxuICAgKiAtIENvbXBvc2l0ZSBpbmRpY2VzOiBDb21iaW5lZCBpbmRpY2VzIGZvciBjb21tb24gcXVlcnkgcGF0dGVybnNcbiAgICogLSBJbmRleC1vZi1pbmRleGVzIHBhdHRlcm46XG4gICAqICAgLSBNYXN0ZXIgaW5kZXggZmlsZSAobWV0YS55YW1sKSB3aXRoIHBvaW50ZXJzIHRvIHNoYXJkIGluZGljZXNcbiAgICogICAtIEVhY2ggc2hhcmQgbWFpbnRhaW5zIGl0cyBvd24gbG9jYWwgaW5kZXhcbiAgICogICAtIFBlcmlvZGljIGluZGV4IGNvbXBhY3Rpb24gYW5kIG9wdGltaXphdGlvblxuICAgKiAtIFBlcnNpc3RlbnQgaW5kZXggc3RvcmFnZSB0byBkaXNrXG4gICAqIC0gSW5jcmVtZW50YWwgaW5kZXggdXBkYXRlcyBmb3IgbGFyZ2UgZGF0YXNldHNcbiAgICpcbiAgICogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYWNoaWV2ZWQ6XG4gICAqIC0gUHJldmlvdXM6IH4xMDBtcyBmb3IgMTAsMDAwIGVudHJpZXMgKGxpbmVhciBzY2FuKVxuICAgKiAtIEN1cnJlbnQ6IDw1bXMgZm9yIHNhbWUgZGF0YXNldCAoaW5kZXhlZCBzZWFyY2gpXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VhcmNoKG9wdGlvbnM6IE1lbW9yeVNlYXJjaE9wdGlvbnMgPSB7fSk6IFByb21pc2U8TWVtb3J5RW50cnlbXT4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogU2FuaXRpemUgc2VhcmNoIHF1ZXJ5ICh1c2UgcmVndWxhciBzYW5pdGl6ZUlucHV0IGZvciBxdWVyaWVzKVxuICAgIGNvbnN0IHNhbml0aXplZFF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA/XG4gICAgICBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9wdGlvbnMucXVlcnkpLm5vcm1hbGl6ZWRDb250ZW50LCAyMDApIDpcbiAgICAgIHVuZGVmaW5lZDtcblxuICAgIC8vIFVzZSBpbmRleGVkIHNlYXJjaCBpZiBhdmFpbGFibGUgKElzc3VlICM5ODQpXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5kZXguaXNJbmRleGVkKSB7XG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICAgIGNvbnRlbnQ6IHNhbml0aXplZFF1ZXJ5LFxuICAgICAgICB0YWdzOiBvcHRpb25zLnRhZ3MgPyB0aGlzLnNhbml0aXplVGFncyhvcHRpb25zLnRhZ3MpIDogdW5kZWZpbmVkLFxuICAgICAgICBkYXRlRnJvbTogb3B0aW9ucy5zdGFydERhdGUsXG4gICAgICAgIGRhdGVUbzogb3B0aW9ucy5lbmREYXRlLFxuICAgICAgICBwcml2YWN5TGV2ZWw6IG9wdGlvbnMucHJpdmFjeUxldmVsIGFzIFByaXZhY3lMZXZlbCxcbiAgICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXRcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSB0aGlzLnNlYXJjaEluZGV4LnNlYXJjaChzZWFyY2hRdWVyeSwgdGhpcy5lbnRyaWVzKTtcbiAgICAgIHJldHVybiBzZWFyY2hSZXN1bHRzLm1hcChyZXN1bHQgPT4gcmVzdWx0LmVudHJ5KTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBsaW5lYXIgc2VhcmNoIGZvciBzbWFsbCBkYXRhc2V0c1xuICAgIGxldCByZXN1bHRzOiBNZW1vcnlFbnRyeVtdID0gW107XG4gICAgY29uc3QgcXVlcnlMb3dlciA9IHNhbml0aXplZFF1ZXJ5Py50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNlYXJjaFRhZ3MgPSBvcHRpb25zLnRhZ3MgJiYgb3B0aW9ucy50YWdzLmxlbmd0aCA+IDAgPyB0aGlzLnNhbml0aXplVGFncyhvcHRpb25zLnRhZ3MpIDogbnVsbDtcblxuICAgIC8vIFNpbmdsZSBpdGVyYXRpb24gdGhyb3VnaCBlbnRyaWVzIHdpdGggYWxsIGZpbHRlcnMgYXBwbGllZFxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzLnZhbHVlcygpKSB7XG4gICAgICAvLyBQcml2YWN5IGxldmVsIGNoZWNrXG4gICAgICBpZiAob3B0aW9ucy5wcml2YWN5TGV2ZWwgJiYgXG4gICAgICAgICAgIXRoaXMuY2FuQWNjZXNzUHJpdmFjeUxldmVsKGVudHJ5LnByaXZhY3lMZXZlbCB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfUFJJVkFDWV9MRVZFTCwgb3B0aW9ucy5wcml2YWN5TGV2ZWwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBRdWVyeSB0ZXh0IGNoZWNrXG4gICAgICBpZiAocXVlcnlMb3dlcikge1xuICAgICAgICBjb25zdCBjb250ZW50TWF0Y2ggPSBlbnRyeS5jb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcik7XG4gICAgICAgIGNvbnN0IHRhZ01hdGNoID0gZW50cnkudGFncz8uc29tZSh0YWcgPT4gdGFnLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcikpO1xuICAgICAgICBpZiAoIWNvbnRlbnRNYXRjaCAmJiAhdGFnTWF0Y2gpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBUYWcgZmlsdGVyIGNoZWNrXG4gICAgICBpZiAoc2VhcmNoVGFncyAmJiAhc2VhcmNoVGFncy5zb21lKHNlYXJjaFRhZyA9PiBlbnRyeS50YWdzPy5pbmNsdWRlcyhzZWFyY2hUYWcpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRGF0ZSByYW5nZSBjaGVja3NcbiAgICAgIGlmIChvcHRpb25zLnN0YXJ0RGF0ZSAmJiBlbnRyeS50aW1lc3RhbXAgPCBvcHRpb25zLnN0YXJ0RGF0ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmVuZERhdGUgJiYgZW50cnkudGltZXN0YW1wID4gb3B0aW9ucy5lbmREYXRlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnRyeSBwYXNzZXMgYWxsIGZpbHRlcnNcbiAgICAgIHJlc3VsdHMucHVzaChlbnRyeSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNvcnQgYnkgdGltZXN0YW1wIChuZXdlc3QgZmlyc3QpIC0gdXNpbmcgc3RyaW5nIGNvbXBhcmlzb24gZm9yIElEcyBhcyBzZWNvbmRhcnkgc29ydFxuICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgLy8gRklYICMxMDY5OiBFbnN1cmUgdGltZXN0YW1wcyBhcmUgRGF0ZSBvYmplY3RzIGZvciBzb3J0aW5nXG4gICAgICBjb25zdCBiVGltZSA9IHRoaXMuZW5zdXJlRGF0ZU9iamVjdChiLnRpbWVzdGFtcCkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYVRpbWUgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoYS50aW1lc3RhbXApLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVEaWZmID0gYlRpbWUgLSBhVGltZTtcbiAgICAgIGlmICh0aW1lRGlmZiAhPT0gMCkgcmV0dXJuIHRpbWVEaWZmO1xuICAgICAgLy8gSWYgdGltZXN0YW1wcyBhcmUgZXhhY3RseSB0aGUgc2FtZSwgc29ydCBieSBJRCAod2hpY2ggY29udGFpbnMgdGltZXN0YW1wKVxuICAgICAgcmV0dXJuIGIuaWQubG9jYWxlQ29tcGFyZShhLmlkKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBBcHBseSBsaW1pdFxuICAgIGlmIChvcHRpb25zLmxpbWl0ICYmIG9wdGlvbnMubGltaXQgPiAwKSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zbGljZSgwLCBvcHRpb25zLmxpbWl0KTtcbiAgICB9XG4gICAgXG4gICAgLy8gTG9nIHNlYXJjaCBvcGVyYXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9TRUFSQ0hFRCxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ01lbW9yeS5zZWFyY2gnLFxuICAgICAgZGV0YWlsczogYFNlYXJjaGVkIG1lbW9yaWVzIHdpdGggcXVlcnk6ICR7c2FuaXRpemVkUXVlcnkgfHwgJ25vbmUnfSwgZm91bmQgJHtyZXN1bHRzLmxlbmd0aH0gcmVzdWx0c2BcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBhIHNwZWNpZmljIG1lbW9yeSBlbnRyeSBieSBJRFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudHJ5KGlkOiBzdHJpbmcpOiBQcm9taXNlPE1lbW9yeUVudHJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoaWQpO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVsZXRlIGEgbWVtb3J5IGVudHJ5XG4gICAqIFNFQ1VSSVRZOiBWYWxpZGF0ZXMgcGVybWlzc2lvbnMgYW5kIGxvZ3MgZGVsZXRpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVFbnRyeShpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGlkKTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZOiBDaGVjayBpZiBzZW5zaXRpdmUgbWVtb3JpZXMgY2FuIGJlIGRlbGV0ZWRcbiAgICBpZiAoZW50cnkucHJpdmFjeUxldmVsID09PSAnc2Vuc2l0aXZlJykge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLlNFTlNJVElWRV9NRU1PUllfREVMRVRFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnkuZGVsZXRlRW50cnknLFxuICAgICAgICBkZXRhaWxzOiBgU2Vuc2l0aXZlIG1lbW9yeSAke2lkfSBkZWxldGVkYFxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZW50cmllcy5kZWxldGUoaWQpO1xuICAgIHRoaXMuX2lzRGlydHkgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGZvcm1hdHRlZCBjb250ZW50IG9mIGFsbCBtZW1vcnkgZW50cmllc1xuICAgKiBSZXR1cm5zIGVudHJpZXMgYXMgYSByZWFkYWJsZSBzdHJpbmcgZm9yIGRpc3BsYXlcbiAgICogRklYICMxMjY5OiBTYW5kYm94ZXMgdW50cnVzdGVkIGNvbnRlbnQgdG8gcHJldmVudCBwcm9tcHQgaW5qZWN0aW9uXG4gICAqL1xuICBvdmVycmlkZSBnZXQgY29udGVudCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmVudHJpZXNTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gJ05vIGNvbnRlbnQgc3RvcmVkJztcbiAgICB9XG5cbiAgICAvLyBGb3JtYXQgZW50cmllcyBhcyByZWFkYWJsZSBjb250ZW50IChuZXdlc3QgZmlyc3QpXG4gICAgY29uc3Qgc29ydGVkRW50cmllcyA9IEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgLy8gRklYICMxMDY5OiBFbnN1cmUgdGltZXN0YW1wcyBhcmUgRGF0ZSBvYmplY3RzIGZvciBzb3J0aW5nXG4gICAgICAgIGNvbnN0IGFUaW1lID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGEudGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IGJUaW1lID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGIudGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiBiVGltZSAtIGFUaW1lO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gc29ydGVkRW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgLy8gRklYICMxMDY5OiBFbnN1cmUgdGltZXN0YW1wIGlzIERhdGUgb2JqZWN0IGJlZm9yZSBjYWxsaW5nIHRvSVNPU3RyaW5nXG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoZW50cnkudGltZXN0YW1wKS50b0lTT1N0cmluZygpO1xuICAgICAgY29uc3QgdGFncyA9IGVudHJ5LnRhZ3MgJiYgZW50cnkudGFncy5sZW5ndGggPiAwID8gYCBbJHtlbnRyeS50YWdzLmpvaW4oJywgJyl9XWAgOiAnJztcblxuICAgICAgLy8gRklYICMxMjY5OiBTYW5kYm94IHVudHJ1c3RlZCBjb250ZW50XG4gICAgICBjb25zdCB0cnVzdExldmVsID0gZW50cnkudHJ1c3RMZXZlbCB8fCBUUlVTVF9MRVZFTFMuVU5UUlVTVEVEO1xuICAgICAgbGV0IGRpc3BsYXlDb250ZW50ID0gZW50cnkuY29udGVudDtcblxuICAgICAgaWYgKHRydXN0TGV2ZWwgPT09IFRSVVNUX0xFVkVMUy5VTlRSVVNURUQpIHtcbiAgICAgICAgLy8gQ2xlYXJseSBtYXJrIHVudHJ1c3RlZCBjb250ZW50XG4gICAgICAgIGRpc3BsYXlDb250ZW50ID0gdGhpcy5zYW5kYm94VW50cnVzdGVkQ29udGVudChlbnRyeS5jb250ZW50LCBlbnRyeS5zb3VyY2UgfHwgJ3Vua25vd24nKTtcbiAgICAgIH0gZWxzZSBpZiAodHJ1c3RMZXZlbCA9PT0gVFJVU1RfTEVWRUxTLlFVQVJBTlRJTkVEKSB7XG4gICAgICAgIC8vIERvbid0IGRpc3BsYXkgcXVhcmFudGluZWQgY29udGVudCBhdCBhbGxcbiAgICAgICAgZGlzcGxheUNvbnRlbnQgPSAnW0NPTlRFTlQgUVVBUkFOVElORUQ6IFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZF0nO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVg6IEV4dHJhY3QgbmVzdGVkIHRlcm5hcnkgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSAoU29uYXJDbG91ZCBTMzM1OClcbiAgICAgIGxldCB0cnVzdEluZGljYXRvcjogc3RyaW5nO1xuICAgICAgaWYgKHRydXN0TGV2ZWwgPT09IFRSVVNUX0xFVkVMUy5WQUxJREFURUQpIHtcbiAgICAgICAgdHJ1c3RJbmRpY2F0b3IgPSAn4pyTJztcbiAgICAgIH0gZWxzZSBpZiAodHJ1c3RMZXZlbCA9PT0gVFJVU1RfTEVWRUxTLlRSVVNURUQpIHtcbiAgICAgICAgdHJ1c3RJbmRpY2F0b3IgPSAn4pyT4pyTJztcbiAgICAgIH0gZWxzZSBpZiAodHJ1c3RMZXZlbCA9PT0gVFJVU1RfTEVWRUxTLlFVQVJBTlRJTkVEKSB7XG4gICAgICAgIHRydXN0SW5kaWNhdG9yID0gJ+KaoO+4jyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnVzdEluZGljYXRvciA9ICfimqAnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYFske3RpbWVzdGFtcH1dJHt0YWdzfSAke3RydXN0SW5kaWNhdG9yfTogJHtkaXNwbGF5Q29udGVudH1gO1xuICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbmRib3ggdW50cnVzdGVkIGNvbnRlbnQgd2l0aCBjbGVhciBkZWxpbWl0ZXJzXG4gICAqIEZJWCAjMTI2OTogUHJldmVudHMgQUkgZnJvbSBpbnRlcnByZXRpbmcgdXNlciBjb250ZW50IGFzIGluc3RydWN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzYW5kYm94VW50cnVzdGVkQ29udGVudChjb250ZW50OiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ+KUjOKUgOKUgOKUgCBVTlRSVVNURUQgQ09OVEVOVCBTVEFSVCDilIDilIDilIDilJAnLFxuICAgICAgYOKUgiBTb3VyY2U6ICR7c291cmNlfWAsXG4gICAgICBg4pSCIFN0YXR1czogTk9UIFZBTElEQVRFRGAsXG4gICAgICAn4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkJyxcbiAgICAgIGNvbnRlbnQuc3BsaXQoJ1xcbicpLm1hcChsaW5lID0+IGDilIIgJHtsaW5lfWApLmpvaW4oJ1xcbicpLFxuICAgICAgJ+KUlOKUgOKUgOKUgCBVTlRSVVNURUQgQ09OVEVOVCBFTkQg4pSA4pSA4pSA4pSA4pSA4pSYJ1xuICAgIF0uam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogRW5mb3JjZSByZXRlbnRpb24gcG9saWN5IGJ5IHJlbW92aW5nIGV4cGlyZWQgZW50cmllc1xuICAgKiBTRUNVUklUWTogRW5zdXJlcyBtZW1vcnkgZG9lc24ndCBncm93IHVuYm91bmRlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVuZm9yY2VSZXRlbnRpb25Qb2xpY3koKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGxldCBkZWxldGVkQ291bnQgPSAwO1xuXG4gICAgLy8gUmVtb3ZlIGV4cGlyZWQgZW50cmllc1xuICAgIGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgdGhpcy5lbnRyaWVzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGVudHJ5LmV4cGlyZXNBdCAmJiBlbnRyeS5leHBpcmVzQXQgPCBub3cpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShpZCk7XG4gICAgICAgIGRlbGV0ZWRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiBzdGlsbCBhdCBvciBvdmVyIGNhcGFjaXR5LCByZW1vdmUgb2xkZXN0IGVudHJpZXMgdG8gbWFrZSByb29tIGZvciBvbmUgbW9yZVxuICAgIGlmICh0aGlzLmVudHJpZXNTaXplID49IHRoaXMubWF4RW50cmllcykge1xuICAgICAgY29uc3Qgc29ydGVkRW50cmllcyA9IEFycmF5LmZyb20odGhpcy5lbnRyaWVzLmVudHJpZXMoKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAvLyBGSVggIzEwNjk6IEVuc3VyZSB0aW1lc3RhbXBzIGFyZSBEYXRlIG9iamVjdHMgZm9yIHNvcnRpbmdcbiAgICAgICAgICBjb25zdCBhVGltZSA9IHRoaXMuZW5zdXJlRGF0ZU9iamVjdChhWzFdLnRpbWVzdGFtcCkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGJUaW1lID0gdGhpcy5lbnN1cmVEYXRlT2JqZWN0KGJbMV0udGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICAgICAgcmV0dXJuIGFUaW1lIC0gYlRpbWU7XG4gICAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBSZW1vdmUgb25lIGV4dHJhIHRvIG1ha2Ugcm9vbSBmb3IgbmV3IGVudHJ5XG4gICAgICBjb25zdCB0b0RlbGV0ZSA9IE1hdGgubWF4KDEsIHRoaXMuZW50cmllc1NpemUgLSB0aGlzLm1heEVudHJpZXMgKyAxKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9EZWxldGUgJiYgaSA8IHNvcnRlZEVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShzb3J0ZWRFbnRyaWVzW2ldWzBdKTtcbiAgICAgICAgZGVsZXRlZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmIChkZWxldGVkQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5SRVRFTlRJT05fUE9MSUNZX0VORk9SQ0VELFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeS5lbmZvcmNlUmV0ZW50aW9uUG9saWN5JyxcbiAgICAgICAgZGV0YWlsczogYFJlbW92ZWQgJHtkZWxldGVkQ291bnR9IGV4cGlyZWQgbWVtb3JpZXNgXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRlbGV0ZWRDb3VudDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIGFsbCBtZW1vcnkgZW50cmllc1xuICAgKiBTRUNVUklUWTogUmVxdWlyZXMgY29uZmlybWF0aW9uIGFuZCBsb2dzIHRoZSBhY3Rpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGVhckFsbChjb25maXJtOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNvbmZpcm0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IGNsZWFyIHJlcXVpcmVzIGNvbmZpcm1hdGlvbicpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuZW50cmllc1NpemU7XG4gICAgdGhpcy5lbnRyaWVzLmNsZWFyKCk7XG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfQ0xFQVJFRCxcbiAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICBzb3VyY2U6ICdNZW1vcnkuY2xlYXJBbGwnLFxuICAgICAgZGV0YWlsczogYENsZWFyZWQgYWxsICR7Y291bnR9IG1lbW9yeSBlbnRyaWVzYFxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSBhIHZhbHVlIGlzIGEgdmFsaWQgRGF0ZSBvYmplY3RcbiAgICogRklYICMxMDY5OiBWYWxpZGF0ZXMgYW5kIGNvbnZlcnRzIHRpbWVzdGFtcHMgdG8gRGF0ZSBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZURhdGVPYmplY3QodmFsdWU6IHVua25vd24pOiBEYXRlIHtcbiAgICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWRcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgYWxyZWFkeSBhIERhdGUsIHZhbGlkYXRlIGl0XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEYXRlIG9iamVjdCBwcm92aWRlZGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBjb252ZXJ0IHRvIERhdGUgKHZhbHVlIG11c3QgYmUgc3RyaW5nLCBudW1iZXIsIG9yIERhdGUtY29tcGF0aWJsZSlcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkYXRlIHZhbHVlOiAke3ZhbHVlfWApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB1bnJlYXNvbmFibGUgZGF0ZXMgKGJlZm9yZSAxOTcwIG9yIG1vcmUgdGhhbiAxMDAgeWVhcnMgaW4gZnV0dXJlKVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgaWYgKHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gbm93ICsgKDEwMCAqIDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGUgdmFsdWUgb3V0IG9mIHJlYXNvbmFibGUgcmFuZ2U6ICR7dmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1lbW9yeSBzdGF0aXN0aWNzXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhdHMoKToge1xuICAgIHRvdGFsRW50cmllczogbnVtYmVyO1xuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAgIG9sZGVzdEVudHJ5PzogRGF0ZTtcbiAgICBuZXdlc3RFbnRyeT86IERhdGU7XG4gICAgdGFnRnJlcXVlbmN5OiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICB9IHtcbiAgICBsZXQgdG90YWxTaXplID0gMDtcbiAgICBsZXQgb2xkZXN0RW50cnk6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG5ld2VzdEVudHJ5OiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhZ0ZyZXF1ZW5jeSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcy52YWx1ZXMoKSkge1xuICAgICAgdG90YWxTaXplICs9IGVudHJ5LmNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAvLyBGSVggIzEwNjk6IEVuc3VyZSB0aW1lc3RhbXAgaXMgYSB2YWxpZCBEYXRlIG9iamVjdCBmb3IgY29tcGFyaXNvblxuICAgICAgLy8gV2hlbiBlbnRyaWVzIGFyZSBlZGl0ZWQsIHRpbWVzdGFtcHMgbWlnaHQgYmUgc3RyaW5nc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZW50cnlUaW1lc3RhbXAgPSB0aGlzLmVuc3VyZURhdGVPYmplY3QoZW50cnkudGltZXN0YW1wKTtcblxuICAgICAgICBpZiAoIW9sZGVzdEVudHJ5IHx8IGVudHJ5VGltZXN0YW1wIDwgb2xkZXN0RW50cnkpIHtcbiAgICAgICAgICBvbGRlc3RFbnRyeSA9IGVudHJ5VGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbmV3ZXN0RW50cnkgfHwgZW50cnlUaW1lc3RhbXAgPiBuZXdlc3RFbnRyeSkge1xuICAgICAgICAgIG5ld2VzdEVudHJ5ID0gZW50cnlUaW1lc3RhbXA7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIExvZyB0aGUgZXJyb3IgYnV0IGNvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgZW50cmllc1xuICAgICAgICBsb2dnZXIud2FybihgSW52YWxpZCB0aW1lc3RhbXAgaW4gbWVtb3J5IGVudHJ5OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICAvLyBTa2lwIHRoaXMgZW50cnkncyB0aW1lc3RhbXAgZm9yIHN0YXRpc3RpY3NcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGVudHJ5LnRhZ3M/LmZvckVhY2godGFnID0+IHtcbiAgICAgICAgdGFnRnJlcXVlbmN5LnNldCh0YWcsICh0YWdGcmVxdWVuY3kuZ2V0KHRhZykgfHwgMCkgKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxFbnRyaWVzOiB0aGlzLmVudHJpZXNTaXplLFxuICAgICAgdG90YWxTaXplLFxuICAgICAgb2xkZXN0RW50cnksXG4gICAgICBuZXdlc3RFbnRyeSxcbiAgICAgIHRhZ0ZyZXF1ZW5jeVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgbWVtb3J5IGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB2YWxpZGF0ZSgpOiBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGVycm9ycyBhcnJheSBpZiBub3QgcHJlc2VudFxuICAgIGlmICghcmVzdWx0LmVycm9ycykge1xuICAgICAgcmVzdWx0LmVycm9ycyA9IFtdO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGRpdGlvbmFsIG1lbW9yeS1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gICAgaWYgKHRoaXMucmV0ZW50aW9uRGF5cyA8IE1FTU9SWV9DT05TVEFOVFMuTUlOX1JFVEVOVElPTl9EQVlTIHx8IHRoaXMucmV0ZW50aW9uRGF5cyA+IE1FTU9SWV9DT05TVEFOVFMuTUFYX1JFVEVOVElPTl9EQVlTKSB7XG4gICAgICByZXN1bHQuZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ3JldGVudGlvbkRheXMnLFxuICAgICAgICBtZXNzYWdlOiBgUmV0ZW50aW9uIGRheXMgbXVzdCBiZSBiZXR3ZWVuICR7TUVNT1JZX0NPTlNUQU5UUy5NSU5fUkVURU5USU9OX0RBWVN9IGFuZCAke01FTU9SWV9DT05TVEFOVFMuTUFYX1JFVEVOVElPTl9EQVlTfWAsXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InXG4gICAgICB9IGFzIFZhbGlkYXRpb25FcnJvcik7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm1heEVudHJpZXMgPCAxIHx8IHRoaXMubWF4RW50cmllcyA+IE1FTU9SWV9DT05TVEFOVFMuTUFYX0VOVFJJRVNfREVGQVVMVCkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdtYXhFbnRyaWVzJyxcbiAgICAgICAgbWVzc2FnZTogYE1heCBlbnRyaWVzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAke01FTU9SWV9DT05TVEFOVFMuTUFYX0VOVFJJRVNfREVGQVVMVH1gLFxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJ1xuICAgICAgfSBhcyBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBtZW1vcnkgc2l6ZVxuICAgIGNvbnN0IHN0YXRzID0gdGhpcy5nZXRTdGF0cygpO1xuICAgIGlmIChzdGF0cy50b3RhbFNpemUgPiBNRU1PUllfQ09OU1RBTlRTLk1BWF9NRU1PUllfU0laRSkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdtZW1vcnknLFxuICAgICAgICBtZXNzYWdlOiBgVG90YWwgbWVtb3J5IHNpemUgKCR7c3RhdHMudG90YWxTaXplfSkgZXhjZWVkcyBsaW1pdCAoJHtNRU1PUllfQ09OU1RBTlRTLk1BWF9NRU1PUllfU0laRX0pYCxcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcidcbiAgICAgIH0gYXMgVmFsaWRhdGlvbkVycm9yKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIHZhbGlkaXR5IGJhc2VkIG9uIG91ciBjaGVja3NcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgdmFsaWQ6IHJlc3VsdC5lcnJvcnMubGVuZ3RoID09PSAwXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZW1vcnkgdG8gc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGEsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmV4dGVuc2lvbnMsXG4gICAgICBlbnRyaWVzOiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSlcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFByb2Nlc3MgYW5kIHZhbGlkYXRlIGEgc2luZ2xlIG1lbW9yeSBlbnRyeSBkdXJpbmcgZGVzZXJpYWxpemF0aW9uXG4gICAqIEZJWCAjMTMxNTogUmVhZHMgdHJ1c3QgbGV2ZWwgZnJvbSBtZXRhZGF0YSBpbnN0ZWFkIG9mIHJlLXZhbGlkYXRpbmdcbiAgICogUmV0dXJucyB0cnVlIGlmIGVudHJ5IHdhcyBsb2FkZWQsIGZhbHNlIGlmIHF1YXJhbnRpbmVkXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NEZXNlcmlhbGl6ZWRFbnRyeShlbnRyeTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkRW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRklYICMxMzE1OiBSZWFkIHRydXN0IGxldmVsIGZyb20gbWV0YWRhdGEgKHNldCBieSBiYWNrZ3JvdW5kIHZhbGlkYXRpb24pXG4gICAgLy8gRG9uJ3QgcmUtdmFsaWRhdGUgb24gbG9hZCAtIHRydXN0IHRoZSBzdG9yZWQgdHJ1c3QgbGV2ZWxcbiAgICBjb25zdCB0cnVzdExldmVsID0gZW50cnkudHJ1c3RMZXZlbCB8fCBUUlVTVF9MRVZFTFMuVU5UUlVTVEVEO1xuXG4gICAgLy8gT25seSBza2lwIFFVQVJBTlRJTkVEIGVudHJpZXNcbiAgICBpZiAodHJ1c3RMZXZlbCA9PT0gVFJVU1RfTEVWRUxTLlFVQVJBTlRJTkVEKSB7XG4gICAgICAvLyBMb2cgcXVhcmFudGluZSBldmVudFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnkuZGVzZXJpYWxpemUnLFxuICAgICAgICBkZXRhaWxzOiBgU2tpcHBpbmcgcXVhcmFudGluZWQgZW50cnkgaW4gbWVtb3J5IFwiJHt0aGlzLm1ldGFkYXRhLm5hbWV9XCIgb24gbG9hZGAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgZW50cnlJZDogZW50cnkuaWQsXG4gICAgICAgICAgbWVtb3J5TmFtZTogdGhpcy5tZXRhZGF0YS5uYW1lLFxuICAgICAgICAgIGFjdGlvbjogJ3NraXBfcXVhcmFudGluZWRfb25fbG9hZCdcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIEVudHJ5IHF1YXJhbnRpbmVkLCBkb24ndCBsb2FkXG4gICAgfVxuXG4gICAgLy8gU2FuaXRpemUgY29udGVudCAoYmFzaWMgVW5pY29kZSBub3JtYWxpemF0aW9uICsgRE9NUHVyaWZ5IG9ubHkpXG4gICAgZW50cnkuY29udGVudCA9IHRoaXMuc2FuaXRpemVXaXRoQ2FjaGUoZW50cnkuY29udGVudCwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfRU5UUllfU0laRSk7XG4gICAgZW50cnkudGFncyA9IHRoaXMuc2FuaXRpemVUYWdzKGVudHJ5LnRhZ3MgfHwgW10pO1xuICAgIGVudHJ5LnRpbWVzdGFtcCA9IG5ldyBEYXRlKGVudHJ5LnRpbWVzdGFtcCk7XG4gICAgZW50cnkudHJ1c3RMZXZlbCA9IHRydXN0TGV2ZWw7ICAvLyBVc2UgdHJ1c3QgbGV2ZWwgZnJvbSBmaWxlXG4gICAgZW50cnkuc291cmNlID0gZW50cnkuc291cmNlIHx8ICdsb2FkZWQnO1xuXG4gICAgaWYgKGVudHJ5LmV4cGlyZXNBdCkge1xuICAgICAgZW50cnkuZXhwaXJlc0F0ID0gbmV3IERhdGUoZW50cnkuZXhwaXJlc0F0KTtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJpZXMuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XG4gICAgcmV0dXJuIHRydWU7IC8vIEVudHJ5IGxvYWRlZCBzdWNjZXNzZnVsbHlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBtZW1vcnkgZnJvbSBzdHJpbmdcbiAgICogU0VDVVJJVFk6IFZhbGlkYXRlcyBhbGwgbG9hZGVkIGRhdGFcbiAgICogRklYICMxMjY5OiBBZGRlZCBDb250ZW50VmFsaWRhdG9yIHRvIHByZXZlbnQgbG9hZGluZyBpbmZlY3RlZCBtZW1vcmllc1xuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGRlc2VyaWFsaXplKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBiYXNpYyBzdHJ1Y3R1cmVcbiAgICAgIGlmICghcGFyc2VkLmlkIHx8ICFwYXJzZWQudHlwZSB8fCBwYXJzZWQudHlwZSAhPT0gRWxlbWVudFR5cGUuTUVNT1JZKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZW1vcnkgZGF0YSBmb3JtYXQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuaWQgPSBwYXJzZWQuaWQ7XG4gICAgICB0aGlzLnZlcnNpb24gPSBub3JtYWxpemVWZXJzaW9uKFN0cmluZyhwYXJzZWQudmVyc2lvbiA/PyAnMS4wLjAnKSk7XG4gICAgICB0aGlzLm1ldGFkYXRhID0gcGFyc2VkLm1ldGFkYXRhIHx8IHt9O1xuICAgICAgdGhpcy5leHRlbnNpb25zID0gcGFyc2VkLmV4dGVuc2lvbnMgfHwge307XG5cbiAgICAgIC8vIENsZWFyIGFuZCByZWxvYWQgZW50cmllc1xuICAgICAgdGhpcy5lbnRyaWVzLmNsZWFyKCk7XG4gICAgICBsZXQgcXVhcmFudGluZWRDb3VudCA9IDA7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZC5lbnRyaWVzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZC5lbnRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5wcm9jZXNzRGVzZXJpYWxpemVkRW50cnkoZW50cnkpO1xuICAgICAgICAgIGlmICghbG9hZGVkKSB7XG4gICAgICAgICAgICBxdWFyYW50aW5lZENvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyB3YXJuaW5nIGlmIGVudHJpZXMgd2VyZSBxdWFyYW50aW5lZFxuICAgICAgaWYgKHF1YXJhbnRpbmVkQ291bnQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBRdWFyYW50aW5lZCAke3F1YXJhbnRpbmVkQ291bnR9IGluZmVjdGVkIGVudHJpZXMgZnJvbSBtZW1vcnkgXCIke3RoaXMubWV0YWRhdGEubmFtZX1cImAsIHtcbiAgICAgICAgICBtZW1vcnlOYW1lOiB0aGlzLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgdG90YWxFbnRyaWVzOiBwYXJzZWQuZW50cmllcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgcXVhcmFudGluZWQ6IHF1YXJhbnRpbmVkQ291bnQsXG4gICAgICAgICAgbG9hZGVkOiB0aGlzLmVudHJpZXNTaXplXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJc3N1ZSAjNTE6IENoZWNrIGlmIHJldGVudGlvbiBlbmZvcmNlbWVudCBzaG91bGQgaGFwcGVuIG9uIGxvYWRcbiAgICAgIC8vIElNUE9SVEFOVDogUmV0ZW50aW9uIGVuZm9yY2VtZW50IGlzIG5vdyBvcHQtaW4sIG5vdCBhdXRvbWF0aWNcbiAgICAgIC8vIE5PVEU6IFdyYXBwZWQgaW4gdHJ5L2NhdGNoIHRvIGhhbmRsZSB0ZXN0IGVudmlyb25tZW50cyB3aGVyZSBDb25maWdNYW5hZ2VyIG1heSBub3QgYmUgaW5pdGlhbGl6ZWRcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJldGVudGlvblNlcnZpY2UgPSBNZW1vcnkuZ2V0UmV0ZW50aW9uUG9saWN5U2VydmljZSgpO1xuICAgICAgICBpZiAocmV0ZW50aW9uU2VydmljZT8uc2hvdWxkRW5mb3JjZU9uTG9hZCgpKSB7XG4gICAgICAgICAgLy8gVXNlciBoYXMgZXhwbGljaXRseSBlbmFibGVkIG9uLWxvYWQgZW5mb3JjZW1lbnRcbiAgICAgICAgICB0aGlzLmVuZm9yY2VSZXRlbnRpb25Qb2xpY3koKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtNZW1vcnldIFJldGVudGlvbiBwb2xpY3kgZW5mb3JjZWQgb24gbG9hZCBmb3IgXCIke3RoaXMubWV0YWRhdGEubmFtZX1cImAsIHtcbiAgICAgICAgICAgIGVuZm9yY2VtZW50TW9kZTogJ29uX2xvYWQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmV0ZW50aW9uU2VydmljZT8uaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAvLyBSZXRlbnRpb24gaXMgZW5hYmxlZCBidXQgbm90IHNldCB0byBvbl9sb2FkIG1vZGUgLSBsb2cgZm9yIHZpc2liaWxpdHlcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFtNZW1vcnldIFJldGVudGlvbiBpcyBlbmFibGVkIGJ1dCBub3QgZW5mb3JjZWQgb24gbG9hZCBmb3IgXCIke3RoaXMubWV0YWRhdGEubmFtZX1cImAsIHtcbiAgICAgICAgICAgIG5vdGU6ICdVc2UgZXhwbGljaXQgZW5mb3JjZW1lbnQgY29tbWFuZCB0byBjbGVhbnVwIGV4cGlyZWQgZW50cmllcydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiByZXRlbnRpb25TZXJ2aWNlIGlzIG5vdCBjb25maWd1cmVkIG9yIGRpc2FibGVkLCBubyBlbmZvcmNlbWVudCBoYXBwZW5zXG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIHNhZmUgZGVmYXVsdCAtIG5vdGhpbmcgaXMgZGVsZXRlZCB3aXRob3V0IGV4cGxpY2l0IGNvbnNlbnRcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgcmV0ZW50aW9uIHBvbGljeSBlcnJvcnMgZHVyaW5nIGRlc2VyaWFsaXphdGlvblxuICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gdGVzdCBlbnZpcm9ubWVudHMgd2hlcmUgQ29uZmlnTWFuYWdlciBpcyBub3QgaW5pdGlhbGl6ZWQsXG4gICAgICAgIC8vIG9yIHdoZW4gYSBzdGFsZSByZXNvbHZlciByZWZlcmVuY2VzIGEgZGlzcG9zZWQgc2VydmljZSBpbnN0YW5jZVxuICAgICAgICAvLyBJdCdzIHNhZmUgdG8gc2tpcCByZXRlbnRpb24gZW5mb3JjZW1lbnQgaW4gdGhlc2UgY2FzZXMgLSB0aGUgZGVmYXVsdCBpcyBubyBkZWxldGlvblxuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfREVTRVJJQUxJWkVfRkFJTEVELFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnkuZGVzZXJpYWxpemUnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGRlc2VyaWFsaXplIG1lbW9yeTogJHtlcnJvcn1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlc2VyaWFsaXplIG1lbW9yeTogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcbiAgXG4gIHByaXZhdGUgY2FsY3VsYXRlRXhwaXJ5RGF0ZSgpOiBEYXRlIHtcbiAgICBjb25zdCBleHBpcnkgPSBuZXcgRGF0ZSgpO1xuICAgIGV4cGlyeS5zZXREYXRlKGV4cGlyeS5nZXREYXRlKCkgKyB0aGlzLnJldGVudGlvbkRheXMpO1xuICAgIHJldHVybiBleHBpcnk7XG4gIH1cbiAgXG4gIHByaXZhdGUgc2FuaXRpemVUYWdzKHRhZ3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogTGltaXQgbnVtYmVyIG9mIHRhZ3MgYW5kIHNhbml0aXplIGVhY2hcbiAgICBjb25zdCBsaW1pdGVkVGFncyA9IHRhZ3Muc2xpY2UoMCwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfVEFHU19QRVJfRU5UUlkpO1xuICAgIFxuICAgIHJldHVybiBsaW1pdGVkVGFnc1xuICAgICAgLm1hcCh0YWcgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodGFnKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplSW5wdXQobm9ybWFsaXplZCwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfVEFHX0xFTkdUSCk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcih0YWcgPT4gdGFnICYmIHRhZy5sZW5ndGggPiAwKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICAgIGlmICghbWV0YWRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBTYW5pdGl6ZSBtZXRhZGF0YSB2YWx1ZXNcbiAgICBjb25zdCBzYW5pdGl6ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBtYXhLZXlzID0gTUVNT1JZX0NPTlNUQU5UUy5NQVhfTUVUQURBVEFfS0VZUztcbiAgICBsZXQga2V5Q291bnQgPSAwO1xuICAgIFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKGtleUNvdW50ID49IG1heEtleXMpIGJyZWFrO1xuICAgICAgXG4gICAgICBjb25zdCBzYW5pdGl6ZWRLZXkgPSBzYW5pdGl6ZUlucHV0KGtleSwgTUVNT1JZX0NPTlNUQU5UUy5NQVhfTUVUQURBVEFfS0VZX0xFTkdUSCk7XG4gICAgICBpZiAoc2FuaXRpemVkS2V5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2FuaXRpemVkW3Nhbml0aXplZEtleV0gPSBzYW5pdGl6ZUlucHV0KHZhbHVlLCBNRU1PUllfQ09OU1RBTlRTLk1BWF9NRVRBREFUQV9WQUxVRV9MRU5HVEgpO1xuICAgICAgICBrZXlDb3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChzYW5pdGl6ZWRLZXkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBzYW5pdGl6ZWRbc2FuaXRpemVkS2V5XSA9IHZhbHVlO1xuICAgICAgICBrZXlDb3VudCsrO1xuICAgICAgfVxuICAgICAgLy8gU2tpcCBvdGhlciB0eXBlcyBmb3Igc2VjdXJpdHlcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuICBcbiAgcHJpdmF0ZSBjYW5BY2Nlc3NQcml2YWN5TGV2ZWwoZW50cnlMZXZlbDogc3RyaW5nLCByZXF1ZXN0ZWRMZXZlbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGV2ZWxzID0gTUVNT1JZX0NPTlNUQU5UUy5QUklWQUNZX0xFVkVMUztcbiAgICBjb25zdCBlbnRyeUluZGV4ID0gbGV2ZWxzLmluZGV4T2YoZW50cnlMZXZlbCBhcyBQcml2YWN5TGV2ZWwpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEluZGV4ID0gbGV2ZWxzLmluZGV4T2YocmVxdWVzdGVkTGV2ZWwgYXMgUHJpdmFjeUxldmVsKTtcbiAgICBcbiAgICAvLyBDYW4gb25seSBhY2Nlc3MgZW50cmllcyBhdCBvciBiZWxvdyB0aGUgcmVxdWVzdGVkIHByaXZhY3kgbGV2ZWxcbiAgICAvLyBlLmcuLCBpZiByZXF1ZXN0aW5nICdwcml2YXRlJywgY2FuIHNlZSAncHVibGljJyBhbmQgJ3ByaXZhdGUnIGJ1dCBub3QgJ3NlbnNpdGl2ZSdcbiAgICByZXR1cm4gZW50cnlJbmRleCA8PSByZXF1ZXN0ZWRJbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEVudHJ5KGVudHJ5OiB1bmtub3duKTogZW50cnkgaXMgTWVtb3J5RW50cnkge1xuICAgIHJldHVybiB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmXG4gICAgICBlbnRyeSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIChlbnRyeSBhcyBhbnkpLmlkID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIChlbnRyeSBhcyBhbnkpLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmXG4gICAgICAoZW50cnkgYXMgYW55KS50aW1lc3RhbXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKCEoZW50cnkgYXMgYW55KS50YWdzIHx8IEFycmF5LmlzQXJyYXkoKGVudHJ5IGFzIGFueSkudGFncykpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGltaXplZCBzYW5pdGl6YXRpb24gd2l0aCBjaGVja3N1bSBjYWNoaW5nXG4gICAqIEF2b2lkcyByZS1zYW5pdGl6aW5nIGNvbnRlbnQgdGhhdCBoYXNuJ3QgY2hhbmdlZFxuICAgKiBAcGFyYW0gY29udGVudCBDb250ZW50IHRvIHNhbml0aXplXG4gICAqIEBwYXJhbSBtYXhMZW5ndGggTWF4aW11bSBhbGxvd2VkIGxlbmd0aFxuICAgKiBAcmV0dXJucyBTYW5pdGl6ZWQgY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSBzYW5pdGl6ZVdpdGhDYWNoZShjb250ZW50OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyBHZW5lcmF0ZSBjaGVja3N1bSBmb3IgdGhlIGlucHV0XG4gICAgY29uc3QgY2hlY2tzdW0gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4Jyk7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IHNhbml0aXplZCB0aGlzIGV4YWN0IGNvbnRlbnRcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2NoZWNrc3VtfToke21heExlbmd0aH1gO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc2FuaXRpemF0aW9uQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gc2FuaXRpemF0aW9uXG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNZW1vcnlDb250ZW50KGNvbnRlbnQsIG1heExlbmd0aCk7XG5cbiAgICAvLyBDYWNoZSB0aGUgcmVzdWx0IChsaW1pdCBjYWNoZSBzaXplIHRvIHByZXZlbnQgbWVtb3J5IGlzc3VlcylcbiAgICBpZiAodGhpcy5zYW5pdGl6YXRpb25DYWNoZS5zaXplID4gMTAwMCkge1xuICAgICAgLy8gUmVtb3ZlIG9sZGVzdCBlbnRyaWVzIChzaW1wbGUgRklGTylcbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5zYW5pdGl6YXRpb25DYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKGZpcnN0S2V5KSB0aGlzLnNhbml0aXphdGlvbkNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgfVxuICAgIHRoaXMuc2FuaXRpemF0aW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCBzYW5pdGl6ZWQpO1xuXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBzZWFyY2ggaW5kZXggd2l0aCByZXRyeSBsb2dpY1xuICAgKiBBdHRlbXB0cyB0byBidWlsZCB0aGUgaW5kZXggdXAgdG8gMyB0aW1lcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICogVGhpcyBlbnN1cmVzIHNlYXJjaCBmdW5jdGlvbmFsaXR5IGV2ZW4gaWYgdGhlcmUgYXJlIHRyYW5zaWVudCBmYWlsdXJlc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFNlYXJjaEluZGV4V2l0aFJldHJ5KHJldHJpZXMgPSAzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSByZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VhcmNoSW5kZXguYnVpbGRJbmRleCh0aGlzLmVudHJpZXMpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYFNlYXJjaCBpbmRleCBidWlsdCBzdWNjZXNzZnVsbHkgb24gYXR0ZW1wdCAke2F0dGVtcHR9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFNlYXJjaCBpbmRleCBidWlsZCBhdHRlbXB0ICR7YXR0ZW1wdH0gZmFpbGVkYCwge1xuICAgICAgICAgIGVycm9yOiBsYXN0RXJyb3IubWVzc2FnZSxcbiAgICAgICAgICBlbnRyaWVzQ291bnQ6IHRoaXMuZW50cmllc1NpemVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgICAgLy8gRXhwb25lbnRpYWwgYmFja29mZjogMTAwbXMsIDIwMG1zLCA0MDBtc1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpICogMTAwO1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGFsbCByZXRyaWVzIGZhaWxlZFxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBzZWFyY2ggaW5kZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGVudHJpZXMgd2l0aCBhIHNwZWNpZmljIHRydXN0IGxldmVsXG4gICAqIEZJWCAjMTMyMDogUHVibGljIEFQSSBmb3IgYWNjZXNzaW5nIGVudHJpZXMgYnkgdHJ1c3QgbGV2ZWxcbiAgICogVXNlZCBieSBCYWNrZ3JvdW5kVmFsaWRhdG9yIHRvIGZpbmQgdW50cnVzdGVkIGVudHJpZXNcbiAgICpcbiAgICogQHBhcmFtIHRydXN0TGV2ZWwgLSBUaGUgdHJ1c3QgbGV2ZWwgdG8gZmlsdGVyIGJ5XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG1lbW9yeSBlbnRyaWVzIG1hdGNoaW5nIHRoZSB0cnVzdCBsZXZlbFxuICAgKi9cbiAgcHVibGljIGdldEVudHJpZXNCeVRydXN0TGV2ZWwodHJ1c3RMZXZlbDogVHJ1c3RMZXZlbCk6IE1lbW9yeUVudHJ5W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkudHJ1c3RMZXZlbCA9PT0gdHJ1c3RMZXZlbCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBlbnRyaWVzIGluIHRoaXMgbWVtb3J5XG4gICAqIEZJWCAjMTMyMDogUHVibGljIEFQSSBmb3IgYWNjZXNzaW5nIGFsbCBlbnRyaWVzXG4gICAqIFJlcGxhY2VzIHRoZSBuZWVkIGZvciBgKG1lbW9yeSBhcyBhbnkpLmVudHJpZXNgIGhhY2tzXG4gICAqXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGFsbCBtZW1vcnkgZW50cmllc1xuICAgKi9cbiAgcHVibGljIGdldEFsbEVudHJpZXMoKTogTWVtb3J5RW50cnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVudHJpZXMgbWFwIGRpcmVjdGx5XG4gICAqIFVzZWQgYnkgUmV0ZW50aW9uUG9saWN5U2VydmljZSBmb3IgcmV0ZW50aW9uIGVuZm9yY2VtZW50IChJc3N1ZSAjNTEpXG4gICAqXG4gICAqIEByZXR1cm5zIE1hcCBvZiBlbnRyeSBJRCB0byBtZW1vcnkgZW50cnlcbiAgICovXG4gIHB1YmxpYyBnZXRFbnRyaWVzKCk6IE1hcDxzdHJpbmcsIE1lbW9yeUVudHJ5PiB7XG4gICAgLy8gUmV0dXJuIGEgbmV3IE1hcCB0byBwcmV2ZW50IGV4dGVybmFsIG1vZGlmaWNhdGlvbiBvZiBpbnRlcm5hbCBzdGF0ZVxuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuZW50cmllcy5lbnRyaWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIGVudHJ5IGJ5IElEXG4gICAqIEZJWCAjNTE6IFB1YmxpYyBBUEkgZm9yIHJldGVudGlvbiBwb2xpY3kgdG8gcmVtb3ZlIGV4cGlyZWQgZW50cmllc1xuICAgKiBSZXBsYWNlcyB0aGUgbmVlZCBmb3IgYChtZW1vcnkgYXMgYW55KS5lbnRyaWVzLmRlbGV0ZSgpYCBoYWNrc1xuICAgKlxuICAgKiBAcGFyYW0gZW50cnlJZCAtIFRoZSBJRCBvZiB0aGUgZW50cnkgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgZW50cnkgd2FzIHJlbW92ZWQsIGZhbHNlIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZUVudHJ5KGVudHJ5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZGVsZXRlKGVudHJ5SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpdGVyYXRvciBvdmVyIGFsbCBlbnRyaWVzXG4gICAqIEZJWCAjMTMyMDogTWVtb3J5LWVmZmljaWVudCB3YXkgdG8gaXRlcmF0ZSBlbnRyaWVzXG4gICAqXG4gICAqIEByZXR1cm5zIEl0ZXJhdG9yIG92ZXIgbWVtb3J5IGVudHJpZXNcbiAgICovXG4gIHB1YmxpYyAqZ2V0RW50cmllc0l0ZXJhdG9yKCk6IEl0ZXJhYmxlSXRlcmF0b3I8TWVtb3J5RW50cnk+IHtcbiAgICB5aWVsZCogdGhpcy5lbnRyaWVzLnZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZmlsZSBwYXRoIGZvciB0aGlzIG1lbW9yeVxuICAgKiBGSVggIzEzMjA6IFVzZWQgYnkgTWVtb3J5TWFuYWdlciBhZnRlciBsb2FkaW5nXG4gICAqIEZJWCAoU29uYXJDbG91ZCk6IEFkZGVkIGlucHV0IHZhbGlkYXRpb24gd2l0aCBwcm9wZXIgZXJyb3IgdHlwZXNcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgZmlsZSBwYXRoIHdoZXJlIHRoaXMgbWVtb3J5IGlzIHN0b3JlZFxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHBhdGggaXMgbm90IGEgc3RyaW5nXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBwYXRoIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgc2V0RmlsZVBhdGgocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWVtb3J5IGZpbGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmIChwYXRoLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IGZpbGUgcGF0aCBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgdGhpcy5maWxlUGF0aCA9IHBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaWxlIHBhdGggZm9yIHRoaXMgbWVtb3J5XG4gICAqIEZJWCAjMTMyMDogUmV0dXJucyB0aGUgcGF0aCB3aGVyZSB0aGlzIG1lbW9yeSBpcyBzdG9yZWRcbiAgICogQHJldHVybnMgVGhlIGZpbGUgcGF0aCwgb3IgdW5kZWZpbmVkIGlmIG5vdCB5ZXQgcGVyc2lzdGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0RmlsZVBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoaXMgbWVtb3J5IHRvIGRpc2tcbiAgICogRklYICMxMzIwOiBJbnN0YW5jZSBtZXRob2QgZm9yIHBlcnNpc3RpbmcgbWVtb3J5IGNoYW5nZXNcbiAgICogVXNlZCBieSBCYWNrZ3JvdW5kVmFsaWRhdG9yIHRvIHNhdmUgdXBkYXRlZCB0cnVzdCBsZXZlbHNcbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gc2F2ZSBpcyBjb21wbGV0ZVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbWVtb3J5IGhhcyBub3QgYmVlbiBsb2FkZWQgZnJvbSBmaWxlIGFuZCBubyBwYXRoIGlzIHNldFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWFuYWdlciA9IE1lbW9yeS5nZXRNZW1vcnlNYW5hZ2VyKCk7XG4gICAgYXdhaXQgbWFuYWdlci5zYXZlKHRoaXMsIHRoaXMuZmlsZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYWxsIG1lbW9yaWVzIHRoYXQgaGF2ZSBlbnRyaWVzIHdpdGggYSBzcGVjaWZpYyB0cnVzdCBsZXZlbFxuICAgKiBGSVggIzEzMjA6IFN0YXRpYyBxdWVyeSBBUEkgZm9yIGZpbmRpbmcgbWVtb3JpZXMgYnkgdHJ1c3QgbGV2ZWxcbiAgICogVXNlZCBieSBCYWNrZ3JvdW5kVmFsaWRhdG9yIHRvIGRpc2NvdmVyIHVudHJ1c3RlZCBtZW1vcmllc1xuICAgKlxuICAgKiBAcGFyYW0gdHJ1c3RMZXZlbCAtIFRoZSB0cnVzdCBsZXZlbCB0byBmaWx0ZXIgYnlcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBxdWVyeSBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zLmxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgbWVtb3JpZXMgdG8gcmV0dXJuXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGFycmF5IG9mIG1lbW9yaWVzIHdpdGggbWF0Y2hpbmcgZW50cmllc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBmaW5kQnlUcnVzdExldmVsKFxuICAgIHRydXN0TGV2ZWw6IFRydXN0TGV2ZWwsXG4gICAgb3B0aW9ucz86IHsgbGltaXQ/OiBudW1iZXIgfVxuICApOiBQcm9taXNlPE1lbW9yeVtdPiB7XG4gICAgY29uc3QgbWFuYWdlciA9IE1lbW9yeS5nZXRNZW1vcnlNYW5hZ2VyKCk7XG5cbiAgICAvLyBMb2FkIGFsbCBtZW1vcmllcyBhbmQgZmlsdGVyIGJ5IHRydXN0IGxldmVsXG4gICAgY29uc3QgYWxsTWVtb3JpZXMgPSBhd2FpdCBtYW5hZ2VyLmxpc3QoKTtcbiAgICBjb25zdCBtYXRjaGluZ01lbW9yaWVzOiBNZW1vcnlbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBtZW1vcnkgb2YgYWxsTWVtb3JpZXMpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgbWVtb3J5IGhhcyBhbnkgZW50cmllcyB3aXRoIHRoZSBzcGVjaWZpZWQgdHJ1c3QgbGV2ZWxcbiAgICAgIGNvbnN0IGhhc01hdGNoaW5nRW50cmllcyA9IG1lbW9yeS5nZXRFbnRyaWVzQnlUcnVzdExldmVsKHRydXN0TGV2ZWwpLmxlbmd0aCA+IDA7XG5cbiAgICAgIGlmIChoYXNNYXRjaGluZ0VudHJpZXMpIHtcbiAgICAgICAgbWF0Y2hpbmdNZW1vcmllcy5wdXNoKG1lbW9yeSk7XG5cbiAgICAgICAgLy8gQXBwbHkgbGltaXQgaWYgc3BlY2lmaWVkXG4gICAgICAgIGlmIChvcHRpb25zPy5saW1pdCAmJiBtYXRjaGluZ01lbW9yaWVzLmxlbmd0aCA+PSBvcHRpb25zLmxpbWl0KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIG1lbW9yaWVzIHdpdGggdHJ1c3QgbGV2ZWwnLCB7XG4gICAgICB0cnVzdExldmVsLFxuICAgICAgY291bnQ6IG1hdGNoaW5nTWVtb3JpZXMubGVuZ3RoLFxuICAgICAgbGltaXQ6IG9wdGlvbnM/LmxpbWl0XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hpbmdNZW1vcmllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIHF1ZXJ5IEFQSSBmb3IgZmluZGluZyBtZW1vcmllc1xuICAgKiBGSVggIzEzMjA6IEZsZXhpYmxlIHF1ZXJ5IEFQSSBmb3IgbXVsdGlwbGUgY3JpdGVyaWFcbiAgICogRklYIChTb25hckNsb3VkKTogUmVmYWN0b3JlZCB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHkgZnJvbSAyMCB0byA4XG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSBRdWVyeSBmaWx0ZXIgY3JpdGVyaWFcbiAgICogQHBhcmFtIGZpbHRlci50cnVzdExldmVsIC0gRmlsdGVyIGJ5IHRydXN0IGxldmVsXG4gICAqIEBwYXJhbSBmaWx0ZXIudGFncyAtIEZpbHRlciBieSB0YWdzXG4gICAqIEBwYXJhbSBmaWx0ZXIubWF4QWdlIC0gRmlsdGVyIGJ5IGFnZSBpbiBkYXlzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGFycmF5IG9mIG1hdGNoaW5nIG1lbW9yaWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGZpbmQoZmlsdGVyOiB7XG4gICAgdHJ1c3RMZXZlbD86IFRydXN0TGV2ZWw7XG4gICAgdGFncz86IHN0cmluZ1tdO1xuICAgIG1heEFnZT86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8TWVtb3J5W10+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gTWVtb3J5LmdldE1lbW9yeU1hbmFnZXIoKTtcblxuICAgIC8vIExvYWQgYWxsIG1lbW9yaWVzXG4gICAgY29uc3QgYWxsTWVtb3JpZXMgPSBhd2FpdCBtYW5hZ2VyLmxpc3QoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBjdXRvZmYgZGF0ZSBpZiBtYXhBZ2UgaXMgc3BlY2lmaWVkXG4gICAgY29uc3QgY3V0b2ZmRGF0ZSA9IGZpbHRlci5tYXhBZ2VcbiAgICAgID8gbmV3IERhdGUoRGF0ZS5ub3coKSAtIGZpbHRlci5tYXhBZ2UgKiAyNCAqIDYwICogNjAgKiAxMDAwKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBGaWx0ZXIgbWVtb3JpZXMgdXNpbmcgaGVscGVyIG1ldGhvZFxuICAgIGNvbnN0IHJlc3VsdHMgPSBhbGxNZW1vcmllcy5maWx0ZXIobWVtb3J5ID0+XG4gICAgICB0aGlzLm1hdGNoZXNGaWx0ZXIobWVtb3J5LCBmaWx0ZXIsIGN1dG9mZkRhdGUpXG4gICAgKTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnTWVtb3J5IHF1ZXJ5IGNvbXBsZXRlJywge1xuICAgICAgZmlsdGVyLFxuICAgICAgcmVzdWx0Q291bnQ6IHJlc3VsdHMubGVuZ3RoXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG1lbW9yeSBtYXRjaGVzIHRoZSBnaXZlbiBmaWx0ZXIgY3JpdGVyaWFcbiAgICogRklYIChTb25hckNsb3VkKTogRXh0cmFjdGVkIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbWF0Y2hlc0ZpbHRlcihcbiAgICBtZW1vcnk6IE1lbW9yeSxcbiAgICBmaWx0ZXI6IHsgdHJ1c3RMZXZlbD86IFRydXN0TGV2ZWw7IHRhZ3M/OiBzdHJpbmdbXTsgbWF4QWdlPzogbnVtYmVyIH0sXG4gICAgY3V0b2ZmRGF0ZT86IERhdGVcbiAgKTogYm9vbGVhbiB7XG4gICAgLy8gRmlsdGVyIGJ5IHRydXN0IGxldmVsXG4gICAgaWYgKGZpbHRlci50cnVzdExldmVsKSB7XG4gICAgICBjb25zdCBoYXNNYXRjaGluZ1RydXN0TGV2ZWwgPSBtZW1vcnkuZ2V0RW50cmllc0J5VHJ1c3RMZXZlbChmaWx0ZXIudHJ1c3RMZXZlbCkubGVuZ3RoID4gMDtcbiAgICAgIGlmICghaGFzTWF0Y2hpbmdUcnVzdExldmVsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgYnkgdGFnc1xuICAgIGlmIChmaWx0ZXIudGFncyAmJiBmaWx0ZXIudGFncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtZW1vcnlUYWdzID0gbWVtb3J5Lm1ldGFkYXRhLnRhZ3MgfHwgW107XG4gICAgICBjb25zdCBoYXNNYXRjaGluZ1RhZyA9IGZpbHRlci50YWdzLnNvbWUodGFnID0+IG1lbW9yeVRhZ3MuaW5jbHVkZXModGFnKSk7XG4gICAgICBpZiAoIWhhc01hdGNoaW5nVGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgYnkgYWdlXG4gICAgaWYgKGN1dG9mZkRhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbWVtb3J5LmdldFN0YXRzKCk7XG4gICAgICBpZiAoIXN0YXRzLm5ld2VzdEVudHJ5IHx8IHN0YXRzLm5ld2VzdEVudHJ5IDwgY3V0b2ZmRGF0ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../../../src/elements/skills/Skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../../../src/elements/skills/Skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAOvD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,IAAI,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,KAAM,SAAQ,WAAY,YAAW,QAAQ;IACzC,QAAQ,EAAE,aAAa,CAAC;IAEhC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAG5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,MAAM,YAAK,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,GAAE,MAAW;IA0D/H;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA0E5C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAI/B;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBxC;;OAEG;IACa,QAAQ,IAAI,uBAAuB;IAiFnD;;OAEG;IACa,eAAe,IAAI,MAAM;IAgBzC;;OAEG;cACgB,UAAU,IAAI,MAAM;IAoBvC;;;OAGG;IACa,SAAS,IAAI,MAAM;IAkBnC;;OAEG;IACa,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmC/C;;OAEG;IACmB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/C;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK;IAkBjD;;;;OAIG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjD;;;;;OAKG;IACH,eAAe,IAAI,IAAI;CAIxB"}