@pipeline-builder/pipeline-data 4.3.6 → 4.3.7

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 (70) hide show
  1. package/lib/api/access-control-builder.js +1 -1
  2. package/lib/api/alert-destinations.js +1 -1
  3. package/lib/api/crud-service.js +1 -1
  4. package/lib/api/ecosystem-privacy.js +1 -1
  5. package/lib/api/keyset-cursor.js +1 -1
  6. package/lib/api/pipeline-step-resolution.js +1 -1
  7. package/lib/api/plugin-advisories.js +1 -1
  8. package/lib/api/plugin-consumption-policy.js +1 -1
  9. package/lib/api/plugin-resolution.js +6 -1
  10. package/lib/api/public-directory.d.ts +71 -3
  11. package/lib/api/public-directory.js +68 -22
  12. package/lib/api/query-builders.js +47 -2
  13. package/lib/api/reporting/analytics-queries.js +1 -1
  14. package/lib/api/reporting/caches.js +1 -1
  15. package/lib/api/reporting/daily-rollup.js +1 -1
  16. package/lib/api/reporting/deploy-rollup.js +1 -1
  17. package/lib/api/reporting/dora-scoring.js +1 -1
  18. package/lib/api/reporting/dora.js +1 -1
  19. package/lib/api/reporting/failure-classifier.js +1 -1
  20. package/lib/api/reporting/ingest.js +1 -1
  21. package/lib/api/reporting/last-deploy.js +1 -1
  22. package/lib/api/reporting/needs-attention.js +1 -1
  23. package/lib/api/reporting/plugin-exposure.js +1 -1
  24. package/lib/api/reporting/plugin-runtime.js +1 -1
  25. package/lib/api/reporting/query-scope.js +1 -1
  26. package/lib/api/reporting/retention-sweep.js +1 -1
  27. package/lib/api/reporting/retention.js +1 -1
  28. package/lib/api/reporting/sql-helpers.js +1 -1
  29. package/lib/api/reporting/stakeholder/compose.js +1 -1
  30. package/lib/api/reporting/stakeholder/index.js +1 -1
  31. package/lib/api/reporting/stakeholder/period.js +1 -1
  32. package/lib/api/reporting/stakeholder/report-html.js +1 -1
  33. package/lib/api/reporting/stakeholder/sections.js +1 -1
  34. package/lib/api/reporting/stakeholder/store.js +1 -1
  35. package/lib/api/reporting/stakeholder/templates.js +1 -1
  36. package/lib/api/reporting/types.js +1 -1
  37. package/lib/api/reporting-service.js +1 -1
  38. package/lib/api/semver-range.js +1 -1
  39. package/lib/api/soft-delete-sweep.js +1 -1
  40. package/lib/api/support-cases.js +1 -1
  41. package/lib/api/version-references.js +1 -1
  42. package/lib/api/viewer-context.js +1 -1
  43. package/lib/core/query-filters.d.ts +25 -0
  44. package/lib/core/query-filters.js +1 -1
  45. package/lib/database/drizzle-schema.d.ts +19 -0
  46. package/lib/database/drizzle-schema.js +1 -1
  47. package/lib/database/index.js +1 -1
  48. package/lib/database/pg-result.js +1 -1
  49. package/lib/database/postgres-connection.js +1 -1
  50. package/lib/database/public-reader.js +1 -1
  51. package/lib/database/read-connection.js +1 -1
  52. package/lib/database/read-lag.js +1 -1
  53. package/lib/database/retry-strategy.js +1 -1
  54. package/lib/database/schema/alert.js +1 -1
  55. package/lib/database/schema/compliance.js +1 -1
  56. package/lib/database/schema/dashboard.js +1 -1
  57. package/lib/database/schema/ecosystem.d.ts +17 -0
  58. package/lib/database/schema/ecosystem.js +3 -1
  59. package/lib/database/schema/message-attachment.js +1 -1
  60. package/lib/database/schema/message.d.ts +19 -0
  61. package/lib/database/schema/message.js +18 -1
  62. package/lib/database/schema/pipeline-template.js +1 -1
  63. package/lib/database/schema/pipeline.js +1 -1
  64. package/lib/database/schema/plugin.js +1 -1
  65. package/lib/database/schema/reporting-analytics.js +1 -1
  66. package/lib/database/schema/reporting-stakeholder.js +1 -1
  67. package/lib/database/schema/support.js +1 -1
  68. package/lib/database/tenancy.js +1 -1
  69. package/lib/index.js +1 -1
  70. package/package.json +8 -8
@@ -624,4 +624,4 @@ function isoOrNull(v) {
624
624
  const d = v instanceof Date ? v : new Date(String(v));
625
625
  return Number.isNaN(d.getTime()) ? null : d.toISOString();
626
626
  }
627
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXF1ZXJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9hbmFseXRpY3MtcXVlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVc3RCxtREFBbUQ7QUFDbkQsU0FBUyxZQUFZLENBQUMsR0FBa0MsRUFBRSxLQUFxQjtJQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUM1QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBWSxFQUFFLEtBQUssQ0FBQyxLQUFjLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBbUJEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFxQixFQUFFLEtBQUssR0FBRyxFQUFFO0lBQzFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVB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QUFFLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBxdWVyaWVzIHRoZSBiZXNwb2tlIHJlcG9ydCBzZWN0aW9ucyByZWFkLlxuICpcbiAqIEFsbCBvZiB0aGVtIGdvIHRocm91Z2ggYGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzYCwgYGRvcmFfZGVwbG95bWVudHNgLFxuICogYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCBvciBgcGx1Z2luX3Z1bG5fZXhwb3N1cmVgIOKAlCBuZXZlciByYXdcbiAqIGBwaXBlbGluZV9ldmVudHNgLiBUaGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiB0aG9zZSB0YWJsZXM6IGEgcXVhcnRlcmx5IHJlcG9ydFxuICogb3ZlciBhIGJ1c3kgb3JnIGNvc3RzIGEgZmV3IGh1bmRyZWQgcm93cywgYW5kIGtlZXBzIHdvcmtpbmcgYWZ0ZXIgcmV0ZW50aW9uIGhhc1xuICogc3dlcHQgdGhlIGV2ZW50cy5cbiAqXG4gKiBUV08gUlVMRVMgRVZFUlkgUVVFUlkgSEVSRSBGT0xMT1dTOlxuICpcbiAqICAtIE5PVEhJTkcgSVMgUEVSLVBFUlNPTi4gRXZlcnkgYWdncmVnYXRlIGlzIHBlciBwaXBlbGluZSwgcGVyIHN0YWdlLCBwZXJcbiAqICAgIGNhdGVnb3J5IG9yIHBlciBlbnZpcm9ubWVudC4gVGhlIHNlY3Rpb24gcmVnaXN0cnkgcmVmdXNlcyBhIHBlci1wZXJzb24gaWQgYXRcbiAqICAgIHJlZ2lzdHJhdGlvbjsgdGhlc2UgcXVlcmllcyBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyB0byByZWdpc3Rlci5cbiAqICAtIEEgWkVSTyBBTkQgQSBCTElORCBTUE9UIEFSRSBESUZGRVJFTlQuIFdoZXJlIGEgbnVtYmVyIGNhbiBiZSBhYnNlbnQgZm9yIGxhY2tcbiAqICAgIG9mIGRhdGEgcmF0aGVyIHRoYW4gbGFjayBvZiBhY3Rpdml0eSwgdGhlIHNoYXBlIGNhcnJpZXMgdGhhdCAoYG51bGxgLCBhXG4gKiAgICBgY292ZXJhZ2VgIGNvdW50LCBhbiBleHBsaWNpdCByZWFzb24pIGluc3RlYWQgb2YgY29sbGFwc2luZyB0byAwLlxuICpcbiAqIFJFQURTIEdPIFRPIFRIRSBSRVBMSUNBIFdIRU4gT05FIEVYSVNUUy4gRXZlcnkgcXVlcnkgYmVsb3cgcnVucyB0aHJvdWdoXG4gKiBgd2l0aFRlbmFudFR4UmVhZGAsIHRoZSByZWFkLW9ubHkgdmFyaWFudCBvZiBgd2l0aFRlbmFudFR4YC4gSXQgc2V0cyB0aGVcbiAqIGlkZW50aWNhbCBSTFMgR1VDcywgYWRkcyBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAsIGFuZCBmYWxscyBiYWNrIHRvIHRoZVxuICogcHJpbWFyeSBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXJlIGlzIG5vIHJlcGxpY2EsIHRoZSBraWxsIHN3aXRjaCBpcyBvZmYsXG4gKiByZXBsYXkgbGFnIGlzIGJleW9uZCBpdHMgdGhyZXNob2xkLCB0aGUgcmVxdWVzdCBoYXMgYWxyZWFkeSB3cml0dGVuLCBvciB0aGVyZVxuICogaXMgbm8gdGVuYW50IGNvbnRleHQg4oCUIHNvIHRoaXMgaXMgYSBuby1vcCB1bnRpbCBgREJfUkVBRF9IT1NUYCBpcyBjb25maWd1cmVkLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgV0FTIFRIRSBGSVJTVCBUTyBPUFQgSU4uIFRocmVlIGNvbmRpdGlvbnMgZGVjaWRlIHdoZXRoZXIgYVxuICogcXVlcnkgbWF5IGxlYXZlIHRoZSBwcmltYXJ5LCBhbmQgdGhpcyBmaWxlIHNhdGlzZmllcyBhbGwgdGhyZWUgYnlcbiAqIGNvbnN0cnVjdGlvbiDigJQgc28gdGhleSBhcmUgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gY2l0ZWQsIG5vdyB0aGF0IHRoZSBwbGFuXG4gKiB0aGF0IGludHJvZHVjZWQgdGhlbSBpcyByZXRpcmVkOlxuICpcbiAqICAgLSBOb3RoaW5nIGhlcmUgd3JpdGVzLiBUaGlydGVlbiBhZ2dyZWdhdGUgU0VMRUNUcywgbm8gSU5TRVJULCBubyBVUERBVEUsIG5vXG4gKiAgICAgYFNFTEVDVCDigKYgRk9SIFVQREFURWAsIG5vIGFkdmlzb3J5IGxvY2sg4oCUIHNvIG5vbmUgb2YgdGhlIGZvdXIgY2FsbCBzaXRlc1xuICogICAgIHRoZSBQaGFzZSAwYSBhdWRpdCBmb3VuZCBoaWRpbmcgYmVoaW5kIHJlYWQtbG9va2luZyBjb2RlLlxuICogICAtIE5vdGhpbmcgaGVyZSBmZWVkcyBhbiBBVVRIT1JJWkFUSU9OIGRlY2lzaW9uLiBUaGVzZSBhcmUgZGFzaGJvYXJkXG4gKiAgICAgYWdncmVnYXRlczsgYSBzdGFsZSBwZXJtaXNzaW9uIGNoZWNrIGlzIGEgc2VjdXJpdHkgYnVnLCBhIHN0YWxlIGNoYXJ0IGlzXG4gKiAgICAgYSBzdGFsZSBjaGFydC5cbiAqICAgLSBOb2JvZHkgaXMgYWJvdXQgdG8gQUNUIG9uIHRoZSByZXN1bHQuIEEgdXNlciB3aG8ganVzdCBjcmVhdGVkIGEgcGlwZWxpbmVcbiAqICAgICBsb29rcyBmb3IgaXQgaW4gYSBsaXN0LCBub3QgaW4gYSAzMC1kYXkgZmFpbHVyZS1yYXRlIHJvbGx1cC5cbiAqXG4gKiBBbmQgaXQgaXMgdGhlIGJlc3Qgb2ZmbG9hZCBjYW5kaWRhdGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBpcyBzYWZlOiB0aGVzZVxuICogYXJlIHRoZSBoZWF2aWVzdCBxdWVyaWVzIGluIHRoZSBwYWNrYWdlLCBzY2FubmluZyB0aW1lIHJhbmdlcyByYXRoZXIgdGhhblxuICogZmV0Y2hpbmcgcm93cyBieSBpZC5cbiAqXG4gKiBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAgYXBwbGllcyBvbiB0aGUgUFJJTUFSWSBwYXRoIHRvbywgc28gaWYgYSB3cml0ZVxuICogaXMgZXZlciBhZGRlZCBiZWxvdyBpdCBmYWlscyBoZXJlLCBsb3VkbHksIHJhdGhlciB0aGFuIGF0IHdoaWNoZXZlciB0YXJnZXRcbiAqIHRoZSByZWFkIGhhcHBlbmVkIHRvIGxhbmQgb24uXG4gKi9cblxuaW1wb3J0IHsgYW5kLCBlcSwgZ3RlLCBpbkFycmF5LCBsdCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgRkFJTFVSRV9DQVRFR09SWV9MQUJFTFMsIGlzVGVhbUFjdGlvbmFibGUgfSBmcm9tICcuL2ZhaWx1cmUtY2xhc3NpZmllci5qcyc7XG5pbXBvcnQgeyBsaXZlRXhwb3N1cmVQcmVkaWNhdGUgfSBmcm9tICcuL3BsdWdpbi1leHBvc3VyZS5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZhaWx1cmVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeFJlYWQgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIFRoZSB3aW5kb3cgYW5kIG9yZyBzY29wZSBldmVyeSBxdWVyeSB0YWtlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzU2NvcGUge1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogYFtzZWxmLCAuLi5kZXNjZW5kYW50c11gIGZvciBhIHJvbGx1cDsgdW5kZWZpbmVkID0gdGhpcyBvcmcgb25seS4gKi9cbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbn1cblxuLyoqIFRoZSBvcmcgcHJlZGljYXRlOiBvbmUgb3JnLCBvciBhIHJvbGx1cCBzZXQuICovXG5mdW5jdGlvbiBvcmdQcmVkaWNhdGUoY29sOiBQYXJhbWV0ZXJzPHR5cGVvZiBpbkFycmF5PlswXSwgc2NvcGU6IEFuYWx5dGljc1Njb3BlKSB7XG4gIHJldHVybiBzY29wZS5vcmdJZHMgJiYgc2NvcGUub3JnSWRzLmxlbmd0aCA+IDBcbiAgICA/IGluQXJyYXkoY29sLCBzY29wZS5vcmdJZHMpXG4gICAgOiBlcShjb2wgYXMgbmV2ZXIsIHNjb3BlLm9yZ0lkIGFzIG5ldmVyKTtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSdzIGxpbmUgaW4gdGhlIGJyZWFrZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCcmVha2Rvd25Sb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcnVuczogbnVtYmVyO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIHN1Y2Nlc3NQY3Q6IG51bWJlciB8IG51bGw7XG4gIHA5NU1zOiBudW1iZXIgfCBudWxsO1xuICBkZXBsb3lzOiBudW1iZXI7XG4gIC8qKiBUaGUgbW9zdCByZWNlbnQgZmFpbHVyZSdzIGRheSBhbmQgc3RhZ2UsIGZvciBcIndoYXQgdG8gbG9vayBhdCBmaXJzdFwiLiAqL1xuICBsYXN0RmFpbHVyZUF0OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0RmFpbHVyZVN0YWdlOiBzdHJpbmcgfCBudWxsO1xuICBidWlsZFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItcGlwZWxpbmUgZGVsaXZlcnksIHdvcnN0IGZpcnN0LlxuICpcbiAqIFdPUlNUIEZJUlNULCBhbmQgY2FwcGVkLCBiZWNhdXNlIHRoZSBwb2ludCBvZiB0aGUgc2VjdGlvbiBpcyBcIndoZXJlIHNob3VsZFxuICogYXR0ZW50aW9uIGdvXCIuIEEgbGlzdCBzb3J0ZWQgYnkgbmFtZSwgb3IgYW4gdW5ib3VuZGVkIG9uZSwgaXMgYSBkYXRhIGR1bXA6IHRoZVxuICogbGVhZCBzdGlsbCBoYXMgdG8gZmluZCB0aGUgcHJvYmxlbSwgd2hpY2ggaXMgdGhlIHdvcmsgdGhlIHJlcG9ydCB3YXMgc3VwcG9zZWQgdG9cbiAqIGRvLiBUaWVzIGJyZWFrIG9uIHZvbHVtZSwgc28gYSA1MCUtc3VjY2VzcyBwaXBlbGluZSB0aGF0IHJhbiB0d2ljZSBkb2VzIG5vdFxuICogb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gKlxuICogYHN1Y2Nlc3NQY3RgIGlzIE5VTEwgZm9yIGEgcGlwZWxpbmUgd2l0aCBubyBydW5zIGluIHRoZSB3aW5kb3cg4oCUIG5vdCAwLiBBXG4gKiBwaXBlbGluZSBub2JvZHkgcmFuIGlzIG5vdCBhIHBpcGVsaW5lIHRoYXQgZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVCcmVha2Rvd24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDEwKTogUHJvbWlzZTxQaXBlbGluZUJyZWFrZG93blJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCB0b3RhbHMgQVMgKFxuICAgICAgU0VMRUNUXG4gICAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICAgIFNVTShyLnJ1bnMpOjppbnQgQVMgcnVucyxcbiAgICAgICAgU1VNKHIuc3VjY2VlZGVkKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgU1VNKHIuZmFpbGVkKTo6aW50IEFTIGZhaWxlZCxcbiAgICAgICAgTUFYKHIucDk1X21zKTo6aW50IEFTIHA5NV9tcyxcbiAgICAgICAgU1VNKHIuYnVpbGRfc2Vjb25kcyk6OmludCBBUyBidWlsZF9zZWNvbmRzXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgLS0gVGhlIHBpcGVsaW5lLWxldmVsIGdyYWluIG9ubHk6IHN1bW1pbmcgdGhlIHN0YWdlIHJvd3MgdG9vIHdvdWxkIGNvdW50XG4gICAgICAgIC0tIGV2ZXJ5IHJ1biBvbmNlIHBlciBzdGFnZS5cbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSByLnBpcGVsaW5lX2lkXG4gICAgKSxcbiAgICBkZXBsb3lzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgQ09VTlQoKik6OmludCBBUyBkZXBsb3lzXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdWNjZWVkZWQgPSB0cnVlXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICksXG4gICAgbGFzdF9mYWlsIEFTIChcbiAgICAgIC0tIFRoZSBtb3N0IHJlY2VudCBmYWlsaW5nIFNUQUdFIHJvdyBwZXIgcGlwZWxpbmU6IHdoYXQgdG8gbG9vayBhdCBmaXJzdC5cbiAgICAgIFNFTEVDVCBESVNUSU5DVCBPTiAocGlwZWxpbmVfaWQpIHBpcGVsaW5lX2lkLCBkYXksIHN0YWdlX25hbWVcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN0YWdlX25hbWUgPD4gJycgQU5EIGZhaWxlZCA+IDBcbiAgICAgIE9SREVSIEJZIHBpcGVsaW5lX2lkLCBkYXkgREVTQywgZmFpbGVkIERFU0NcbiAgICApXG4gICAgU0VMRUNUXG4gICAgICB0LnBpcGVsaW5lX2lkLFxuICAgICAgcC5waXBlbGluZV9uYW1lLFxuICAgICAgcC5wcm9qZWN0LFxuICAgICAgdC5ydW5zLCB0LnN1Y2NlZWRlZCwgdC5mYWlsZWQsIHQucDk1X21zLCB0LmJ1aWxkX3NlY29uZHMsXG4gICAgICBDT0FMRVNDRShkLmRlcGxveXMsIDApIEFTIGRlcGxveXMsXG4gICAgICBmLmRheSBBUyBsYXN0X2ZhaWx1cmVfYXQsXG4gICAgICBmLnN0YWdlX25hbWUgQVMgbGFzdF9mYWlsdXJlX3N0YWdlLFxuICAgICAgQ0FTRSBXSEVOIHQucnVucyA+IDAgVEhFTiBST1VORCgodC5zdWNjZWVkZWQ6Om51bWVyaWMgLyB0LnJ1bnMpICogMTAwLCAxKSBFTFNFIE5VTEwgRU5EIEFTIHN1Y2Nlc3NfcGN0XG4gICAgRlJPTSB0b3RhbHMgdFxuICAgIExFRlQgSk9JTiBkZXBsb3lzIGQgT04gZC5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gbGFzdF9mYWlsIGYgT04gZi5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHQucGlwZWxpbmVfaWRcbiAgICAtLSBXb3JzdCBmaXJzdDogbG93ZXN0IHN1Y2Nlc3MgcmF0ZSwgdGhlbiBtb3N0IHJ1bnMsIHNvIGEgNTAlIHBpcGVsaW5lIHRoYXQgcmFuXG4gICAgLS0gdHdpY2UgZG9lcyBub3Qgb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gICAgT1JERVIgQlkgc3VjY2Vzc19wY3QgQVNDIE5VTExTIExBU1QsIHQucnVucyBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcHJvamVjdDogKHIucHJvamVjdCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHJ1bnM6IG51bShyLnJ1bnMpLFxuICAgIHN1Y2NlZWRlZDogbnVtKHIuc3VjY2VlZGVkKSxcbiAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgc3VjY2Vzc1BjdDogci5zdWNjZXNzX3BjdCA9PT0gbnVsbCA/IG51bGwgOiBOdW1iZXIoci5zdWNjZXNzX3BjdCksXG4gICAgcDk1TXM6IHIucDk1X21zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA5NV9tcyksXG4gICAgZGVwbG95czogbnVtKHIuZGVwbG95cyksXG4gICAgbGFzdEZhaWx1cmVBdDogaXNvT3JOdWxsKHIubGFzdF9mYWlsdXJlX2F0KSxcbiAgICBsYXN0RmFpbHVyZVN0YWdlOiAoci5sYXN0X2ZhaWx1cmVfc3RhZ2UgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBidWlsZFNlY29uZHM6IG51bShyLmJ1aWxkX3NlY29uZHMpLFxuICB9KSk7XG59XG5cbi8qKiBPbmUgZmFpbHVyZSBjYXRlZ29yeSdzIHNoYXJlIG9mIHRoZSBwZXJpb2QuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWx1cmVDYXRlZ29yeVJvdyB7XG4gIGNhdGVnb3J5OiBGYWlsdXJlQ2F0ZWdvcnk7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSB0ZWFtIGNhbiBhY3Qgb24gaXQsIG9yIGl0IGhhcHBlbmVkIHRvIHRoZW0uICovXG4gIHRlYW1BY3Rpb25hYmxlOiBib29sZWFuO1xuICAvKiogQ2hhbmdlIHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGluIGZhaWx1cmVzLiAqL1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgcGlwZWxpbmVzIGl0IGhpdCBoYXJkZXN0LiAqL1xuICB0b3BQaXBlbGluZXM6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT47XG59XG5cbi8qKlxuICogRmFpbHVyZXMgYnkgY2F0ZWdvcnksIHdpdGggdGhlIHByZXZpb3VzIHBlcmlvZCdzIGNvdW50cyBmb3IgdGhlIHRyZW5kLlxuICpcbiAqIFNQTElUUyBBQ1RJT05BQkxFIEZST00gTk9ULiBBIHdlZWsgd2hvc2UgZmFpbHVyZXMgd2VyZSBhbGwgY2xvdWQgdGhyb3R0bGluZyBpcyBhXG4gKiBkaWZmZXJlbnQgY29udmVyc2F0aW9uIGZyb20gb25lIHdob3NlIGZhaWx1cmVzIHdlcmUgYWxsIGJyb2tlbiB0ZXN0cywgYW5kXG4gKiBwcmVzZW50aW5nIHRoZW0gaW4gb25lIHJhbmtlZCBsaXN0IGludml0ZXMgZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbiDigJQgYSB0ZWFtXG4gKiBiZWluZyBhc2tlZCB0byBmaXggYW4gQVdTIGNhcGFjaXR5IHByb2JsZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGYWlsdXJlQW5hbHlzaXMoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9LFxuKTogUHJvbWlzZTx7IGNhdGVnb3JpZXM6IEZhaWx1cmVDYXRlZ29yeVJvd1tdOyB0b3RhbDogbnVtYmVyOyBhY3Rpb25hYmxlVG90YWw6IG51bWJlciB9PiB7XG4gIGNvbnN0IGNvdW50cyA9IGF3YWl0IGNhdGVnb3J5Q291bnRzKHNjb3BlKTtcbiAgY29uc3QgcHJpb3IgPSBwcmV2aW91cyA/IGF3YWl0IGNhdGVnb3J5Q291bnRzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0pIDogbnVsbDtcbiAgY29uc3QgdG90YWwgPSBbLi4uY291bnRzLnZhbHVlcygpXS5yZWR1Y2UoKHMsIHYpID0+IHMgKyB2LmNvdW50LCAwKTtcbiAgY29uc3QgdG9wQnlDYXRlZ29yeSA9IGF3YWl0IHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoc2NvcGUpO1xuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4uY291bnRzLmVudHJpZXMoKV1cbiAgICAubWFwKChbY2F0ZWdvcnksIHZdKSA9PiAoe1xuICAgICAgY2F0ZWdvcnksXG4gICAgICBsYWJlbDogRkFJTFVSRV9DQVRFR09SWV9MQUJFTFNbY2F0ZWdvcnldID8/IGNhdGVnb3J5LFxuICAgICAgY291bnQ6IHYuY291bnQsXG4gICAgICBzaGFyZVBjdDogdG90YWwgPiAwID8gTnVtYmVyKCgodi5jb3VudCAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgICAgdGVhbUFjdGlvbmFibGU6IGlzVGVhbUFjdGlvbmFibGUoY2F0ZWdvcnkpLFxuICAgICAgY2hhbmdlOiBwcmlvciA/IHYuY291bnQgLSAocHJpb3IuZ2V0KGNhdGVnb3J5KT8uY291bnQgPz8gMCkgOiBudWxsLFxuICAgICAgdG9wUGlwZWxpbmVzOiB0b3BCeUNhdGVnb3J5LmdldChjYXRlZ29yeSkgPz8gW10sXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuY291bnQgLSBhLmNvdW50KTtcblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3JpZXMsXG4gICAgdG90YWwsXG4gICAgYWN0aW9uYWJsZVRvdGFsOiBjYXRlZ29yaWVzLmZpbHRlcigoYykgPT4gYy50ZWFtQWN0aW9uYWJsZSkucmVkdWNlKChzLCBjKSA9PiBzICsgYy5jb3VudCwgMCksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhdGVnb3J5Q291bnRzKHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8TWFwPEZhaWx1cmVDYXRlZ29yeSwgeyBjb3VudDogbnVtYmVyIH0+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGtleSBBUyBjYXRlZ29yeSwgU1VNKHZhbHVlOjppbnQpOjppbnQgQVMgY291bnRcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHIsIGpzb25iX2VhY2goci5mYWlsdXJlc19ieV9jYXRlZ29yeSlcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkga2V5XG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxGYWlsdXJlQ2F0ZWdvcnksIHsgY291bnQ6IG51bWJlciB9PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSBvdXQuc2V0KHIuY2F0ZWdvcnkgYXMgRmFpbHVyZUNhdGVnb3J5LCB7IGNvdW50OiBudW0oci5jb3VudCkgfSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGVyQ2F0ZWdvcnkgPSAzLFxuKTogUHJvbWlzZTxNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+Pj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBjYXRlZ29yeSwgcGlwZWxpbmVfaWQsIHBpcGVsaW5lX25hbWUsIGNvdW50IEZST00gKFxuICAgICAgU0VMRUNUXG4gICAgICAgIGUua2V5IEFTIGNhdGVnb3J5LFxuICAgICAgICByLnBpcGVsaW5lX2lkLFxuICAgICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICAgIFNVTShlLnZhbHVlOjppbnQpOjppbnQgQVMgY291bnQsXG4gICAgICAgIFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgZS5rZXkgT1JERVIgQlkgU1VNKGUudmFsdWU6OmludCkgREVTQykgQVMgcm5cbiAgICAgIC0tIENST1NTIEpPSU4gTEFURVJBTCwgbm90IGEgY29tbWEgam9pbi4gV2l0aCBGUk9NIGEsIGYoYS54KSBlIExFRlQgSk9JTiBiLFxuICAgICAgLS0gdGhlIExFRlQgSk9JTiBiaW5kcyB0byBlIGFsb25lIGFuZCByIGZhbGxzIG91dCBvZiBzY29wZSBpbiBpdHMgT04gY2xhdXNlXG4gICAgICAtLSAoXCJpbnZhbGlkIHJlZmVyZW5jZSB0byBGUk9NLWNsYXVzZSBlbnRyeVwiKS4gVGhlIGV4cGxpY2l0IGxhdGVyYWwga2VlcHMgYWxsXG4gICAgICAtLSB0aHJlZSBpbiBvbmUgam9pbiB0cmVlLlxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwcyByXG4gICAgICBDUk9TUyBKT0lOIExBVEVSQUwganNvbmJfZWFjaChyLmZhaWx1cmVzX2J5X2NhdGVnb3J5KSBlXG4gICAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBlLmtleSwgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lXG4gICAgKSByYW5rZWRcbiAgICBXSEVSRSBybiA8PSAke3BlckNhdGVnb3J5fVxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qga2V5ID0gci5jYXRlZ29yeSBhcyBGYWlsdXJlQ2F0ZWdvcnk7XG4gICAgY29uc3QgbGlzdCA9IG91dC5nZXQoa2V5KSA/PyBbXTtcbiAgICBsaXN0LnB1c2goe1xuICAgICAgcGlwZWxpbmVJZDogU3RyaW5nKHIucGlwZWxpbmVfaWQpLFxuICAgICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBjb3VudDogbnVtKHIuY291bnQpLFxuICAgIH0pO1xuICAgIG91dC5zZXQoa2V5LCBsaXN0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogT25lIHN0YWdlJ3MgdGltaW5nLCBmb3IgdGhlIGRyaWxsLWRvd24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlUGVyZm9ybWFuY2VSb3cge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcnVuczogbnVtYmVyO1xuICBwNTBNczogbnVtYmVyIHwgbnVsbDtcbiAgcDk1TXM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBDaGFuZ2UgaW4gcDk1IHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGFzIGEgcGVyY2VudGFnZS4gKi9cbiAgcDk1Q2hhbmdlUGN0OiBudW1iZXIgfCBudWxsO1xuICBmYWlsZWQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItc3RhZ2UgdGltaW5ncyBmb3Igb25lIHBpcGVsaW5lLCBzbG93ZXN0IGZpcnN0LlxuICpcbiAqIFRoZSBzZWN0aW9uIGEgbGVhZCBvcGVucyBhZnRlciB0aGUgYnJlYWtkb3duIHNheXMgYSBwaXBlbGluZSBnb3Qgc2xvd2VyOiBcIndoaWNoXG4gKiBzdGFnZVwiIGlzIHRoZSBuZXh0IHF1ZXN0aW9uLCBhbmQgYW5zd2VyaW5nIGl0IGZyb20gcmF3IGV2ZW50cyB3b3VsZCBtZWFuIGFcbiAqIHNlY29uZCBzY2FuIG9mIHRoZSBzYW1lIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YWdlUGVyZm9ybWFuY2UoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPFN0YWdlUGVyZm9ybWFuY2VSb3dbXT4ge1xuICBjb25zdCBjdXJyZW50ID0gYXdhaXQgc3RhZ2VSb3dzKHNjb3BlLCBwaXBlbGluZUlkKTtcbiAgY29uc3QgcHJpb3I6IE1hcDxzdHJpbmcsIHsgcDk1TXM6IG51bWJlciB8IG51bGwgfT4gPSBwcmV2aW91c1xuICAgID8gbmV3IE1hcCgoYXdhaXQgc3RhZ2VSb3dzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0sIHBpcGVsaW5lSWQpKS5tYXAoKHMpID0+IFtzLnN0YWdlTmFtZSwgc10pKVxuICAgIDogbmV3IE1hcCgpO1xuICByZXR1cm4gY3VycmVudC5tYXAoKHMpID0+IHtcbiAgICBjb25zdCBiZWZvcmUgPSBwcmlvci5nZXQocy5zdGFnZU5hbWUpPy5wOTVNcyA/PyBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcDk1Q2hhbmdlUGN0OiBiZWZvcmUgJiYgYmVmb3JlID4gMCAmJiBzLnA5NU1zICE9PSBudWxsXG4gICAgICAgID8gTnVtYmVyKCgoKHMucDk1TXMgLSBiZWZvcmUpIC8gYmVmb3JlKSAqIDEwMCkudG9GaXhlZCgxKSlcbiAgICAgICAgOiBudWxsLFxuICAgIH07XG4gIH0pLnNvcnQoKGEsIGIpID0+IChiLnA5NU1zID8/IDApIC0gKGEucDk1TXMgPz8gMCkpO1xufVxuXG5pbnRlcmZhY2UgU3RhZ2VSb3cgeyBzdGFnZU5hbWU6IHN0cmluZzsgcnVuczogbnVtYmVyOyBwNTBNczogbnVtYmVyIHwgbnVsbDsgcDk1TXM6IG51bWJlciB8IG51bGw7IGZhaWxlZDogbnVtYmVyIH1cblxuYXN5bmMgZnVuY3Rpb24gc3RhZ2VSb3dzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgcGlwZWxpbmVJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFnZVJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBzdGFnZU5hbWU6IHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5zdGFnZU5hbWUsXG4gICAgcnVuczogc3FsPG51bWJlcj5gU1VNKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnJ1bnN9KTo6aW50YCxcbiAgICBmYWlsZWQ6IHNxbDxudW1iZXI+YFNVTSgke3NjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5mYWlsZWR9KTo6aW50YCxcbiAgICAvLyBNQVggb2YgdGhlIGRhaWx5IHA5NXMsIG5vdCBhbiBhdmVyYWdlIG9mIHBlcmNlbnRpbGVzOiBhdmVyYWdpbmdcbiAgICAvLyBwZXJjZW50aWxlcyBpcyBub3QgYSBwZXJjZW50aWxlIG9mIGFueXRoaW5nLCBhbmQgdGhlIHdvcnN0IGRheSBpcyB0aGVcbiAgICAvLyBudW1iZXIgc29tZWJvZHkgd291bGQgYWN0IG9uLlxuICAgIHA1ME1zOiBzcWw8bnVtYmVyIHwgbnVsbD5gTUFYKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnA1ME1zfSk6OmludGAsXG4gICAgcDk1TXM6IHNxbDxudW1iZXIgfCBudWxsPmBNQVgoJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucDk1TXN9KTo6aW50YCxcbiAgfSkuZnJvbShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXApXG4gICAgLndoZXJlKGFuZChcbiAgICAgIG9yZ1ByZWRpY2F0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAub3JnSWQsIHNjb3BlKSxcbiAgICAgIGVxKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIGd0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS5mcm9tKSksXG4gICAgICBsdChzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS50bykpLFxuICAgICAgc3FsYCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZX0gPD4gJydgLFxuICAgICkpXG4gICAgLmdyb3VwQnkoc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZSkpO1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgU3RhZ2VSb3c+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pikge1xuICAgIG1hcC5zZXQoU3RyaW5nKHIuc3RhZ2VOYW1lKSwge1xuICAgICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZU5hbWUpLFxuICAgICAgcnVuczogbnVtKHIucnVucyksXG4gICAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgICBwNTBNczogci5wNTBNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wNTBNcyksXG4gICAgICBwOTVNczogci5wOTVNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wOTVNcyksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5tYXAudmFsdWVzKCldO1xufVxuXG4vKiogQnVpbGQgdGltZSBieSBwcm9qZWN0IGFuZCBwaXBlbGluZS4gTm8gbW9uZXkgYW55d2hlcmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUm93IHtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWxkU2Vjb25kczogbnVtYmVyO1xuICBydW5zOiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hlcmUgdGhlIGJ1aWxkIHRpbWUgd2VudC5cbiAqXG4gKiBTRUNPTkRTLCBOT1QgRE9MTEFSUy4gQSBjb3N0IGZpZ3VyZSBuZWVkcyB0aGUgaW5zdGFuY2UgdHlwZXMsIHRoZSBzcG90L29uLWRlbWFuZFxuICogbWl4IGFuZCB0aGUgYWNjb3VudCdzIG93biBkaXNjb3VudHMsIG5vbmUgb2Ygd2hpY2ggdGhpcyBwbGF0Zm9ybSBrbm93cyDigJQgc28gYVxuICogZG9sbGFyIG51bWJlciBoZXJlIHdvdWxkIGJlIGEgZ3Vlc3MgcHJlc2VudGVkIGFzIGFuIGludm9pY2UuIEJ1aWxkIHRpbWUgaXMgdGhlXG4gKiB0aGluZyBhY3R1YWxseSBtZWFzdXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlc291cmNlQ29uc3VtcHRpb24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDIwKTogUHJvbWlzZTx7XG4gIHBpcGVsaW5lczogUmVzb3VyY2VSb3dbXTtcbiAgdG90YWxCdWlsZFNlY29uZHM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHAucHJvamVjdCxcbiAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICBTVU0oci5idWlsZF9zZWNvbmRzKTo6aW50IEFTIGJ1aWxkX3NlY29uZHMsXG4gICAgICBTVU0oci5ydW5zKTo6aW50IEFTIHJ1bnNcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkgcC5wcm9qZWN0LCByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWVcbiAgICBPUkRFUiBCWSBidWlsZF9zZWNvbmRzIERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cyk7XG4gIGNvbnN0IHRvdGFsID0gbGlzdC5yZWR1Y2UoKHMsIHIpID0+IHMgKyBudW0oci5idWlsZF9zZWNvbmRzKSwgMCk7XG4gIHJldHVybiB7XG4gICAgdG90YWxCdWlsZFNlY29uZHM6IHRvdGFsLFxuICAgIHBpcGVsaW5lczogbGlzdC5tYXAoKHIpID0+ICh7XG4gICAgICBwcm9qZWN0OiAoci5wcm9qZWN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIGJ1aWxkU2Vjb25kczogbnVtKHIuYnVpbGRfc2Vjb25kcyksXG4gICAgICBydW5zOiBudW0oci5ydW5zKSxcbiAgICAgIHNoYXJlUGN0OiB0b3RhbCA+IDAgPyBOdW1iZXIoKChudW0oci5idWlsZF9zZWNvbmRzKSAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLyoqIE9uZSBjb21taXQncyBqb3VybmV5IGFjcm9zcyBlbnZpcm9ubWVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21vdGlvblJvdyB7XG4gIGNvbW1pdFNoYTogc3RyaW5nO1xuICAvKiogRW52aXJvbm1lbnQg4oaSIHdoZW4gaXQgbGFuZGVkIHRoZXJlLCBpbiB0aGUgb3JkZXIgaXQgcmVhY2hlZCB0aGVtLiAqL1xuICBzdG9wczogQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBzdHJpbmc7IGhvdXJzRnJvbVByZXZpb3VzOiBudW1iZXIgfCBudWxsIH0+O1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBjb21taXQgcmVhY2hlZCBhIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50IGFuZCBzdG9wcGVkLiAqL1xuICBzdHVjazogYm9vbGVhbjtcbiAgZnVydGhlc3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGVyZSBjb21taXRzIGdvdCB0bywgYW5kIHdoZXJlIHRoZXkgc3RvcHBlZC5cbiAqXG4gKiBcIlN0dWNrXCIgaXMgdGhlIG51bWJlciB3b3J0aCByZWFkaW5nLiBBIGNvbW1pdCB0aGF0IHJlYWNoZWQgc3RhZ2luZyBmb3VyIGRheXMgYWdvXG4gKiBhbmQgbmV2ZXIgd2VudCBmdXJ0aGVyIGlzIHdvcmsgdGhhdCBpcyBmaW5pc2hlZCBhbmQgbm90IGRlbGl2ZXJlZCDigJQgd2hpY2ggZG9lc1xuICogbm90IGFwcGVhciBpbiBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgc3VjY2VzcyByYXRlIG9yIGxlYWQgdGltZSwgYmVjYXVzZSBieSBldmVyeVxuICogb25lIG9mIHRob3NlIG1lYXN1cmVzIG5vdGhpbmcgaGFwcGVuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9tb3Rpb25WaWV3KFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIHByb2R1Y3Rpb25FbnYgPSAncHJvZHVjdGlvbicsXG4gIGxpbWl0ID0gMjUsXG4pOiBQcm9taXNlPHsgY29tbWl0czogUHJvbW90aW9uUm93W107IHN0dWNrQ291bnQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGNvbW1pdF9zaGEsIGVudmlyb25tZW50LCBNSU4oZGVwbG95ZWRfYXQpIEFTIGRlcGxveWVkX2F0XG4gICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgc3VjY2VlZGVkID0gdHJ1ZVxuICAgICAgQU5EIGNvbW1pdF9zaGEgSVMgTk9UIE5VTExcbiAgICBHUk9VUCBCWSBjb21taXRfc2hhLCBlbnZpcm9ubWVudFxuICAgIE9SREVSIEJZIE1JTihkZXBsb3llZF9hdCkgREVTQ1xuICBgKSk7XG5cbiAgY29uc3QgYnlDb21taXQgPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBEYXRlIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qgc2hhID0gU3RyaW5nKHIuY29tbWl0X3NoYSk7XG4gICAgY29uc3QgbGlzdCA9IGJ5Q29tbWl0LmdldChzaGEpID8/IFtdO1xuICAgIGxpc3QucHVzaCh7IGVudmlyb25tZW50OiBTdHJpbmcoci5lbnZpcm9ubWVudCksIGRlcGxveWVkQXQ6IG5ldyBEYXRlKFN0cmluZyhyLmRlcGxveWVkX2F0KSkgfSk7XG4gICAgYnlDb21taXQuc2V0KHNoYSwgbGlzdCk7XG4gIH1cblxuICBjb25zdCBjb21taXRzOiBQcm9tb3Rpb25Sb3dbXSA9IFsuLi5ieUNvbW1pdC5lbnRyaWVzKCldLm1hcCgoW2NvbW1pdFNoYSwgcmF3XSkgPT4ge1xuICAgIGNvbnN0IG9yZGVyZWQgPSBbLi4ucmF3XS5zb3J0KChhLCBiKSA9PiBhLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gYi5kZXBsb3llZEF0LmdldFRpbWUoKSk7XG4gICAgY29uc3Qgc3RvcHMgPSBvcmRlcmVkLm1hcCgoc3RvcCwgaSkgPT4gKHtcbiAgICAgIGVudmlyb25tZW50OiBzdG9wLmVudmlyb25tZW50LFxuICAgICAgZGVwbG95ZWRBdDogc3RvcC5kZXBsb3llZEF0LnRvSVNPU3RyaW5nKCksXG4gICAgICBob3Vyc0Zyb21QcmV2aW91czogaSA9PT0gMFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBOdW1iZXIoKChzdG9wLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gKG9yZGVyZWRbaSAtIDFdIGFzIHsgZGVwbG95ZWRBdDogRGF0ZSB9KS5kZXBsb3llZEF0LmdldFRpbWUoKSkgLyAzNjAwXzAwMCkudG9GaXhlZCgxKSksXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1cnRoZXN0ID0gb3JkZXJlZFtvcmRlcmVkLmxlbmd0aCAtIDFdPy5lbnZpcm9ubWVudCA/PyAnJztcbiAgICByZXR1cm4geyBjb21taXRTaGEsIHN0b3BzLCBmdXJ0aGVzdCwgc3R1Y2s6IGZ1cnRoZXN0ICE9PSBwcm9kdWN0aW9uRW52IH07XG4gIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFMYXN0ID0gYS5zdG9wc1thLnN0b3BzLmxlbmd0aCAtIDFdPy5kZXBsb3llZEF0ID8/ICcnO1xuICAgICAgY29uc3QgYkxhc3QgPSBiLnN0b3BzW2Iuc3RvcHMubGVuZ3RoIC0gMV0/LmRlcGxveWVkQXQgPz8gJyc7XG4gICAgICByZXR1cm4gYkxhc3QubG9jYWxlQ29tcGFyZShhTGFzdCk7XG4gICAgfSlcbiAgICAuc2xpY2UoMCwgbGltaXQpO1xuXG4gIHJldHVybiB7IGNvbW1pdHMsIHN0dWNrQ291bnQ6IGNvbW1pdHMuZmlsdGVyKChjKSA9PiBjLnN0dWNrKS5sZW5ndGggfTtcbn1cblxuLyoqIE91dGRhdGVkIHBsdWdpbiB1c2FnZSwgcGVyIHBpcGVsaW5lIGFuZCBzdGVwLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRkYXRlZFBsdWdpblJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIGluVXNlOiBzdHJpbmcgfCBudWxsO1xuICBsYXRlc3Q6IHN0cmluZyB8IG51bGw7XG4gIGdhcDogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aGluUG9saWN5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdoaWNoIHBpcGVsaW5lcyBhcmUgYmVoaW5kIG9uIGEgcGx1Z2luLCB3b3JzdCBnYXAgZmlyc3QuXG4gKlxuICogUmVhZHMgdGhlIERFQ0xBUkVEIHNpZGUgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApLiBBIHBpcGVsaW5lJ3MgZGVjbGFyZWRcbiAqIHJhbmdlIGFuZCB3aGF0IGl0IGxhc3QgYWN0dWFsbHkgcmFuIGNhbiBkaXNhZ3JlZSDigJQgd2hpY2ggaXMgd2h5IHRoZSB2dWxuZXJhYmlsaXR5XG4gKiBzZWN0aW9uIGJlbG93IHJlYWRzIHRoZSBkZXBsb3llZCBzaWRlIGFuZCBzYXlzIHdoaWNoIGl0IGlzIHNob3dpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPdXRkYXRlZFBsdWdpbnMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDUwKTogUHJvbWlzZTx7XG4gIHJvd3M6IE91dGRhdGVkUGx1Z2luUm93W107XG4gIGJlaGluZFBpcGVsaW5lczogbnVtYmVyO1xuICBtYWpvckJlaGluZDogbnVtYmVyO1xufT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lLCByLnN0YWdlX25hbWUsIHIuc3RlcF9uYW1lLFxuICAgICAgQ09BTEVTQ0Uoci5wbHVnaW5fcHVibGlzaGVyIHx8ICcvJywgJycpIHx8IHIucGx1Z2luX25hbWUgQVMgcGx1Z2luLFxuICAgICAgci5yZXNvbHZlZF92ZXJzaW9uLCByLmxhdGVzdF92ZXJzaW9uLCByLnZlcnNpb25fZ2FwLCByLndpdGhpbl9wb2xpY3lcbiAgICBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIChyLnZlcnNpb25fZ2FwIElOICgnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnKSBPUiByLndpdGhpbl9wb2xpY3kgPSBmYWxzZSlcbiAgICBPUkRFUiBCWSBDQVNFIHIudmVyc2lvbl9nYXAgV0hFTiAnbWFqb3InIFRIRU4gMCBXSEVOICdtaW5vcicgVEhFTiAxIFdIRU4gJ3BhdGNoJyBUSEVOIDIgRUxTRSAzIEVORCxcbiAgICAgICAgICAgICByLnBpcGVsaW5lX2lkXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZV9uYW1lKSxcbiAgICBzdGVwTmFtZTogU3RyaW5nKHIuc3RlcF9uYW1lKSxcbiAgICBwbHVnaW46IFN0cmluZyhyLnBsdWdpbiksXG4gICAgaW5Vc2U6IChyLnJlc29sdmVkX3ZlcnNpb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBsYXRlc3Q6IChyLmxhdGVzdF92ZXJzaW9uIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgZ2FwOiAoci52ZXJzaW9uX2dhcCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHdpdGhpblBvbGljeTogci53aXRoaW5fcG9saWN5ICE9PSBmYWxzZSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3M6IGxpc3QsXG4gICAgYmVoaW5kUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIG1ham9yQmVoaW5kOiBsaXN0LmZpbHRlcigocikgPT4gci5nYXAgPT09ICdtYWpvcicpLmxlbmd0aCxcbiAgfTtcbn1cblxuLyoqIEEgcGlwZWxpbmUncyBleHBvc3VyZSB0byBhIHZ1bG5lcmFibGUgcGx1Z2luIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5lcmFiaWxpdHlSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgLyoqIGBkZXBsb3llZGAgPSB3aGF0IGFjdHVhbGx5IHJhbjsgYGRlY2xhcmVkYCA9IHdoYXQgdGhlIGNvbmZpZyBhc2tzIGZvci4gKi9cbiAgc291cmNlOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgZmluZGluZ3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgZmxhZ2dlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGx1Z2luIHZ1bG5lcmFiaWxpdGllcywgcGVyIHBpcGVsaW5lLCBDcml0aWNhbHMgZmlyc3QuXG4gKlxuICogU0FZUyBXSEVUSEVSIElUIElTIERFQ0xBUkVEIE9SIERFUExPWUVELiBBIHBpcGVsaW5lIHdob3NlIGNvbmZpZyB3YXMgdXBkYXRlZCB0byBhXG4gKiBmaXhlZCB2ZXJzaW9uIGJ1dCB3aGljaCBoYXMgbm90IHJlLXN5bnRoZWQgaXMgc3RpbGwgcnVubmluZyB0aGUgdnVsbmVyYWJsZSBpbWFnZSxcbiAqIGFuZCBhIHJlcG9ydCB0aGF0IGNvbGxhcHNlZCB0aGUgdHdvIHdvdWxkIHRlbGwgYSBtYW5hZ2VyIHRoZSBwcm9ibGVtIGlzIHNvbHZlZFxuICogd2hpbGUgdGhlIG9sZCBpbWFnZSBrZWVwcyBydW5uaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luVnVsbmVyYWJpbGl0aWVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgbGltaXQgPSA1MCk6IFByb21pc2U8e1xuICByb3dzOiBWdWxuZXJhYmlsaXR5Um93W107XG4gIGV4cG9zZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgY3JpdGljYWxQaXBlbGluZXM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHYucGlwZWxpbmVfaWQsIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgIENPQUxFU0NFKHYucGx1Z2luX3B1Ymxpc2hlciB8fCAnLycsICcnKSB8fCB2LnBsdWdpbl9uYW1lIEFTIHBsdWdpbixcbiAgICAgIHYucGx1Z2luX3ZlcnNpb24sIHYuc291cmNlLCB2LmNyaXRpY2FsX2NvdW50LCB2LmhpZ2hfY291bnQsIHYudG9wX2ZpbmRpbmdzLCB2LmZsYWdnZWRfYXRcbiAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIHZcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHYucGlwZWxpbmVfaWRcbiAgICBXSEVSRSB2Lm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EICR7bGl2ZUV4cG9zdXJlUHJlZGljYXRlKG5vdywgJ3YnKX1cbiAgICBPUkRFUiBCWSB2LmNyaXRpY2FsX2NvdW50IERFU0MsIHYuaGlnaF9jb3VudCBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcGx1Z2luOiBTdHJpbmcoci5wbHVnaW4pLFxuICAgIHZlcnNpb246IFN0cmluZyhyLnBsdWdpbl92ZXJzaW9uKSxcbiAgICBzb3VyY2U6IFN0cmluZyhyLnNvdXJjZSksXG4gICAgY3JpdGljYWw6IG51bShyLmNyaXRpY2FsX2NvdW50KSxcbiAgICBoaWdoOiBudW0oci5oaWdoX2NvdW50KSxcbiAgICBmaW5kaW5nczogKHIudG9wX2ZpbmRpbmdzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPz8gW10sXG4gICAgZmxhZ2dlZEF0OiBpc29Pck51bGwoci5mbGFnZ2VkX2F0KSA/PyBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICB9KSk7XG4gIHJldHVybiB7XG4gICAgcm93czogbGlzdCxcbiAgICBleHBvc2VkUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIGNyaXRpY2FsUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QuZmlsdGVyKChyKSA9PiByLmNyaXRpY2FsID4gMCkubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICB9O1xufVxuXG4vKiogQWRvcHRpb24gYW5kIGRlcGxveS10cmFja2luZyBjb3ZlcmFnZSB3aXRoaW4gdGhlIHJlcG9ydGVkIHNjb3BlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZG9wdGlvblN1bW1hcnkge1xuICBhY3RpdmVQaXBlbGluZXM6IG51bWJlcjtcbiAgdG90YWxQaXBlbGluZXM6IG51bWJlcjtcbiAgLyoqIFBpcGVsaW5lcyB0aGF0IHByb2R1Y2VkIGEgZGVwbG95IHJvdyDigJQgaS5lLiBvbmVzIERPUkEgY2FuIHNlZS4gKi9cbiAgZGVwbG95VHJhY2tlZFBpcGVsaW5lczogbnVtYmVyO1xuICAvKiogQnkgYGNyZWF0aW9uX3NvdXJjZWAsIGZvciBcImFyZSB0aGUgZ29sZGVuIHBhdGhzIGJlaW5nIHVzZWRcIi4gKi9cbiAgYnlTb3VyY2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIC8qKiBUZWFtcyBpbiB0aGUgcm9sbHVwIHRoYXQgaGFkIGFjdGl2aXR5LiAxIGZvciBhIHNpbmdsZS1vcmcgcmVwb3J0LiAqL1xuICBhY3RpdmVUZWFtczogbnVtYmVyO1xuICAvKiogT25seSB3aGVuIHRoZSBvcmcgY29uZmlndXJlZCB0aGUgYXNzdW1wdGlvbi4gTmV2ZXIgcGxhdGZvcm0tc3VwcGxpZWQuICovXG4gIGVzdGltYXRlZE1pbnV0ZXNTYXZlZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBZG9wdGlvbiwgY292ZXJhZ2UgYW5kIGNyZWF0aW9uIHNvdXJjZS5cbiAqXG4gKiBgZGVwbG95VHJhY2tlZFBpcGVsaW5lc2AgaXMgdGhlIGhvbmVzdCBkZW5vbWluYXRvciBmb3IgZXZlcnl0aGluZyBET1JBIHNheXM6IGFcbiAqIHBpcGVsaW5lIHRoYXQgaGFzIG5vdCByZS1zeW50aGVkIHdpdGggZGVwbG95IHRhZ3MgcHJvZHVjZXMgbm8gZGVwbG95IHJvd3MsIHNvIGl0XG4gKiBpcyBpbnZpc2libGUgdG8gZGVwbG95bWVudCBmcmVxdWVuY3kg4oCUIGFuZCByZXBvcnRpbmcgXCI0IGRlcGxveXNcIiB3aXRob3V0IHNheWluZ1xuICogdGhhdCAyMCBvZiAzMCBwaXBlbGluZXMgY2Fubm90IGJlIHNlZW4gaXMgdGhlIHNpbmdsZSBtb3N0IG1pc2xlYWRpbmcgdGhpbmcgdGhpc1xuICogZmVhdHVyZSBjb3VsZCBkby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFkb3B0aW9uKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgdGltZVNhdmVkTWludXRlcz86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPEFkb3B0aW9uU3VtbWFyeT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggc2NvcGVkIEFTIChcbiAgICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgb3JnX2lkLCBjcmVhdGlvbl9zb3VyY2VcbiAgICAgIEZST00gcGlwZWxpbmVzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICksXG4gICAgYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZCwgb3JnX2lkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdGFnZV9uYW1lID0gJycgQU5EIHJ1bnMgPiAwXG4gICAgKSxcbiAgICB0cmFja2VkIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlcGxveWVkX2F0ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkZXBsb3llZF9hdCA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgIClcbiAgICBTRUxFQ1RcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBzY29wZWQpOjppbnQgQVMgdG90YWxfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIGFjdGl2ZSk6OmludCBBUyBhY3RpdmVfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVChESVNUSU5DVCBvcmdfaWQpIEZST00gYWN0aXZlKTo6aW50IEFTIGFjdGl2ZV90ZWFtcyxcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSB0cmFja2VkKTo6aW50IEFTIGRlcGxveV90cmFja2VkLFxuICAgICAgKFNFTEVDVCBDT0FMRVNDRShqc29uYl9vYmplY3RfYWdnKENPQUxFU0NFKGNyZWF0aW9uX3NvdXJjZSwgJ3Vua25vd24nKSwgbiksICd7fSc6Ompzb25iKVxuICAgICAgICAgRlJPTSAoU0VMRUNUIGNyZWF0aW9uX3NvdXJjZSwgQ09VTlQoKik6OmludCBBUyBuIEZST00gc2NvcGVkIEdST1VQIEJZIGNyZWF0aW9uX3NvdXJjZSkgc1xuICAgICAgKSBBUyBieV9zb3VyY2VcbiAgYCkpO1xuICBjb25zdCByID0gcm93c09mKHJvd3MpWzBdID8/IHt9O1xuICBjb25zdCBjcmVhdGVkID0gbnVtKHIudG90YWxfcGlwZWxpbmVzKTtcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFBpcGVsaW5lczogY3JlYXRlZCxcbiAgICBhY3RpdmVQaXBlbGluZXM6IG51bShyLmFjdGl2ZV9waXBlbGluZXMpLFxuICAgIGFjdGl2ZVRlYW1zOiBNYXRoLm1heCgxLCBudW0oci5hY3RpdmVfdGVhbXMpKSxcbiAgICBkZXBsb3lUcmFja2VkUGlwZWxpbmVzOiBudW0oci5kZXBsb3lfdHJhY2tlZCksXG4gICAgYnlTb3VyY2U6IChyLmJ5X3NvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA/PyB7fSxcbiAgICAvLyBPbmx5IHdoZW4gdGhlIE9SRyBjb25maWd1cmVkIHRoZSBhc3N1bXB0aW9uIOKAlCBhIHBsYXRmb3JtLXN1cHBsaWVkIG51bWJlclxuICAgIC8vIGhlcmUgd291bGQgYmUgdGhlIHBsYXRmb3JtIG1hcmtpbmcgaXRzIG93biBob21ld29yay5cbiAgICBlc3RpbWF0ZWRNaW51dGVzU2F2ZWQ6IHRpbWVTYXZlZE1pbnV0ZXMgJiYgdGltZVNhdmVkTWludXRlcyA+IDAgPyBjcmVhdGVkICogdGltZVNhdmVkTWludXRlcyA6IG51bGwsXG4gIH07XG59XG5cbi8qKiBPbmUgcGlwZWxpbmUncyBmYWlsdXJlIHN0cmVhayBhbmQgbGFzdCBzdWNjZXNzZnVsIGRheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdHJlYWtSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYWlsdXJlcyBpbiB0aGUgdHJhaWxpbmcgcnVuIG9mIGRheXMgb24gd2hpY2ggTk9USElORyBzdWNjZWVkZWQuXG4gICAqXG4gICAqIEEgTE9XRVIgQk9VTkQsIGFuZCBkZWxpYmVyYXRlbHkgc28uIFRoZSByb2xsdXAgaXMgcGVyIGRheSwgc28gd2l0aGluIHRoZSBtb3N0XG4gICAqIHJlY2VudCBkYXkgdGhhdCBkaWQgaGF2ZSBhIHN1Y2Nlc3MgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgZmFpbHVyZXNcbiAgICogY2FtZSBiZWZvcmUgb3IgYWZ0ZXIgaXQg4oCUIHRoYXQgZGF5IGlzIGV4Y2x1ZGVkIHJhdGhlciB0aGFuIGd1ZXNzZWQgYXQuIFdoYXRcbiAgICogc3Vydml2ZXMgaXMgYSBydW4gb2YgZmFpbHVyZXMgd2l0aCBubyBzdWNjZXNzIGFueXdoZXJlIGJldHdlZW4gdGhlbSwgd2hpY2ggaXNcbiAgICogZXhhY3RseSB0aGUgY2xhaW0gdGhlIGZpbmRpbmcgbWFrZXMuXG4gICAqL1xuICBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW1iZXI7XG4gIC8qKiBUaGUgbGFzdCBkYXkgd2l0aCBhdCBsZWFzdCBvbmUgc3VjY2Vzcywgb3IgbnVsbCB3aXRoaW4gdGhlIGxvb2tiYWNrLiAqL1xuICBsYXN0U3VjY2Vzc0F0OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBGYWlsdXJlIHN0cmVha3MgYW5kIGxhc3Qtc3VjY2VzcyBkYXRlcywgZm9yIHRoZSBuZWVkcy1hdHRlbnRpb24gcnVsZXMuXG4gKlxuICogUmVhZHMgdGhlIGRhaWx5IHJvbGx1cCwgbm90IGBwaXBlbGluZV9ldmVudHNgIOKAlCB0aGUgc2FtZSByZWFzb24gYXMgZXZlcnl0aGluZ1xuICogZWxzZSBoZXJlOiBhIHN0cmVhayB0aGF0IGVuZGVkIHRocmVlIHdlZWtzIGFnbyBtdXN0IHN0aWxsIGJlIHJlYWRhYmxlIGFmdGVyXG4gKiByZXRlbnRpb24gaGFzIHN3ZXB0IHRoZSBldmVudHMgdGhhdCBwcm9kdWNlZCBpdC5cbiAqXG4gKiBgbG9va2JhY2tEYXlzYCBleHRlbmRzIFBBU1QgdGhlIHdpbmRvdyBvbiBwdXJwb3NlLiBcIkxhc3Qgc3VjY2VlZGVkIDEyIGRheXMgYWdvXCJcbiAqIGlzIHRoZSBmaW5kaW5nIGEgd2Vla2x5IHJlcG9ydCBtb3N0IG5lZWRzLCBhbmQgYSBxdWVyeSBib3VuZGVkIGJ5IGEgNy1kYXkgd2luZG93XG4gKiBjb3VsZCBuZXZlciBwcm9kdWNlIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVTdHJlYWtzKFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIGxvb2tiYWNrRGF5cyA9IDkwLFxuKTogUHJvbWlzZTxQaXBlbGluZVN0cmVha1Jvd1tdPiB7XG4gIGNvbnN0IHNpbmNlID0gbmV3IERhdGUobmV3IERhdGUoc2NvcGUudG8pLmdldFRpbWUoKSAtIGxvb2tiYWNrRGF5cyAqIDg2XzQwMF8wMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBkYXlzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgZGF5LFxuICAgICAgICAgICAgIFNVTShzdWNjZWVkZWQpOjppbnQgQVMgc3VjY2VlZGVkLFxuICAgICAgICAgICAgIFNVTShmYWlsZWQpOjppbnQgICAgQVMgZmFpbGVkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3NpbmNlfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgR1JPVVAgQlkgcGlwZWxpbmVfaWQsIGRheVxuICAgICksXG4gICAgbGFzdF9vayBBUyAoXG4gICAgICBTRUxFQ1QgcGlwZWxpbmVfaWQsIE1BWChkYXkpIEFTIGxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgIEZST00gZGF5cyBXSEVSRSBzdWNjZWVkZWQgPiAwXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgIClcbiAgICBTRUxFQ1QgZC5waXBlbGluZV9pZCxcbiAgICAgICAgICAgbC5sYXN0X3N1Y2Nlc3NfZGF5LFxuICAgICAgICAgICBDT0FMRVNDRShTVU0oZC5mYWlsZWQpIEZJTFRFUiAoXG4gICAgICAgICAgICAgV0hFUkUgbC5sYXN0X3N1Y2Nlc3NfZGF5IElTIE5VTEwgT1IgZC5kYXkgPiBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgICAgICAgKSwgMCk6OmludCBBUyBzdHJlYWtcbiAgICBGUk9NIGRheXMgZFxuICAgIExFRlQgSk9JTiBsYXN0X29rIGwgT04gbC5waXBlbGluZV9pZCA9IGQucGlwZWxpbmVfaWRcbiAgICBHUk9VUCBCWSBkLnBpcGVsaW5lX2lkLCBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgY29uc2VjdXRpdmVGYWlsdXJlczogbnVtKHIuc3RyZWFrKSxcbiAgICBsYXN0U3VjY2Vzc0F0OiByLmxhc3Rfc3VjY2Vzc19kYXkgPyBuZXcgRGF0ZShTdHJpbmcoci5sYXN0X3N1Y2Nlc3NfZGF5KSkgOiBudWxsLFxuICB9KSk7XG59XG5cbi8qKlxuICogUGlwZWxpbmVzIHRoYXQgUkFOIGluIHRoZSB3aW5kb3cgYnV0IHByb2R1Y2VkIG5vIGRlcGxveSByb3dzLlxuICpcbiAqIEEgbWVhc3VyZW1lbnQgZ2FwLCBub3QgYSBmYWlsdXJlLCBhbmQgdGhlIHJlYXNvbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IG51bWJlciBjYW5cbiAqIGJlIHF1aWV0bHkgd3Jvbmc6IGEgcGlwZWxpbmUgd2hvc2Ugc3ludGggcHJlZGF0ZXMgdGhlIGBwYi5kZXBsb3lzYCB0YWdzIGRlcGxveXNcbiAqIHBlcmZlY3RseSB3ZWxsIGFuZCBpcyBpbnZpc2libGUgdG8gZXZlcnkgRE9SQSBhZ2dyZWdhdGUuIE5vdGhpbmcgZWxzZSBpbiB0aGVcbiAqIHJlcG9ydCB3b3VsZCBzYXkgc28uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVbnRyYWNrZWRQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICAgSEFWSU5HIFNVTShydW5zKSA+IDBcbiAgICApLFxuICAgIHRyYWNrZWQgQVMgKFxuICAgICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgKVxuICAgIFNFTEVDVCBhLnBpcGVsaW5lX2lkIEZST00gYWN0aXZlIGFcbiAgICBXSEVSRSBOT1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHRyYWNrZWQgdCBXSEVSRSB0LnBpcGVsaW5lX2lkID0gYS5waXBlbGluZV9pZClcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gU3RyaW5nKHIucGlwZWxpbmVfaWQpKTtcbn1cblxuLyoqXG4gKiBQaXBlbGluZXMgcnVubmluZyBhIHBsdWdpbiB2ZXJzaW9uIHdpdGggYW4gT1BFTiBDcml0aWNhbCBleHBvc3VyZS5cbiAqXG4gKiBQb2ludC1pbi10aW1lLCBub3Qgd2luZG93ZWQ6IHdoYXQgbWF0dGVycyBpcyB3aGV0aGVyIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nIG9uZVxuICogTk9XLiBBIENyaXRpY2FsIHRoYXQgd2FzIG9wZW4gbGFzdCBUdWVzZGF5IGFuZCBpcyBmaXhlZCB0b2RheSBpcyBub3Qgc29tZXRoaW5nIHRvXG4gKiBwdXQgaW4gZnJvbnQgb2YgYSBtYW5hZ2VyLCBhbmQgYGZpeGVkX2F0YCBpcyB3aGF0IHNheXMgc28uXG4gKlxuICogVGhlIFNBTUUgbGl2ZSBwcmVkaWNhdGUgYXMgdGhlIHZ1bG5lcmFiaWxpdHkgc2VjdGlvbiAoYGxpdmVFeHBvc3VyZVByZWRpY2F0ZWApOlxuICogYW4gYWNjZXB0YW5jZSBzdGlsbCBpbiBmb3JjZSBhbmQgYSBmYWxzZSBwb3NpdGl2ZSBhcmUgZXhjbHVkZWQg4oCUIHNvbWVvbmUgd2l0aFxuICogdGhlIGF1dGhvcml0eSB0byBkZWNpZGUgaGFzIGRvbmUgc28gaW4gd3JpdGluZyDigJQgd2hpbGUgYW4gYWNjZXB0YW5jZSBQQVNUIGl0c1xuICogZGVhZGxpbmUgY291bnRzIGFnYWluLCBiZWNhdXNlIHRoYXQgaXMgd2hhdCB0aGUgZGVhZGxpbmUgd2FzIGZvci4gVGhlIHR3b1xuICogcmVhZGVycyBvbmNlIGRpc2FncmVlZCAodGhpcyBvbmUga2VwdCBmYWxzZSBwb3NpdGl2ZXMgYW5kIGRyb3BwZWQgZXhwaXJlZFxuICogYWNjZXB0YW5jZXMpLCBzbyB0aGUgcGFuZWwgYW5kIHRoZSBuZWVkcy1hdHRlbnRpb24gbGlzdCBjb250cmFkaWN0ZWQgZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZ1bG5lcmFibGVQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmVcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBjcml0aWNhbF9jb3VudCA+IDBcbiAgICAgIEFORCAke2xpdmVFeHBvc3VyZVByZWRpY2F0ZShub3cpfVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiBTdHJpbmcoci5waXBlbGluZV9pZCkpO1xufVxuXG4vKipcbiAqIFdoZW4gZWFjaCBwaXBlbGluZSBpbiB0aGUgd2luZG93IHdhcyBsYXN0IGNoYW5nZWQuXG4gKlxuICogYHBpcGVsaW5lcy51cGRhdGVkX2F0YCwgbm90IGFuIGF1ZGl0IHF1ZXJ5OiB0aGUgYXVkaXQgdHJhaWwgbGl2ZXMgaW4gYW5vdGhlciBzdG9yZVxuICogd2l0aCBpdHMgb3duIHJldGVudGlvbiwgYW5kIHRoZSBvbmUgZmFjdCB0aGlzIG5lZWRzIOKAlCBcIndhcyB0aGlzIHRvdWNoZWQgc2hvcnRseVxuICogYmVmb3JlIGl0IGJyb2tlXCIg4oCUIGlzIGFscmVhZHkgb24gdGhlIHJvdywgZHVyYWJseSwgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhlXG4gKiBjaGFuZ2Ugd2FzIG1hZGUgaW4uXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHN0YXRlZCByYXRoZXIgdGhhbiBoaWRkZW46IGB1cGRhdGVkX2F0YCBtb3ZlcyBmb3IgQU5ZIHdyaXRlLFxuICogaW5jbHVkaW5nIGEgcmVuYW1lLiBTbyB0aGUgZmluZGluZyBzYXlzIFwiYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZVwiLCB3aGljaCBpc1xuICogdHJ1ZSBvZiBhIHJlbmFtZSB0b28sIGFuZCBkb2VzIG5vdCBjbGFpbSB0byBuYW1lIHRoZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZUNvbmZpZ0NoYW5nZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBEYXRlPj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgdXBkYXRlZF9hdFxuICAgIEZST00gcGlwZWxpbmVzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICBBTkQgdXBkYXRlZF9hdCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8c3RyaW5nLCBEYXRlPigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3QgYXQgPSByLnVwZGF0ZWRfYXQgPyBuZXcgRGF0ZShTdHJpbmcoci51cGRhdGVkX2F0KSkgOiBudWxsO1xuICAgIGlmIChhdCAmJiAhTnVtYmVyLmlzTmFOKGF0LmdldFRpbWUoKSkpIG91dC5zZXQoU3RyaW5nKHIuaWQpLCBhdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSb3dzIGZyb20gYSByYXcgYGV4ZWN1dGVgLCB3aGljaGV2ZXIgc2hhcGUgdGhlIGRyaXZlciByZXR1cm5lZC4gKi9cbmZ1bmN0aW9uIHJvd3NPZihyZXN1bHQ6IHVua25vd24pOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0IGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgY29uc3Qgcm93cyA9IChyZXN1bHQgYXMgeyByb3dzPzogdW5rbm93biB9KT8ucm93cztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cykgPyByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA6IFtdO1xufVxuXG4vKiogQSBjb3VudCBmcm9tIGEgZHJpdmVyIHRoYXQgbWF5IGhhbmQgYmFjayBhIHN0cmluZyBmb3IgYSBiaWdpbnQuICovXG5mdW5jdGlvbiBudW0odjogdW5rbm93bik6IG51bWJlciB7XG4gIGNvbnN0IG4gPSB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogTnVtYmVyKHYgPz8gMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogMDtcbn1cblxuZnVuY3Rpb24gaXNvT3JOdWxsKHY6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCF2KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZCA9IHYgaW5zdGFuY2VvZiBEYXRlID8gdiA6IG5ldyBEYXRlKFN0cmluZyh2KSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZC5nZXRUaW1lKCkpID8gbnVsbCA6IGQudG9JU09TdHJpbmcoKTtcbn1cbiJdfQ==
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXF1ZXJpZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2FuYWx5dGljcy1xdWVyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVzdELG1EQUFtRDtBQUNuRCxTQUFTLFlBQVksQ0FBQyxHQUFrQyxFQUFFLEtBQXFCO0lBQzdFLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFZLEVBQUUsS0FBSyxDQUFDLEtBQWMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFtQkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEtBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQUU7SUFDMUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FB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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHF1ZXJpZXMgdGhlIGJlc3Bva2UgcmVwb3J0IHNlY3Rpb25zIHJlYWQuXG4gKlxuICogQWxsIG9mIHRoZW0gZ28gdGhyb3VnaCBgZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNgLCBgZG9yYV9kZXBsb3ltZW50c2AsXG4gKiBgcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb25gIG9yIGBwbHVnaW5fdnVsbl9leHBvc3VyZWAg4oCUIG5ldmVyIHJhd1xuICogYHBpcGVsaW5lX2V2ZW50c2AuIFRoYXQgaXMgdGhlIHdob2xlIHBvaW50IG9mIHRob3NlIHRhYmxlczogYSBxdWFydGVybHkgcmVwb3J0XG4gKiBvdmVyIGEgYnVzeSBvcmcgY29zdHMgYSBmZXcgaHVuZHJlZCByb3dzLCBhbmQga2VlcHMgd29ya2luZyBhZnRlciByZXRlbnRpb24gaGFzXG4gKiBzd2VwdCB0aGUgZXZlbnRzLlxuICpcbiAqIFRXTyBSVUxFUyBFVkVSWSBRVUVSWSBIRVJFIEZPTExPV1M6XG4gKlxuICogIC0gTk9USElORyBJUyBQRVItUEVSU09OLiBFdmVyeSBhZ2dyZWdhdGUgaXMgcGVyIHBpcGVsaW5lLCBwZXIgc3RhZ2UsIHBlclxuICogICAgY2F0ZWdvcnkgb3IgcGVyIGVudmlyb25tZW50LiBUaGUgc2VjdGlvbiByZWdpc3RyeSByZWZ1c2VzIGEgcGVyLXBlcnNvbiBpZCBhdFxuICogICAgcmVnaXN0cmF0aW9uOyB0aGVzZSBxdWVyaWVzIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJlZ2lzdGVyLlxuICogIC0gQSBaRVJPIEFORCBBIEJMSU5EIFNQT1QgQVJFIERJRkZFUkVOVC4gV2hlcmUgYSBudW1iZXIgY2FuIGJlIGFic2VudCBmb3IgbGFja1xuICogICAgb2YgZGF0YSByYXRoZXIgdGhhbiBsYWNrIG9mIGFjdGl2aXR5LCB0aGUgc2hhcGUgY2FycmllcyB0aGF0IChgbnVsbGAsIGFcbiAqICAgIGBjb3ZlcmFnZWAgY291bnQsIGFuIGV4cGxpY2l0IHJlYXNvbikgaW5zdGVhZCBvZiBjb2xsYXBzaW5nIHRvIDAuXG4gKlxuICogUkVBRFMgR08gVE8gVEhFIFJFUExJQ0EgV0hFTiBPTkUgRVhJU1RTLiBFdmVyeSBxdWVyeSBiZWxvdyBydW5zIHRocm91Z2hcbiAqIGB3aXRoVGVuYW50VHhSZWFkYCwgdGhlIHJlYWQtb25seSB2YXJpYW50IG9mIGB3aXRoVGVuYW50VHhgLiBJdCBzZXRzIHRoZVxuICogaWRlbnRpY2FsIFJMUyBHVUNzLCBhZGRzIGBTRVQgVFJBTlNBQ1RJT04gUkVBRCBPTkxZYCwgYW5kIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBwcmltYXJ5IGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcmVwbGljYSwgdGhlIGtpbGwgc3dpdGNoIGlzIG9mZixcbiAqIHJlcGxheSBsYWcgaXMgYmV5b25kIGl0cyB0aHJlc2hvbGQsIHRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IHdyaXR0ZW4sIG9yIHRoZXJlXG4gKiBpcyBubyB0ZW5hbnQgY29udGV4dCDigJQgc28gdGhpcyBpcyBhIG5vLW9wIHVudGlsIGBEQl9SRUFEX0hPU1RgIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogV0hZIFRISVMgRklMRSBXQVMgVEhFIEZJUlNUIFRPIE9QVCBJTi4gVGhyZWUgY29uZGl0aW9ucyBkZWNpZGUgd2hldGhlciBhXG4gKiBxdWVyeSBtYXkgbGVhdmUgdGhlIHByaW1hcnksIGFuZCB0aGlzIGZpbGUgc2F0aXNmaWVzIGFsbCB0aHJlZSBieVxuICogY29uc3RydWN0aW9uIOKAlCBzbyB0aGV5IGFyZSBzdGF0ZWQgaGVyZSByYXRoZXIgdGhhbiBjaXRlZCwgbm93IHRoYXQgdGhlIHBsYW5cbiAqIHRoYXQgaW50cm9kdWNlZCB0aGVtIGlzIHJldGlyZWQ6XG4gKlxuICogICAtIE5vdGhpbmcgaGVyZSB3cml0ZXMuIFRoaXJ0ZWVuIGFnZ3JlZ2F0ZSBTRUxFQ1RzLCBubyBJTlNFUlQsIG5vIFVQREFURSwgbm9cbiAqICAgICBgU0VMRUNUIOKApiBGT1IgVVBEQVRFYCwgbm8gYWR2aXNvcnkgbG9jayDigJQgc28gbm9uZSBvZiB0aGUgZm91ciBjYWxsIHNpdGVzXG4gKiAgICAgdGhlIFBoYXNlIDBhIGF1ZGl0IGZvdW5kIGhpZGluZyBiZWhpbmQgcmVhZC1sb29raW5nIGNvZGUuXG4gKiAgIC0gTm90aGluZyBoZXJlIGZlZWRzIGFuIEFVVEhPUklaQVRJT04gZGVjaXNpb24uIFRoZXNlIGFyZSBkYXNoYm9hcmRcbiAqICAgICBhZ2dyZWdhdGVzOyBhIHN0YWxlIHBlcm1pc3Npb24gY2hlY2sgaXMgYSBzZWN1cml0eSBidWcsIGEgc3RhbGUgY2hhcnQgaXNcbiAqICAgICBhIHN0YWxlIGNoYXJ0LlxuICogICAtIE5vYm9keSBpcyBhYm91dCB0byBBQ1Qgb24gdGhlIHJlc3VsdC4gQSB1c2VyIHdobyBqdXN0IGNyZWF0ZWQgYSBwaXBlbGluZVxuICogICAgIGxvb2tzIGZvciBpdCBpbiBhIGxpc3QsIG5vdCBpbiBhIDMwLWRheSBmYWlsdXJlLXJhdGUgcm9sbHVwLlxuICpcbiAqIEFuZCBpdCBpcyB0aGUgYmVzdCBvZmZsb2FkIGNhbmRpZGF0ZSBmb3IgdGhlIHNhbWUgcmVhc29uIGl0IGlzIHNhZmU6IHRoZXNlXG4gKiBhcmUgdGhlIGhlYXZpZXN0IHF1ZXJpZXMgaW4gdGhlIHBhY2thZ2UsIHNjYW5uaW5nIHRpbWUgcmFuZ2VzIHJhdGhlciB0aGFuXG4gKiBmZXRjaGluZyByb3dzIGJ5IGlkLlxuICpcbiAqIGBTRVQgVFJBTlNBQ1RJT04gUkVBRCBPTkxZYCBhcHBsaWVzIG9uIHRoZSBQUklNQVJZIHBhdGggdG9vLCBzbyBpZiBhIHdyaXRlXG4gKiBpcyBldmVyIGFkZGVkIGJlbG93IGl0IGZhaWxzIGhlcmUsIGxvdWRseSwgcmF0aGVyIHRoYW4gYXQgd2hpY2hldmVyIHRhcmdldFxuICogdGhlIHJlYWQgaGFwcGVuZWQgdG8gbGFuZCBvbi5cbiAqL1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBndGUsIGluQXJyYXksIGx0LCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBGQUlMVVJFX0NBVEVHT1JZX0xBQkVMUywgaXNUZWFtQWN0aW9uYWJsZSB9IGZyb20gJy4vZmFpbHVyZS1jbGFzc2lmaWVyLmpzJztcbmltcG9ydCB7IGxpdmVFeHBvc3VyZVByZWRpY2F0ZSB9IGZyb20gJy4vcGx1Z2luLWV4cG9zdXJlLmpzJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRmFpbHVyZUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2Uvc2NoZW1hL3JlcG9ydGluZy1hbmFseXRpY3MuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4UmVhZCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG4vKiogVGhlIHdpbmRvdyBhbmQgb3JnIHNjb3BlIGV2ZXJ5IHF1ZXJ5IHRha2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmFseXRpY3NTY29wZSB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBgW3NlbGYsIC4uLmRlc2NlbmRhbnRzXWAgZm9yIGEgcm9sbHVwOyB1bmRlZmluZWQgPSB0aGlzIG9yZyBvbmx5LiAqL1xuICBvcmdJZHM/OiBzdHJpbmdbXTtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xufVxuXG4vKiogVGhlIG9yZyBwcmVkaWNhdGU6IG9uZSBvcmcsIG9yIGEgcm9sbHVwIHNldC4gKi9cbmZ1bmN0aW9uIG9yZ1ByZWRpY2F0ZShjb2w6IFBhcmFtZXRlcnM8dHlwZW9mIGluQXJyYXk+WzBdLCBzY29wZTogQW5hbHl0aWNzU2NvcGUpIHtcbiAgcmV0dXJuIHNjb3BlLm9yZ0lkcyAmJiBzY29wZS5vcmdJZHMubGVuZ3RoID4gMFxuICAgID8gaW5BcnJheShjb2wsIHNjb3BlLm9yZ0lkcylcbiAgICA6IGVxKGNvbCBhcyBuZXZlciwgc2NvcGUub3JnSWQgYXMgbmV2ZXIpO1xufVxuXG4vKiogT25lIHBpcGVsaW5lJ3MgbGluZSBpbiB0aGUgYnJlYWtkb3duLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUJyZWFrZG93blJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwcm9qZWN0OiBzdHJpbmcgfCBudWxsO1xuICBydW5zOiBudW1iZXI7XG4gIHN1Y2NlZWRlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgc3VjY2Vzc1BjdDogbnVtYmVyIHwgbnVsbDtcbiAgcDk1TXM6IG51bWJlciB8IG51bGw7XG4gIGRlcGxveXM6IG51bWJlcjtcbiAgLyoqIFRoZSBtb3N0IHJlY2VudCBmYWlsdXJlJ3MgZGF5IGFuZCBzdGFnZSwgZm9yIFwid2hhdCB0byBsb29rIGF0IGZpcnN0XCIuICovXG4gIGxhc3RGYWlsdXJlQXQ6IHN0cmluZyB8IG51bGw7XG4gIGxhc3RGYWlsdXJlU3RhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWxkU2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBlci1waXBlbGluZSBkZWxpdmVyeSwgd29yc3QgZmlyc3QuXG4gKlxuICogV09SU1QgRklSU1QsIGFuZCBjYXBwZWQsIGJlY2F1c2UgdGhlIHBvaW50IG9mIHRoZSBzZWN0aW9uIGlzIFwid2hlcmUgc2hvdWxkXG4gKiBhdHRlbnRpb24gZ29cIi4gQSBsaXN0IHNvcnRlZCBieSBuYW1lLCBvciBhbiB1bmJvdW5kZWQgb25lLCBpcyBhIGRhdGEgZHVtcDogdGhlXG4gKiBsZWFkIHN0aWxsIGhhcyB0byBmaW5kIHRoZSBwcm9ibGVtLCB3aGljaCBpcyB0aGUgd29yayB0aGUgcmVwb3J0IHdhcyBzdXBwb3NlZCB0b1xuICogZG8uIFRpZXMgYnJlYWsgb24gdm9sdW1lLCBzbyBhIDUwJS1zdWNjZXNzIHBpcGVsaW5lIHRoYXQgcmFuIHR3aWNlIGRvZXMgbm90XG4gKiBvdXRyYW5rIG9uZSB0aGF0IHJhbiB0d28gaHVuZHJlZCB0aW1lcy5cbiAqXG4gKiBgc3VjY2Vzc1BjdGAgaXMgTlVMTCBmb3IgYSBwaXBlbGluZSB3aXRoIG5vIHJ1bnMgaW4gdGhlIHdpbmRvdyDigJQgbm90IDAuIEFcbiAqIHBpcGVsaW5lIG5vYm9keSByYW4gaXMgbm90IGEgcGlwZWxpbmUgdGhhdCBmYWlsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZUJyZWFrZG93bihzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0ID0gMTApOiBQcm9taXNlPFBpcGVsaW5lQnJlYWtkb3duUm93W10+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBXSVRIIHRvdGFscyBBUyAoXG4gICAgICBTRUxFQ1RcbiAgICAgICAgci5waXBlbGluZV9pZCxcbiAgICAgICAgU1VNKHIucnVucyk6OmludCBBUyBydW5zLFxuICAgICAgICBTVU0oci5zdWNjZWVkZWQpOjppbnQgQVMgc3VjY2VlZGVkLFxuICAgICAgICBTVU0oci5mYWlsZWQpOjppbnQgQVMgZmFpbGVkLFxuICAgICAgICBNQVgoci5wOTVfbXMpOjppbnQgQVMgcDk1X21zLFxuICAgICAgICBTVU0oci5idWlsZF9zZWNvbmRzKTo6aW50IEFTIGJ1aWxkX3NlY29uZHNcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgclxuICAgICAgV0hFUkUgci5vcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICAtLSBUaGUgcGlwZWxpbmUtbGV2ZWwgZ3JhaW4gb25seTogc3VtbWluZyB0aGUgc3RhZ2Ugcm93cyB0b28gd291bGQgY291bnRcbiAgICAgICAgLS0gZXZlcnkgcnVuIG9uY2UgcGVyIHN0YWdlLlxuICAgICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICAgIEdST1VQIEJZIHIucGlwZWxpbmVfaWRcbiAgICApLFxuICAgIGRlcGxveXMgQVMgKFxuICAgICAgU0VMRUNUIHBpcGVsaW5lX2lkLCBDT1VOVCgqKTo6aW50IEFTIGRlcGxveXNcbiAgICAgIEZST00gZG9yYV9kZXBsb3ltZW50c1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkZXBsb3llZF9hdCA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGVwbG95ZWRfYXQgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN1Y2NlZWRlZCA9IHRydWVcbiAgICAgIEdST1VQIEJZIHBpcGVsaW5lX2lkXG4gICAgKSxcbiAgICBsYXN0X2ZhaWwgQVMgKFxuICAgICAgLS0gVGhlIG1vc3QgcmVjZW50IGZhaWxpbmcgU1RBR0Ugcm93IHBlciBwaXBlbGluZTogd2hhdCB0byBsb29rIGF0IGZpcnN0LlxuICAgICAgU0VMRUNUIERJU1RJTkNUIE9OIChwaXBlbGluZV9pZCkgcGlwZWxpbmVfaWQsIGRheSwgc3RhZ2VfbmFtZVxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA8PiAnJyBBTkQgZmFpbGVkID4gMFxuICAgICAgT1JERVIgQlkgcGlwZWxpbmVfaWQsIGRheSBERVNDLCBmYWlsZWQgREVTQ1xuICAgIClcbiAgICBTRUxFQ1RcbiAgICAgIHQucGlwZWxpbmVfaWQsXG4gICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICBwLnByb2plY3QsXG4gICAgICB0LnJ1bnMsIHQuc3VjY2VlZGVkLCB0LmZhaWxlZCwgdC5wOTVfbXMsIHQuYnVpbGRfc2Vjb25kcyxcbiAgICAgIENPQUxFU0NFKGQuZGVwbG95cywgMCkgQVMgZGVwbG95cyxcbiAgICAgIGYuZGF5IEFTIGxhc3RfZmFpbHVyZV9hdCxcbiAgICAgIGYuc3RhZ2VfbmFtZSBBUyBsYXN0X2ZhaWx1cmVfc3RhZ2UsXG4gICAgICBDQVNFIFdIRU4gdC5ydW5zID4gMCBUSEVOIFJPVU5EKCh0LnN1Y2NlZWRlZDo6bnVtZXJpYyAvIHQucnVucykgKiAxMDAsIDEpIEVMU0UgTlVMTCBFTkQgQVMgc3VjY2Vzc19wY3RcbiAgICBGUk9NIHRvdGFscyB0XG4gICAgTEVGVCBKT0lOIGRlcGxveXMgZCBPTiBkLnBpcGVsaW5lX2lkID0gdC5waXBlbGluZV9pZFxuICAgIExFRlQgSk9JTiBsYXN0X2ZhaWwgZiBPTiBmLnBpcGVsaW5lX2lkID0gdC5waXBlbGluZV9pZFxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gdC5waXBlbGluZV9pZFxuICAgIC0tIFdvcnN0IGZpcnN0OiBsb3dlc3Qgc3VjY2VzcyByYXRlLCB0aGVuIG1vc3QgcnVucywgc28gYSA1MCUgcGlwZWxpbmUgdGhhdCByYW5cbiAgICAtLSB0d2ljZSBkb2VzIG5vdCBvdXRyYW5rIG9uZSB0aGF0IHJhbiB0d28gaHVuZHJlZCB0aW1lcy5cbiAgICBPUkRFUiBCWSBzdWNjZXNzX3BjdCBBU0MgTlVMTFMgTEFTVCwgdC5ydW5zIERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBwcm9qZWN0OiAoci5wcm9qZWN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcnVuczogbnVtKHIucnVucyksXG4gICAgc3VjY2VlZGVkOiBudW0oci5zdWNjZWVkZWQpLFxuICAgIGZhaWxlZDogbnVtKHIuZmFpbGVkKSxcbiAgICBzdWNjZXNzUGN0OiByLnN1Y2Nlc3NfcGN0ID09PSBudWxsID8gbnVsbCA6IE51bWJlcihyLnN1Y2Nlc3NfcGN0KSxcbiAgICBwOTVNczogci5wOTVfbXMgPT09IG51bGwgPyBudWxsIDogbnVtKHIucDk1X21zKSxcbiAgICBkZXBsb3lzOiBudW0oci5kZXBsb3lzKSxcbiAgICBsYXN0RmFpbHVyZUF0OiBpc29Pck51bGwoci5sYXN0X2ZhaWx1cmVfYXQpLFxuICAgIGxhc3RGYWlsdXJlU3RhZ2U6IChyLmxhc3RfZmFpbHVyZV9zdGFnZSBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIGJ1aWxkU2Vjb25kczogbnVtKHIuYnVpbGRfc2Vjb25kcyksXG4gIH0pKTtcbn1cblxuLyoqIE9uZSBmYWlsdXJlIGNhdGVnb3J5J3Mgc2hhcmUgb2YgdGhlIHBlcmlvZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZUNhdGVnb3J5Um93IHtcbiAgY2F0ZWdvcnk6IEZhaWx1cmVDYXRlZ29yeTtcbiAgbGFiZWw6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgc2hhcmVQY3Q6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIHRlYW0gY2FuIGFjdCBvbiBpdCwgb3IgaXQgaGFwcGVuZWQgdG8gdGhlbS4gKi9cbiAgdGVhbUFjdGlvbmFibGU6IGJvb2xlYW47XG4gIC8qKiBDaGFuZ2UgdnMgdGhlIHByZXZpb3VzIHBlcmlvZCwgaW4gZmFpbHVyZXMuICovXG4gIGNoYW5nZTogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFRoZSBwaXBlbGluZXMgaXQgaGl0IGhhcmRlc3QuICovXG4gIHRvcFBpcGVsaW5lczogQXJyYXk8eyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgY291bnQ6IG51bWJlciB9Pjtcbn1cblxuLyoqXG4gKiBGYWlsdXJlcyBieSBjYXRlZ29yeSwgd2l0aCB0aGUgcHJldmlvdXMgcGVyaW9kJ3MgY291bnRzIGZvciB0aGUgdHJlbmQuXG4gKlxuICogU1BMSVRTIEFDVElPTkFCTEUgRlJPTSBOT1QuIEEgd2VlayB3aG9zZSBmYWlsdXJlcyB3ZXJlIGFsbCBjbG91ZCB0aHJvdHRsaW5nIGlzIGFcbiAqIGRpZmZlcmVudCBjb252ZXJzYXRpb24gZnJvbSBvbmUgd2hvc2UgZmFpbHVyZXMgd2VyZSBhbGwgYnJva2VuIHRlc3RzLCBhbmRcbiAqIHByZXNlbnRpbmcgdGhlbSBpbiBvbmUgcmFua2VkIGxpc3QgaW52aXRlcyBleGFjdGx5IHRoZSB3cm9uZyBjb25jbHVzaW9uIOKAlCBhIHRlYW1cbiAqIGJlaW5nIGFza2VkIHRvIGZpeCBhbiBBV1MgY2FwYWNpdHkgcHJvYmxlbS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZhaWx1cmVBbmFseXNpcyhcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPHsgY2F0ZWdvcmllczogRmFpbHVyZUNhdGVnb3J5Um93W107IHRvdGFsOiBudW1iZXI7IGFjdGlvbmFibGVUb3RhbDogbnVtYmVyIH0+IHtcbiAgY29uc3QgY291bnRzID0gYXdhaXQgY2F0ZWdvcnlDb3VudHMoc2NvcGUpO1xuICBjb25zdCBwcmlvciA9IHByZXZpb3VzID8gYXdhaXQgY2F0ZWdvcnlDb3VudHMoeyAuLi5zY29wZSwgLi4ucHJldmlvdXMgfSkgOiBudWxsO1xuICBjb25zdCB0b3RhbCA9IFsuLi5jb3VudHMudmFsdWVzKCldLnJlZHVjZSgocywgdikgPT4gcyArIHYuY291bnQsIDApO1xuICBjb25zdCB0b3BCeUNhdGVnb3J5ID0gYXdhaXQgdG9wUGlwZWxpbmVzQnlDYXRlZ29yeShzY29wZSk7XG5cbiAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5jb3VudHMuZW50cmllcygpXVxuICAgIC5tYXAoKFtjYXRlZ29yeSwgdl0pID0+ICh7XG4gICAgICBjYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBGQUlMVVJFX0NBVEVHT1JZX0xBQkVMU1tjYXRlZ29yeV0gPz8gY2F0ZWdvcnksXG4gICAgICBjb3VudDogdi5jb3VudCxcbiAgICAgIHNoYXJlUGN0OiB0b3RhbCA+IDAgPyBOdW1iZXIoKCh2LmNvdW50IC8gdG90YWwpICogMTAwKS50b0ZpeGVkKDEpKSA6IDAsXG4gICAgICB0ZWFtQWN0aW9uYWJsZTogaXNUZWFtQWN0aW9uYWJsZShjYXRlZ29yeSksXG4gICAgICBjaGFuZ2U6IHByaW9yID8gdi5jb3VudCAtIChwcmlvci5nZXQoY2F0ZWdvcnkpPy5jb3VudCA/PyAwKSA6IG51bGwsXG4gICAgICB0b3BQaXBlbGluZXM6IHRvcEJ5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5KSA/PyBbXSxcbiAgICB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5jb3VudCAtIGEuY291bnQpO1xuXG4gIHJldHVybiB7XG4gICAgY2F0ZWdvcmllcyxcbiAgICB0b3RhbCxcbiAgICBhY3Rpb25hYmxlVG90YWw6IGNhdGVnb3JpZXMuZmlsdGVyKChjKSA9PiBjLnRlYW1BY3Rpb25hYmxlKS5yZWR1Y2UoKHMsIGMpID0+IHMgKyBjLmNvdW50LCAwKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2F0ZWdvcnlDb3VudHMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxNYXA8RmFpbHVyZUNhdGVnb3J5LCB7IGNvdW50OiBudW1iZXIgfT4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1Qga2V5IEFTIGNhdGVnb3J5LCBTVU0odmFsdWU6OmludCk6OmludCBBUyBjb3VudFxuICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgciwganNvbmJfZWFjaChyLmZhaWx1cmVzX2J5X2NhdGVnb3J5KVxuICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgci5kYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIHIuZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICBHUk9VUCBCWSBrZXlcbiAgYCkpO1xuICBjb25zdCBvdXQgPSBuZXcgTWFwPEZhaWx1cmVDYXRlZ29yeSwgeyBjb3VudDogbnVtYmVyIH0+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIG91dC5zZXQoci5jYXRlZ29yeSBhcyBGYWlsdXJlQ2F0ZWdvcnksIHsgY291bnQ6IG51bShyLmNvdW50KSB9KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9wUGlwZWxpbmVzQnlDYXRlZ29yeShcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBwZXJDYXRlZ29yeSA9IDMsXG4pOiBQcm9taXNlPE1hcDxGYWlsdXJlQ2F0ZWdvcnksIEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT4+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGNhdGVnb3J5LCBwaXBlbGluZV9pZCwgcGlwZWxpbmVfbmFtZSwgY291bnQgRlJPTSAoXG4gICAgICBTRUxFQ1RcbiAgICAgICAgZS5rZXkgQVMgY2F0ZWdvcnksXG4gICAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICAgIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgICAgU1VNKGUudmFsdWU6OmludCk6OmludCBBUyBjb3VudCxcbiAgICAgICAgUk9XX05VTUJFUigpIE9WRVIgKFBBUlRJVElPTiBCWSBlLmtleSBPUkRFUiBCWSBTVU0oZS52YWx1ZTo6aW50KSBERVNDKSBBUyByblxuICAgICAgLS0gQ1JPU1MgSk9JTiBMQVRFUkFMLCBub3QgYSBjb21tYSBqb2luLiBXaXRoIEZST00gYSwgZihhLngpIGUgTEVGVCBKT0lOIGIsXG4gICAgICAtLSB0aGUgTEVGVCBKT0lOIGJpbmRzIHRvIGUgYWxvbmUgYW5kIHIgZmFsbHMgb3V0IG9mIHNjb3BlIGluIGl0cyBPTiBjbGF1c2VcbiAgICAgIC0tIChcImludmFsaWQgcmVmZXJlbmNlIHRvIEZST00tY2xhdXNlIGVudHJ5XCIpLiBUaGUgZXhwbGljaXQgbGF0ZXJhbCBrZWVwcyBhbGxcbiAgICAgIC0tIHRocmVlIGluIG9uZSBqb2luIHRyZWUuXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICAgIENST1NTIEpPSU4gTEFURVJBTCBqc29uYl9lYWNoKHIuZmFpbHVyZXNfYnlfY2F0ZWdvcnkpIGVcbiAgICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZFxuICAgICAgV0hFUkUgci5vcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICAgIEdST1VQIEJZIGUua2V5LCByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWVcbiAgICApIHJhbmtlZFxuICAgIFdIRVJFIHJuIDw9ICR7cGVyQ2F0ZWdvcnl9XG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxGYWlsdXJlQ2F0ZWdvcnksIEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT4+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIHtcbiAgICBjb25zdCBrZXkgPSByLmNhdGVnb3J5IGFzIEZhaWx1cmVDYXRlZ29yeTtcbiAgICBjb25zdCBsaXN0ID0gb3V0LmdldChrZXkpID8/IFtdO1xuICAgIGxpc3QucHVzaCh7XG4gICAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIGNvdW50OiBudW0oci5jb3VudCksXG4gICAgfSk7XG4gICAgb3V0LnNldChrZXksIGxpc3QpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBPbmUgc3RhZ2UncyB0aW1pbmcsIGZvciB0aGUgZHJpbGwtZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VQZXJmb3JtYW5jZVJvdyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBydW5zOiBudW1iZXI7XG4gIHA1ME1zOiBudW1iZXIgfCBudWxsO1xuICBwOTVNczogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIENoYW5nZSBpbiBwOTUgdnMgdGhlIHByZXZpb3VzIHBlcmlvZCwgYXMgYSBwZXJjZW50YWdlLiAqL1xuICBwOTVDaGFuZ2VQY3Q6IG51bWJlciB8IG51bGw7XG4gIGZhaWxlZDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBlci1zdGFnZSB0aW1pbmdzIGZvciBvbmUgcGlwZWxpbmUsIHNsb3dlc3QgZmlyc3QuXG4gKlxuICogVGhlIHNlY3Rpb24gYSBsZWFkIG9wZW5zIGFmdGVyIHRoZSBicmVha2Rvd24gc2F5cyBhIHBpcGVsaW5lIGdvdCBzbG93ZXI6IFwid2hpY2hcbiAqIHN0YWdlXCIgaXMgdGhlIG5leHQgcXVlc3Rpb24sIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSByYXcgZXZlbnRzIHdvdWxkIG1lYW4gYVxuICogc2Vjb25kIHNjYW4gb2YgdGhlIHNhbWUgd2luZG93LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3RhZ2VQZXJmb3JtYW5jZShcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIHByZXZpb3VzPzogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSxcbik6IFByb21pc2U8U3RhZ2VQZXJmb3JtYW5jZVJvd1tdPiB7XG4gIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBzdGFnZVJvd3Moc2NvcGUsIHBpcGVsaW5lSWQpO1xuICBjb25zdCBwcmlvcjogTWFwPHN0cmluZywgeyBwOTVNczogbnVtYmVyIHwgbnVsbCB9PiA9IHByZXZpb3VzXG4gICAgPyBuZXcgTWFwKChhd2FpdCBzdGFnZVJvd3MoeyAuLi5zY29wZSwgLi4ucHJldmlvdXMgfSwgcGlwZWxpbmVJZCkpLm1hcCgocykgPT4gW3Muc3RhZ2VOYW1lLCBzXSkpXG4gICAgOiBuZXcgTWFwKCk7XG4gIHJldHVybiBjdXJyZW50Lm1hcCgocykgPT4ge1xuICAgIGNvbnN0IGJlZm9yZSA9IHByaW9yLmdldChzLnN0YWdlTmFtZSk/LnA5NU1zID8/IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnMsXG4gICAgICBwOTVDaGFuZ2VQY3Q6IGJlZm9yZSAmJiBiZWZvcmUgPiAwICYmIHMucDk1TXMgIT09IG51bGxcbiAgICAgICAgPyBOdW1iZXIoKCgocy5wOTVNcyAtIGJlZm9yZSkgLyBiZWZvcmUpICogMTAwKS50b0ZpeGVkKDEpKVxuICAgICAgICA6IG51bGwsXG4gICAgfTtcbiAgfSkuc29ydCgoYSwgYikgPT4gKGIucDk1TXMgPz8gMCkgLSAoYS5wOTVNcyA/PyAwKSk7XG59XG5cbmludGVyZmFjZSBTdGFnZVJvdyB7IHN0YWdlTmFtZTogc3RyaW5nOyBydW5zOiBudW1iZXI7IHA1ME1zOiBudW1iZXIgfCBudWxsOyBwOTVNczogbnVtYmVyIHwgbnVsbDsgZmFpbGVkOiBudW1iZXIgfVxuXG5hc3luYyBmdW5jdGlvbiBzdGFnZVJvd3Moc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBwaXBlbGluZUlkOiBzdHJpbmcpOiBQcm9taXNlPFN0YWdlUm93W10+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgIHN0YWdlTmFtZTogc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZSxcbiAgICBydW5zOiBzcWw8bnVtYmVyPmBTVU0oJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucnVuc30pOjppbnRgLFxuICAgIGZhaWxlZDogc3FsPG51bWJlcj5gU1VNKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLmZhaWxlZH0pOjppbnRgLFxuICAgIC8vIE1BWCBvZiB0aGUgZGFpbHkgcDk1cywgbm90IGFuIGF2ZXJhZ2Ugb2YgcGVyY2VudGlsZXM6IGF2ZXJhZ2luZ1xuICAgIC8vIHBlcmNlbnRpbGVzIGlzIG5vdCBhIHBlcmNlbnRpbGUgb2YgYW55dGhpbmcsIGFuZCB0aGUgd29yc3QgZGF5IGlzIHRoZVxuICAgIC8vIG51bWJlciBzb21lYm9keSB3b3VsZCBhY3Qgb24uXG4gICAgcDUwTXM6IHNxbDxudW1iZXIgfCBudWxsPmBNQVgoJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucDUwTXN9KTo6aW50YCxcbiAgICBwOTVNczogc3FsPG51bWJlciB8IG51bGw+YE1BWCgke3NjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5wOTVNc30pOjppbnRgLFxuICB9KS5mcm9tKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgb3JnUHJlZGljYXRlKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5vcmdJZCwgc2NvcGUpLFxuICAgICAgZXEoc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpLFxuICAgICAgZ3RlKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5kYXksIG5ldyBEYXRlKHNjb3BlLmZyb20pKSxcbiAgICAgIGx0KHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5kYXksIG5ldyBEYXRlKHNjb3BlLnRvKSksXG4gICAgICBzcWxgJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuc3RhZ2VOYW1lfSA8PiAnJ2AsXG4gICAgKSlcbiAgICAuZ3JvdXBCeShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuc3RhZ2VOYW1lKSk7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBTdGFnZVJvdz4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KSB7XG4gICAgbWFwLnNldChTdHJpbmcoci5zdGFnZU5hbWUpLCB7XG4gICAgICBzdGFnZU5hbWU6IFN0cmluZyhyLnN0YWdlTmFtZSksXG4gICAgICBydW5zOiBudW0oci5ydW5zKSxcbiAgICAgIGZhaWxlZDogbnVtKHIuZmFpbGVkKSxcbiAgICAgIHA1ME1zOiByLnA1ME1zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA1ME1zKSxcbiAgICAgIHA5NU1zOiByLnA5NU1zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA5NU1zKSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gWy4uLm1hcC52YWx1ZXMoKV07XG59XG5cbi8qKiBCdWlsZCB0aW1lIGJ5IHByb2plY3QgYW5kIHBpcGVsaW5lLiBObyBtb25leSBhbnl3aGVyZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VSb3cge1xuICBwcm9qZWN0OiBzdHJpbmcgfCBudWxsO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYnVpbGRTZWNvbmRzOiBudW1iZXI7XG4gIHJ1bnM6IG51bWJlcjtcbiAgc2hhcmVQY3Q6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGVyZSB0aGUgYnVpbGQgdGltZSB3ZW50LlxuICpcbiAqIFNFQ09ORFMsIE5PVCBET0xMQVJTLiBBIGNvc3QgZmlndXJlIG5lZWRzIHRoZSBpbnN0YW5jZSB0eXBlcywgdGhlIHNwb3Qvb24tZGVtYW5kXG4gKiBtaXggYW5kIHRoZSBhY2NvdW50J3Mgb3duIGRpc2NvdW50cywgbm9uZSBvZiB3aGljaCB0aGlzIHBsYXRmb3JtIGtub3dzIOKAlCBzbyBhXG4gKiBkb2xsYXIgbnVtYmVyIGhlcmUgd291bGQgYmUgYSBndWVzcyBwcmVzZW50ZWQgYXMgYW4gaW52b2ljZS4gQnVpbGQgdGltZSBpcyB0aGVcbiAqIHRoaW5nIGFjdHVhbGx5IG1lYXN1cmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VDb25zdW1wdGlvbihzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0ID0gMjApOiBQcm9taXNlPHtcbiAgcGlwZWxpbmVzOiBSZXNvdXJjZVJvd1tdO1xuICB0b3RhbEJ1aWxkU2Vjb25kczogbnVtYmVyO1xufT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgcC5wcm9qZWN0LFxuICAgICAgci5waXBlbGluZV9pZCxcbiAgICAgIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgIFNVTShyLmJ1aWxkX3NlY29uZHMpOjppbnQgQVMgYnVpbGRfc2Vjb25kcyxcbiAgICAgIFNVTShyLnJ1bnMpOjppbnQgQVMgcnVuc1xuICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgclxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZFxuICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgci5kYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIHIuZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICBHUk9VUCBCWSBwLnByb2plY3QsIHIucGlwZWxpbmVfaWQsIHAucGlwZWxpbmVfbmFtZVxuICAgIE9SREVSIEJZIGJ1aWxkX3NlY29uZHMgREVTQ1xuICAgIExJTUlUICR7bGltaXR9XG4gIGApKTtcbiAgY29uc3QgbGlzdCA9IHJvd3NPZihyb3dzKTtcbiAgY29uc3QgdG90YWwgPSBsaXN0LnJlZHVjZSgocywgcikgPT4gcyArIG51bShyLmJ1aWxkX3NlY29uZHMpLCAwKTtcbiAgcmV0dXJuIHtcbiAgICB0b3RhbEJ1aWxkU2Vjb25kczogdG90YWwsXG4gICAgcGlwZWxpbmVzOiBsaXN0Lm1hcCgocikgPT4gKHtcbiAgICAgIHByb2plY3Q6IChyLnByb2plY3QgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICAgIHBpcGVsaW5lTmFtZTogKHIucGlwZWxpbmVfbmFtZSBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgICAgYnVpbGRTZWNvbmRzOiBudW0oci5idWlsZF9zZWNvbmRzKSxcbiAgICAgIHJ1bnM6IG51bShyLnJ1bnMpLFxuICAgICAgc2hhcmVQY3Q6IHRvdGFsID4gMCA/IE51bWJlcigoKG51bShyLmJ1aWxkX3NlY29uZHMpIC8gdG90YWwpICogMTAwKS50b0ZpeGVkKDEpKSA6IDAsXG4gICAgfSkpLFxuICB9O1xufVxuXG4vKiogT25lIGNvbW1pdCdzIGpvdXJuZXkgYWNyb3NzIGVudmlyb25tZW50cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbW90aW9uUm93IHtcbiAgY29tbWl0U2hhOiBzdHJpbmc7XG4gIC8qKiBFbnZpcm9ubWVudCDihpIgd2hlbiBpdCBsYW5kZWQgdGhlcmUsIGluIHRoZSBvcmRlciBpdCByZWFjaGVkIHRoZW0uICovXG4gIHN0b3BzOiBBcnJheTx7IGVudmlyb25tZW50OiBzdHJpbmc7IGRlcGxveWVkQXQ6IHN0cmluZzsgaG91cnNGcm9tUHJldmlvdXM6IG51bWJlciB8IG51bGwgfT47XG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNvbW1pdCByZWFjaGVkIGEgbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnQgYW5kIHN0b3BwZWQuICovXG4gIHN0dWNrOiBib29sZWFuO1xuICBmdXJ0aGVzdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIGNvbW1pdHMgZ290IHRvLCBhbmQgd2hlcmUgdGhleSBzdG9wcGVkLlxuICpcbiAqIFwiU3R1Y2tcIiBpcyB0aGUgbnVtYmVyIHdvcnRoIHJlYWRpbmcuIEEgY29tbWl0IHRoYXQgcmVhY2hlZCBzdGFnaW5nIGZvdXIgZGF5cyBhZ29cbiAqIGFuZCBuZXZlciB3ZW50IGZ1cnRoZXIgaXMgd29yayB0aGF0IGlzIGZpbmlzaGVkIGFuZCBub3QgZGVsaXZlcmVkIOKAlCB3aGljaCBkb2VzXG4gKiBub3QgYXBwZWFyIGluIGRlcGxveW1lbnQgZnJlcXVlbmN5LCBzdWNjZXNzIHJhdGUgb3IgbGVhZCB0aW1lLCBiZWNhdXNlIGJ5IGV2ZXJ5XG4gKiBvbmUgb2YgdGhvc2UgbWVhc3VyZXMgbm90aGluZyBoYXBwZW5lZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb21vdGlvblZpZXcoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcHJvZHVjdGlvbkVudiA9ICdwcm9kdWN0aW9uJyxcbiAgbGltaXQgPSAyNSxcbik6IFByb21pc2U8eyBjb21taXRzOiBQcm9tb3Rpb25Sb3dbXTsgc3R1Y2tDb3VudDogbnVtYmVyIH0+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgY29tbWl0X3NoYSwgZW52aXJvbm1lbnQsIE1JTihkZXBsb3llZF9hdCkgQVMgZGVwbG95ZWRfYXRcbiAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBkZXBsb3llZF9hdCA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGVwbG95ZWRfYXQgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgIEFORCBzdWNjZWVkZWQgPSB0cnVlXG4gICAgICBBTkQgY29tbWl0X3NoYSBJUyBOT1QgTlVMTFxuICAgIEdST1VQIEJZIGNvbW1pdF9zaGEsIGVudmlyb25tZW50XG4gICAgT1JERVIgQlkgTUlOKGRlcGxveWVkX2F0KSBERVNDXG4gIGApKTtcblxuICBjb25zdCBieUNvbW1pdCA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTx7IGVudmlyb25tZW50OiBzdHJpbmc7IGRlcGxveWVkQXQ6IERhdGUgfT4+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIHtcbiAgICBjb25zdCBzaGEgPSBTdHJpbmcoci5jb21taXRfc2hhKTtcbiAgICBjb25zdCBsaXN0ID0gYnlDb21taXQuZ2V0KHNoYSkgPz8gW107XG4gICAgbGlzdC5wdXNoKHsgZW52aXJvbm1lbnQ6IFN0cmluZyhyLmVudmlyb25tZW50KSwgZGVwbG95ZWRBdDogbmV3IERhdGUoU3RyaW5nKHIuZGVwbG95ZWRfYXQpKSB9KTtcbiAgICBieUNvbW1pdC5zZXQoc2hhLCBsaXN0KTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1pdHM6IFByb21vdGlvblJvd1tdID0gWy4uLmJ5Q29tbWl0LmVudHJpZXMoKV0ubWFwKChbY29tbWl0U2hhLCByYXddKSA9PiB7XG4gICAgY29uc3Qgb3JkZXJlZCA9IFsuLi5yYXddLnNvcnQoKGEsIGIpID0+IGEuZGVwbG95ZWRBdC5nZXRUaW1lKCkgLSBiLmRlcGxveWVkQXQuZ2V0VGltZSgpKTtcbiAgICBjb25zdCBzdG9wcyA9IG9yZGVyZWQubWFwKChzdG9wLCBpKSA9PiAoe1xuICAgICAgZW52aXJvbm1lbnQ6IHN0b3AuZW52aXJvbm1lbnQsXG4gICAgICBkZXBsb3llZEF0OiBzdG9wLmRlcGxveWVkQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIGhvdXJzRnJvbVByZXZpb3VzOiBpID09PSAwXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IE51bWJlcigoKHN0b3AuZGVwbG95ZWRBdC5nZXRUaW1lKCkgLSAob3JkZXJlZFtpIC0gMV0gYXMgeyBkZXBsb3llZEF0OiBEYXRlIH0pLmRlcGxveWVkQXQuZ2V0VGltZSgpKSAvIDM2MDBfMDAwKS50b0ZpeGVkKDEpKSxcbiAgICB9KSk7XG4gICAgY29uc3QgZnVydGhlc3QgPSBvcmRlcmVkW29yZGVyZWQubGVuZ3RoIC0gMV0/LmVudmlyb25tZW50ID8/ICcnO1xuICAgIHJldHVybiB7IGNvbW1pdFNoYSwgc3RvcHMsIGZ1cnRoZXN0LCBzdHVjazogZnVydGhlc3QgIT09IHByb2R1Y3Rpb25FbnYgfTtcbiAgfSlcbiAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYUxhc3QgPSBhLnN0b3BzW2Euc3RvcHMubGVuZ3RoIC0gMV0/LmRlcGxveWVkQXQgPz8gJyc7XG4gICAgICBjb25zdCBiTGFzdCA9IGIuc3RvcHNbYi5zdG9wcy5sZW5ndGggLSAxXT8uZGVwbG95ZWRBdCA/PyAnJztcbiAgICAgIHJldHVybiBiTGFzdC5sb2NhbGVDb21wYXJlKGFMYXN0KTtcbiAgICB9KVxuICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgcmV0dXJuIHsgY29tbWl0cywgc3R1Y2tDb3VudDogY29tbWl0cy5maWx0ZXIoKGMpID0+IGMuc3R1Y2spLmxlbmd0aCB9O1xufVxuXG4vKiogT3V0ZGF0ZWQgcGx1Z2luIHVzYWdlLCBwZXIgcGlwZWxpbmUgYW5kIHN0ZXAuICovXG5leHBvcnQgaW50ZXJmYWNlIE91dGRhdGVkUGx1Z2luUm93IHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBwbHVnaW46IHN0cmluZztcbiAgaW5Vc2U6IHN0cmluZyB8IG51bGw7XG4gIGxhdGVzdDogc3RyaW5nIHwgbnVsbDtcbiAgZ2FwOiBzdHJpbmcgfCBudWxsO1xuICB3aXRoaW5Qb2xpY3k6IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2hpY2ggcGlwZWxpbmVzIGFyZSBiZWhpbmQgb24gYSBwbHVnaW4sIHdvcnN0IGdhcCBmaXJzdC5cbiAqXG4gKiBSZWFkcyB0aGUgREVDTEFSRUQgc2lkZSAoYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCkuIEEgcGlwZWxpbmUncyBkZWNsYXJlZFxuICogcmFuZ2UgYW5kIHdoYXQgaXQgbGFzdCBhY3R1YWxseSByYW4gY2FuIGRpc2FncmVlIOKAlCB3aGljaCBpcyB3aHkgdGhlIHZ1bG5lcmFiaWxpdHlcbiAqIHNlY3Rpb24gYmVsb3cgcmVhZHMgdGhlIGRlcGxveWVkIHNpZGUgYW5kIHNheXMgd2hpY2ggaXQgaXMgc2hvd2luZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE91dGRhdGVkUGx1Z2lucyhzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0ID0gNTApOiBQcm9taXNlPHtcbiAgcm93czogT3V0ZGF0ZWRQbHVnaW5Sb3dbXTtcbiAgYmVoaW5kUGlwZWxpbmVzOiBudW1iZXI7XG4gIG1ham9yQmVoaW5kOiBudW1iZXI7XG59PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUXG4gICAgICByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWUsIHIuc3RhZ2VfbmFtZSwgci5zdGVwX25hbWUsXG4gICAgICBDT0FMRVNDRShyLnBsdWdpbl9wdWJsaXNoZXIgfHwgJy8nLCAnJykgfHwgci5wbHVnaW5fbmFtZSBBUyBwbHVnaW4sXG4gICAgICByLnJlc29sdmVkX3ZlcnNpb24sIHIubGF0ZXN0X3ZlcnNpb24sIHIudmVyc2lvbl9nYXAsIHIud2l0aGluX3BvbGljeVxuICAgIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZFxuICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgKHIudmVyc2lvbl9nYXAgSU4gKCdtYWpvcicsICdtaW5vcicsICdwYXRjaCcpIE9SIHIud2l0aGluX3BvbGljeSA9IGZhbHNlKVxuICAgIE9SREVSIEJZIENBU0Ugci52ZXJzaW9uX2dhcCBXSEVOICdtYWpvcicgVEhFTiAwIFdIRU4gJ21pbm9yJyBUSEVOIDEgV0hFTiAncGF0Y2gnIFRIRU4gMiBFTFNFIDMgRU5ELFxuICAgICAgICAgICAgIHIucGlwZWxpbmVfaWRcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cykubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBzdGFnZU5hbWU6IFN0cmluZyhyLnN0YWdlX25hbWUpLFxuICAgIHN0ZXBOYW1lOiBTdHJpbmcoci5zdGVwX25hbWUpLFxuICAgIHBsdWdpbjogU3RyaW5nKHIucGx1Z2luKSxcbiAgICBpblVzZTogKHIucmVzb2x2ZWRfdmVyc2lvbiBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIGxhdGVzdDogKHIubGF0ZXN0X3ZlcnNpb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBnYXA6IChyLnZlcnNpb25fZ2FwIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgd2l0aGluUG9saWN5OiByLndpdGhpbl9wb2xpY3kgIT09IGZhbHNlLFxuICB9KSk7XG4gIHJldHVybiB7XG4gICAgcm93czogbGlzdCxcbiAgICBiZWhpbmRQaXBlbGluZXM6IG5ldyBTZXQobGlzdC5tYXAoKHIpID0+IHIucGlwZWxpbmVJZCkpLnNpemUsXG4gICAgbWFqb3JCZWhpbmQ6IGxpc3QuZmlsdGVyKChyKSA9PiByLmdhcCA9PT0gJ21ham9yJykubGVuZ3RoLFxuICB9O1xufVxuXG4vKiogQSBwaXBlbGluZSdzIGV4cG9zdXJlIHRvIGEgdnVsbmVyYWJsZSBwbHVnaW4gdmVyc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnVsbmVyYWJpbGl0eVJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW46IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICAvKiogYGRlcGxveWVkYCA9IHdoYXQgYWN0dWFsbHkgcmFuOyBgZGVjbGFyZWRgID0gd2hhdCB0aGUgY29uZmlnIGFza3MgZm9yLiAqL1xuICBzb3VyY2U6IHN0cmluZztcbiAgY3JpdGljYWw6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBmaW5kaW5nczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBmbGFnZ2VkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQbHVnaW4gdnVsbmVyYWJpbGl0aWVzLCBwZXIgcGlwZWxpbmUsIENyaXRpY2FscyBmaXJzdC5cbiAqXG4gKiBTQVlTIFdIRVRIRVIgSVQgSVMgREVDTEFSRUQgT1IgREVQTE9ZRUQuIEEgcGlwZWxpbmUgd2hvc2UgY29uZmlnIHdhcyB1cGRhdGVkIHRvIGFcbiAqIGZpeGVkIHZlcnNpb24gYnV0IHdoaWNoIGhhcyBub3QgcmUtc3ludGhlZCBpcyBzdGlsbCBydW5uaW5nIHRoZSB2dWxuZXJhYmxlIGltYWdlLFxuICogYW5kIGEgcmVwb3J0IHRoYXQgY29sbGFwc2VkIHRoZSB0d28gd291bGQgdGVsbCBhIG1hbmFnZXIgdGhlIHByb2JsZW0gaXMgc29sdmVkXG4gKiB3aGlsZSB0aGUgb2xkIGltYWdlIGtlZXBzIHJ1bm5pbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5WdWxuZXJhYmlsaXRpZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDUwKTogUHJvbWlzZTx7XG4gIHJvd3M6IFZ1bG5lcmFiaWxpdHlSb3dbXTtcbiAgZXhwb3NlZFBpcGVsaW5lczogbnVtYmVyO1xuICBjcml0aWNhbFBpcGVsaW5lczogbnVtYmVyO1xufT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgdi5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lLFxuICAgICAgQ09BTEVTQ0Uodi5wbHVnaW5fcHVibGlzaGVyIHx8ICcvJywgJycpIHx8IHYucGx1Z2luX25hbWUgQVMgcGx1Z2luLFxuICAgICAgdi5wbHVnaW5fdmVyc2lvbiwgdi5zb3VyY2UsIHYuY3JpdGljYWxfY291bnQsIHYuaGlnaF9jb3VudCwgdi50b3BfZmluZGluZ3MsIHYuZmxhZ2dlZF9hdFxuICAgIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgdlxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gdi5waXBlbGluZV9pZFxuICAgIFdIRVJFIHYub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgJHtsaXZlRXhwb3N1cmVQcmVkaWNhdGUobm93LCAndicpfVxuICAgIE9SREVSIEJZIHYuY3JpdGljYWxfY291bnQgREVTQywgdi5oaWdoX2NvdW50IERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cykubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBwbHVnaW46IFN0cmluZyhyLnBsdWdpbiksXG4gICAgdmVyc2lvbjogU3RyaW5nKHIucGx1Z2luX3ZlcnNpb24pLFxuICAgIHNvdXJjZTogU3RyaW5nKHIuc291cmNlKSxcbiAgICBjcml0aWNhbDogbnVtKHIuY3JpdGljYWxfY291bnQpLFxuICAgIGhpZ2g6IG51bShyLmhpZ2hfY291bnQpLFxuICAgIGZpbmRpbmdzOiAoci50b3BfZmluZGluZ3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KSA/PyBbXSxcbiAgICBmbGFnZ2VkQXQ6IGlzb09yTnVsbChyLmZsYWdnZWRfYXQpID8/IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gIH0pKTtcbiAgcmV0dXJuIHtcbiAgICByb3dzOiBsaXN0LFxuICAgIGV4cG9zZWRQaXBlbGluZXM6IG5ldyBTZXQobGlzdC5tYXAoKHIpID0+IHIucGlwZWxpbmVJZCkpLnNpemUsXG4gICAgY3JpdGljYWxQaXBlbGluZXM6IG5ldyBTZXQobGlzdC5maWx0ZXIoKHIpID0+IHIuY3JpdGljYWwgPiAwKS5tYXAoKHIpID0+IHIucGlwZWxpbmVJZCkpLnNpemUsXG4gIH07XG59XG5cbi8qKiBBZG9wdGlvbiBhbmQgZGVwbG95LXRyYWNraW5nIGNvdmVyYWdlIHdpdGhpbiB0aGUgcmVwb3J0ZWQgc2NvcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkb3B0aW9uU3VtbWFyeSB7XG4gIGFjdGl2ZVBpcGVsaW5lczogbnVtYmVyO1xuICB0b3RhbFBpcGVsaW5lczogbnVtYmVyO1xuICAvKiogUGlwZWxpbmVzIHRoYXQgcHJvZHVjZWQgYSBkZXBsb3kgcm93IOKAlCBpLmUuIG9uZXMgRE9SQSBjYW4gc2VlLiAqL1xuICBkZXBsb3lUcmFja2VkUGlwZWxpbmVzOiBudW1iZXI7XG4gIC8qKiBCeSBgY3JlYXRpb25fc291cmNlYCwgZm9yIFwiYXJlIHRoZSBnb2xkZW4gcGF0aHMgYmVpbmcgdXNlZFwiLiAqL1xuICBieVNvdXJjZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgLyoqIFRlYW1zIGluIHRoZSByb2xsdXAgdGhhdCBoYWQgYWN0aXZpdHkuIDEgZm9yIGEgc2luZ2xlLW9yZyByZXBvcnQuICovXG4gIGFjdGl2ZVRlYW1zOiBudW1iZXI7XG4gIC8qKiBPbmx5IHdoZW4gdGhlIG9yZyBjb25maWd1cmVkIHRoZSBhc3N1bXB0aW9uLiBOZXZlciBwbGF0Zm9ybS1zdXBwbGllZC4gKi9cbiAgZXN0aW1hdGVkTWludXRlc1NhdmVkOiBudW1iZXIgfCBudWxsO1xufVxuXG4vKipcbiAqIEFkb3B0aW9uLCBjb3ZlcmFnZSBhbmQgY3JlYXRpb24gc291cmNlLlxuICpcbiAqIGBkZXBsb3lUcmFja2VkUGlwZWxpbmVzYCBpcyB0aGUgaG9uZXN0IGRlbm9taW5hdG9yIGZvciBldmVyeXRoaW5nIERPUkEgc2F5czogYVxuICogcGlwZWxpbmUgdGhhdCBoYXMgbm90IHJlLXN5bnRoZWQgd2l0aCBkZXBsb3kgdGFncyBwcm9kdWNlcyBubyBkZXBsb3kgcm93cywgc28gaXRcbiAqIGlzIGludmlzaWJsZSB0byBkZXBsb3ltZW50IGZyZXF1ZW5jeSDigJQgYW5kIHJlcG9ydGluZyBcIjQgZGVwbG95c1wiIHdpdGhvdXQgc2F5aW5nXG4gKiB0aGF0IDIwIG9mIDMwIHBpcGVsaW5lcyBjYW5ub3QgYmUgc2VlbiBpcyB0aGUgc2luZ2xlIG1vc3QgbWlzbGVhZGluZyB0aGluZyB0aGlzXG4gKiBmZWF0dXJlIGNvdWxkIGRvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWRvcHRpb24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCB0aW1lU2F2ZWRNaW51dGVzPzogbnVtYmVyIHwgbnVsbCk6IFByb21pc2U8QWRvcHRpb25TdW1tYXJ5PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBzY29wZWQgQVMgKFxuICAgICAgU0VMRUNUIGlkOjp0ZXh0IEFTIGlkLCBvcmdfaWQsIGNyZWF0aW9uX3NvdXJjZVxuICAgICAgRlJPTSBwaXBlbGluZXNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgKSxcbiAgICBhY3RpdmUgQVMgKFxuICAgICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkLCBvcmdfaWRcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN0YWdlX25hbWUgPSAnJyBBTkQgcnVucyA+IDBcbiAgICApLFxuICAgIHRyYWNrZWQgQVMgKFxuICAgICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgKVxuICAgIFNFTEVDVFxuICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHNjb3BlZCk6OmludCBBUyB0b3RhbF9waXBlbGluZXMsXG4gICAgICAoU0VMRUNUIENPVU5UKCopIEZST00gYWN0aXZlKTo6aW50IEFTIGFjdGl2ZV9waXBlbGluZXMsXG4gICAgICAoU0VMRUNUIENPVU5UKERJU1RJTkNUIG9yZ19pZCkgRlJPTSBhY3RpdmUpOjppbnQgQVMgYWN0aXZlX3RlYW1zLFxuICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHRyYWNrZWQpOjppbnQgQVMgZGVwbG95X3RyYWNrZWQsXG4gICAgICAoU0VMRUNUIENPQUxFU0NFKGpzb25iX29iamVjdF9hZ2coQ09BTEVTQ0UoY3JlYXRpb25fc291cmNlLCAndW5rbm93bicpLCBuKSwgJ3t9Jzo6anNvbmIpXG4gICAgICAgICBGUk9NIChTRUxFQ1QgY3JlYXRpb25fc291cmNlLCBDT1VOVCgqKTo6aW50IEFTIG4gRlJPTSBzY29wZWQgR1JPVVAgQlkgY3JlYXRpb25fc291cmNlKSBzXG4gICAgICApIEFTIGJ5X3NvdXJjZVxuICBgKSk7XG4gIGNvbnN0IHIgPSByb3dzT2Yocm93cylbMF0gPz8ge307XG4gIGNvbnN0IGNyZWF0ZWQgPSBudW0oci50b3RhbF9waXBlbGluZXMpO1xuICByZXR1cm4ge1xuICAgIHRvdGFsUGlwZWxpbmVzOiBjcmVhdGVkLFxuICAgIGFjdGl2ZVBpcGVsaW5lczogbnVtKHIuYWN0aXZlX3BpcGVsaW5lcyksXG4gICAgYWN0aXZlVGVhbXM6IE1hdGgubWF4KDEsIG51bShyLmFjdGl2ZV90ZWFtcykpLFxuICAgIGRlcGxveVRyYWNrZWRQaXBlbGluZXM6IG51bShyLmRlcGxveV90cmFja2VkKSxcbiAgICBieVNvdXJjZTogKHIuYnlfc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pID8/IHt9LFxuICAgIC8vIE9ubHkgd2hlbiB0aGUgT1JHIGNvbmZpZ3VyZWQgdGhlIGFzc3VtcHRpb24g4oCUIGEgcGxhdGZvcm0tc3VwcGxpZWQgbnVtYmVyXG4gICAgLy8gaGVyZSB3b3VsZCBiZSB0aGUgcGxhdGZvcm0gbWFya2luZyBpdHMgb3duIGhvbWV3b3JrLlxuICAgIGVzdGltYXRlZE1pbnV0ZXNTYXZlZDogdGltZVNhdmVkTWludXRlcyAmJiB0aW1lU2F2ZWRNaW51dGVzID4gMCA/IGNyZWF0ZWQgKiB0aW1lU2F2ZWRNaW51dGVzIDogbnVsbCxcbiAgfTtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSdzIGZhaWx1cmUgc3RyZWFrIGFuZCBsYXN0IHN1Y2Nlc3NmdWwgZGF5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0cmVha1JvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEZhaWx1cmVzIGluIHRoZSB0cmFpbGluZyBydW4gb2YgZGF5cyBvbiB3aGljaCBOT1RISU5HIHN1Y2NlZWRlZC5cbiAgICpcbiAgICogQSBMT1dFUiBCT1VORCwgYW5kIGRlbGliZXJhdGVseSBzby4gVGhlIHJvbGx1cCBpcyBwZXIgZGF5LCBzbyB3aXRoaW4gdGhlIG1vc3RcbiAgICogcmVjZW50IGRheSB0aGF0IGRpZCBoYXZlIGEgc3VjY2VzcyB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGV0aGVyIHRoZSBmYWlsdXJlc1xuICAgKiBjYW1lIGJlZm9yZSBvciBhZnRlciBpdCDigJQgdGhhdCBkYXkgaXMgZXhjbHVkZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZCBhdC4gV2hhdFxuICAgKiBzdXJ2aXZlcyBpcyBhIHJ1biBvZiBmYWlsdXJlcyB3aXRoIG5vIHN1Y2Nlc3MgYW55d2hlcmUgYmV0d2VlbiB0aGVtLCB3aGljaCBpc1xuICAgKiBleGFjdGx5IHRoZSBjbGFpbSB0aGUgZmluZGluZyBtYWtlcy5cbiAgICovXG4gIGNvbnNlY3V0aXZlRmFpbHVyZXM6IG51bWJlcjtcbiAgLyoqIFRoZSBsYXN0IGRheSB3aXRoIGF0IGxlYXN0IG9uZSBzdWNjZXNzLCBvciBudWxsIHdpdGhpbiB0aGUgbG9va2JhY2suICovXG4gIGxhc3RTdWNjZXNzQXQ6IERhdGUgfCBudWxsO1xufVxuXG4vKipcbiAqIEZhaWx1cmUgc3RyZWFrcyBhbmQgbGFzdC1zdWNjZXNzIGRhdGVzLCBmb3IgdGhlIG5lZWRzLWF0dGVudGlvbiBydWxlcy5cbiAqXG4gKiBSZWFkcyB0aGUgZGFpbHkgcm9sbHVwLCBub3QgYHBpcGVsaW5lX2V2ZW50c2Ag4oCUIHRoZSBzYW1lIHJlYXNvbiBhcyBldmVyeXRoaW5nXG4gKiBlbHNlIGhlcmU6IGEgc3RyZWFrIHRoYXQgZW5kZWQgdGhyZWUgd2Vla3MgYWdvIG11c3Qgc3RpbGwgYmUgcmVhZGFibGUgYWZ0ZXJcbiAqIHJldGVudGlvbiBoYXMgc3dlcHQgdGhlIGV2ZW50cyB0aGF0IHByb2R1Y2VkIGl0LlxuICpcbiAqIGBsb29rYmFja0RheXNgIGV4dGVuZHMgUEFTVCB0aGUgd2luZG93IG9uIHB1cnBvc2UuIFwiTGFzdCBzdWNjZWVkZWQgMTIgZGF5cyBhZ29cIlxuICogaXMgdGhlIGZpbmRpbmcgYSB3ZWVrbHkgcmVwb3J0IG1vc3QgbmVlZHMsIGFuZCBhIHF1ZXJ5IGJvdW5kZWQgYnkgYSA3LWRheSB3aW5kb3dcbiAqIGNvdWxkIG5ldmVyIHByb2R1Y2UgaXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZVN0cmVha3MoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgbG9va2JhY2tEYXlzID0gOTAsXG4pOiBQcm9taXNlPFBpcGVsaW5lU3RyZWFrUm93W10+IHtcbiAgY29uc3Qgc2luY2UgPSBuZXcgRGF0ZShuZXcgRGF0ZShzY29wZS50bykuZ2V0VGltZSgpIC0gbG9va2JhY2tEYXlzICogODZfNDAwXzAwMCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBXSVRIIGRheXMgQVMgKFxuICAgICAgU0VMRUNUIHBpcGVsaW5lX2lkLCBkYXksXG4gICAgICAgICAgICAgU1VNKHN1Y2NlZWRlZCk6OmludCBBUyBzdWNjZWVkZWQsXG4gICAgICAgICAgICAgU1VNKGZhaWxlZCk6OmludCAgICBBUyBmYWlsZWRcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2luY2V9Ojp0aW1lc3RhbXB0eiBBTkQgZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZCwgZGF5XG4gICAgKSxcbiAgICBsYXN0X29rIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgTUFYKGRheSkgQVMgbGFzdF9zdWNjZXNzX2RheVxuICAgICAgRlJPTSBkYXlzIFdIRVJFIHN1Y2NlZWRlZCA+IDBcbiAgICAgIEdST1VQIEJZIHBpcGVsaW5lX2lkXG4gICAgKVxuICAgIFNFTEVDVCBkLnBpcGVsaW5lX2lkLFxuICAgICAgICAgICBsLmxhc3Rfc3VjY2Vzc19kYXksXG4gICAgICAgICAgIENPQUxFU0NFKFNVTShkLmZhaWxlZCkgRklMVEVSIChcbiAgICAgICAgICAgICBXSEVSRSBsLmxhc3Rfc3VjY2Vzc19kYXkgSVMgTlVMTCBPUiBkLmRheSA+IGwubGFzdF9zdWNjZXNzX2RheVxuICAgICAgICAgICApLCAwKTo6aW50IEFTIHN0cmVha1xuICAgIEZST00gZGF5cyBkXG4gICAgTEVGVCBKT0lOIGxhc3Rfb2sgbCBPTiBsLnBpcGVsaW5lX2lkID0gZC5waXBlbGluZV9pZFxuICAgIEdST1VQIEJZIGQucGlwZWxpbmVfaWQsIGwubGFzdF9zdWNjZXNzX2RheVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW0oci5zdHJlYWspLFxuICAgIGxhc3RTdWNjZXNzQXQ6IHIubGFzdF9zdWNjZXNzX2RheSA/IG5ldyBEYXRlKFN0cmluZyhyLmxhc3Rfc3VjY2Vzc19kYXkpKSA6IG51bGwsXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBQaXBlbGluZXMgdGhhdCBSQU4gaW4gdGhlIHdpbmRvdyBidXQgcHJvZHVjZWQgbm8gZGVwbG95IHJvd3MuXG4gKlxuICogQSBtZWFzdXJlbWVudCBnYXAsIG5vdCBhIGZhaWx1cmUsIGFuZCB0aGUgcmVhc29uIGEgZGVwbG95bWVudC1mcmVxdWVuY3kgbnVtYmVyIGNhblxuICogYmUgcXVpZXRseSB3cm9uZzogYSBwaXBlbGluZSB3aG9zZSBzeW50aCBwcmVkYXRlcyB0aGUgYHBiLmRlcGxveXNgIHRhZ3MgZGVwbG95c1xuICogcGVyZmVjdGx5IHdlbGwgYW5kIGlzIGludmlzaWJsZSB0byBldmVyeSBET1JBIGFnZ3JlZ2F0ZS4gTm90aGluZyBlbHNlIGluIHRoZVxuICogcmVwb3J0IHdvdWxkIHNheSBzby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVudHJhY2tlZFBpcGVsaW5lcyhzY29wZTogQW5hbHl0aWNzU2NvcGUpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBhY3RpdmUgQVMgKFxuICAgICAgU0VMRUNUIHBpcGVsaW5lX2lkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdGFnZV9uYW1lID0gJydcbiAgICAgIEdST1VQIEJZIHBpcGVsaW5lX2lkXG4gICAgICBIQVZJTkcgU1VNKHJ1bnMpID4gMFxuICAgICksXG4gICAgdHJhY2tlZCBBUyAoXG4gICAgICBTRUxFQ1QgRElTVElOQ1QgcGlwZWxpbmVfaWRcbiAgICAgIEZST00gZG9yYV9kZXBsb3ltZW50c1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkZXBsb3llZF9hdCA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGVwbG95ZWRfYXQgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICApXG4gICAgU0VMRUNUIGEucGlwZWxpbmVfaWQgRlJPTSBhY3RpdmUgYVxuICAgIFdIRVJFIE5PVCBFWElTVFMgKFNFTEVDVCAxIEZST00gdHJhY2tlZCB0IFdIRVJFIHQucGlwZWxpbmVfaWQgPSBhLnBpcGVsaW5lX2lkKVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiBTdHJpbmcoci5waXBlbGluZV9pZCkpO1xufVxuXG4vKipcbiAqIFBpcGVsaW5lcyBydW5uaW5nIGEgcGx1Z2luIHZlcnNpb24gd2l0aCBhbiBPUEVOIENyaXRpY2FsIGV4cG9zdXJlLlxuICpcbiAqIFBvaW50LWluLXRpbWUsIG5vdCB3aW5kb3dlZDogd2hhdCBtYXR0ZXJzIGlzIHdoZXRoZXIgdGhlIHBpcGVsaW5lIGlzIHJ1bm5pbmcgb25lXG4gKiBOT1cuIEEgQ3JpdGljYWwgdGhhdCB3YXMgb3BlbiBsYXN0IFR1ZXNkYXkgYW5kIGlzIGZpeGVkIHRvZGF5IGlzIG5vdCBzb21ldGhpbmcgdG9cbiAqIHB1dCBpbiBmcm9udCBvZiBhIG1hbmFnZXIsIGFuZCBgZml4ZWRfYXRgIGlzIHdoYXQgc2F5cyBzby5cbiAqXG4gKiBUaGUgU0FNRSBsaXZlIHByZWRpY2F0ZSBhcyB0aGUgdnVsbmVyYWJpbGl0eSBzZWN0aW9uIChgbGl2ZUV4cG9zdXJlUHJlZGljYXRlYCk6XG4gKiBhbiBhY2NlcHRhbmNlIHN0aWxsIGluIGZvcmNlIGFuZCBhIGZhbHNlIHBvc2l0aXZlIGFyZSBleGNsdWRlZCDigJQgc29tZW9uZSB3aXRoXG4gKiB0aGUgYXV0aG9yaXR5IHRvIGRlY2lkZSBoYXMgZG9uZSBzbyBpbiB3cml0aW5nIOKAlCB3aGlsZSBhbiBhY2NlcHRhbmNlIFBBU1QgaXRzXG4gKiBkZWFkbGluZSBjb3VudHMgYWdhaW4sIGJlY2F1c2UgdGhhdCBpcyB3aGF0IHRoZSBkZWFkbGluZSB3YXMgZm9yLiBUaGUgdHdvXG4gKiByZWFkZXJzIG9uY2UgZGlzYWdyZWVkICh0aGlzIG9uZSBrZXB0IGZhbHNlIHBvc2l0aXZlcyBhbmQgZHJvcHBlZCBleHBpcmVkXG4gKiBhY2NlcHRhbmNlcyksIHNvIHRoZSBwYW5lbCBhbmQgdGhlIG5lZWRzLWF0dGVudGlvbiBsaXN0IGNvbnRyYWRpY3RlZCBlYWNoIG90aGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VnVsbmVyYWJsZVBpcGVsaW5lcyhzY29wZTogQW5hbHl0aWNzU2NvcGUpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgRlJPTSBwbHVnaW5fdnVsbl9leHBvc3VyZVxuICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIGNyaXRpY2FsX2NvdW50ID4gMFxuICAgICAgQU5EICR7bGl2ZUV4cG9zdXJlUHJlZGljYXRlKG5vdyl9XG4gIGApKTtcbiAgcmV0dXJuIHJvd3NPZihyb3dzKS5tYXAoKHIpID0+IFN0cmluZyhyLnBpcGVsaW5lX2lkKSk7XG59XG5cbi8qKlxuICogV2hlbiBlYWNoIHBpcGVsaW5lIGluIHRoZSB3aW5kb3cgd2FzIGxhc3QgY2hhbmdlZC5cbiAqXG4gKiBgcGlwZWxpbmVzLnVwZGF0ZWRfYXRgLCBub3QgYW4gYXVkaXQgcXVlcnk6IHRoZSBhdWRpdCB0cmFpbCBsaXZlcyBpbiBhbm90aGVyIHN0b3JlXG4gKiB3aXRoIGl0cyBvd24gcmV0ZW50aW9uLCBhbmQgdGhlIG9uZSBmYWN0IHRoaXMgbmVlZHMg4oCUIFwid2FzIHRoaXMgdG91Y2hlZCBzaG9ydGx5XG4gKiBiZWZvcmUgaXQgYnJva2VcIiDigJQgaXMgYWxyZWFkeSBvbiB0aGUgcm93LCBkdXJhYmx5LCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGVcbiAqIGNoYW5nZSB3YXMgbWFkZSBpbi5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgc3RhdGVkIHJhdGhlciB0aGFuIGhpZGRlbjogYHVwZGF0ZWRfYXRgIG1vdmVzIGZvciBBTlkgd3JpdGUsXG4gKiBpbmNsdWRpbmcgYSByZW5hbWUuIFNvIHRoZSBmaW5kaW5nIHNheXMgXCJhZnRlciBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlXCIsIHdoaWNoIGlzXG4gKiB0cnVlIG9mIGEgcmVuYW1lIHRvbywgYW5kIGRvZXMgbm90IGNsYWltIHRvIG5hbWUgdGhlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBpcGVsaW5lQ29uZmlnQ2hhbmdlcyhzY29wZTogQW5hbHl0aWNzU2NvcGUpOiBQcm9taXNlPE1hcDxzdHJpbmcsIERhdGU+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGlkOjp0ZXh0IEFTIGlkLCB1cGRhdGVkX2F0XG4gICAgRlJPTSBwaXBlbGluZXNcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBkZWxldGVkX2F0IElTIE5VTExcbiAgICAgIEFORCB1cGRhdGVkX2F0IElTIE5PVCBOVUxMXG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxzdHJpbmcsIERhdGU+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIHtcbiAgICBjb25zdCBhdCA9IHIudXBkYXRlZF9hdCA/IG5ldyBEYXRlKFN0cmluZyhyLnVwZGF0ZWRfYXQpKSA6IG51bGw7XG4gICAgaWYgKGF0ICYmICFOdW1iZXIuaXNOYU4oYXQuZ2V0VGltZSgpKSkgb3V0LnNldChTdHJpbmcoci5pZCksIGF0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vLyDilIDilIAgSGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJvd3MgZnJvbSBhIHJhdyBgZXhlY3V0ZWAsIHdoaWNoZXZlciBzaGFwZSB0aGUgZHJpdmVyIHJldHVybmVkLiAqL1xuZnVuY3Rpb24gcm93c09mKHJlc3VsdDogdW5rbm93bik6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiByZXN1bHQgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBjb25zdCByb3dzID0gKHJlc3VsdCBhcyB7IHJvd3M/OiB1bmtub3duIH0pPy5yb3dzO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKSA/IHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IDogW107XG59XG5cbi8qKiBBIGNvdW50IGZyb20gYSBkcml2ZXIgdGhhdCBtYXkgaGFuZCBiYWNrIGEgc3RyaW5nIGZvciBhIGJpZ2ludC4gKi9cbmZ1bmN0aW9uIG51bSh2OiB1bmtub3duKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiBOdW1iZXIodiA/PyAwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiAwO1xufVxuXG5mdW5jdGlvbiBpc29Pck51bGwodjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXYpIHJldHVybiBudWxsO1xuICBjb25zdCBkID0gdiBpbnN0YW5jZW9mIERhdGUgPyB2IDogbmV3IERhdGUoU3RyaW5nKHYpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZC50b0lTT1N0cmluZygpO1xufVxuIl19
@@ -21,4 +21,4 @@ export async function invalidateOrgReports(orgId) {
21
21
  timeseriesCache.invalidatePattern(`${orgId}:*`),
22
22
  ]);
23
23
  }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvY2FjaGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFeEg7OztvQ0FHb0M7QUFDcEMsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFhO0lBQ3RELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoQixjQUFjLENBQUMsaUJBQWlCLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztRQUM5QyxlQUFlLENBQUMsaUJBQWlCLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQztLQUNoRCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHR3byByZXBvcnQgY2FjaGVzLiBBIHNlcGFyYXRlIG1vZHVsZSBiZWNhdXNlIGJvdGggdGhlIHNlcnZpY2UgKGZvclxuICogaW52YWxpZGF0aW9uKSBhbmQgdGhlIGV4dHJhY3RlZCBxdWVyeSBtb2R1bGVzICh2aWEgcnVuUmVwb3J0KSBuZWVkIHRoZW0sIGFuZCBhXG4gKiBzaGFyZWQgc2luZ2xldG9uIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBkZWZpbml0aW9uIHNpdGUuXG4gKlxuICogSW52ZW50b3J5IHJlYWRzIChwbHVnaW4gc3VtbWFyeS9kaXN0cmlidXRpb24vdmVyc2lvbnMpIGNoYW5nZSByYXJlbHkg4oCUIDUgbWluLlxuICogVGltZXNlcmllcyByZWFkcyAoZXhlY3V0aW9uL2J1aWxkIG1ldHJpY3Mgb3ZlciBhIHJhbmdlKSDigJQgMiBtaW4uXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ2FjaGVTZXJ2aWNlLCBlbnZJbnQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbmV4cG9ydCBjb25zdCBpbnZlbnRvcnlDYWNoZSA9IGNyZWF0ZUNhY2hlU2VydmljZSgncmVwb3J0OmludjonLCBlbnZJbnQoJ0NBQ0hFX1RUTF9SRVBPUlRfSU5WRU5UT1JZJywgMzAwLCB7IG1pbjogMSB9KSk7XG5leHBvcnQgY29uc3QgdGltZXNlcmllc0NhY2hlID0gY3JlYXRlQ2FjaGVTZXJ2aWNlKCdyZXBvcnQ6dHM6JywgZW52SW50KCdDQUNIRV9UVExfUkVQT1JUX1RJTUVTRVJJRVMnLCAxMjAsIHsgbWluOiAxIH0pKTtcblxuLyoqIERyb3AgZXZlcnkgY2FjaGVkIHJlcG9ydCBmb3IgYW4gb3JnIOKAlCBjYWxsZWQgYWZ0ZXIgYW4gaW5nZXN0L3dyaXRlIHRoYXRcbiAqICBjb3VsZCBjaGFuZ2UgYW55IG9mIHRoZW0uIEJvdGggY2FjaGVzIGFyZSBwYXR0ZXJuLWludmFsaWRhdGVkIGJlY2F1c2UgYVxuICogIHNpbmdsZSB3cml0ZSAoYW4gZXZlbnQsIGEgZGVwbG95IG91dGNvbWUsIGFuIGluY2lkZW50KSBjYW4gbW92ZSBpbnZlbnRvcnlcbiAqICBhbmQgdGltZXNlcmllcyBudW1iZXJzIGFsaWtlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludmFsaWRhdGVPcmdSZXBvcnRzKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGludmVudG9yeUNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKGAke29yZ0lkfToqYCksXG4gICAgdGltZXNlcmllc0NhY2hlLmludmFsaWRhdGVQYXR0ZXJuKGAke29yZ0lkfToqYCksXG4gIF0pO1xufVxuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9jYWNoZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUV4SDs7O29DQUdvQztBQUNwQyxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEtBQWE7SUFDdEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hCLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO1FBQzlDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO0tBQ2hELENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgdHdvIHJlcG9ydCBjYWNoZXMuIEEgc2VwYXJhdGUgbW9kdWxlIGJlY2F1c2UgYm90aCB0aGUgc2VydmljZSAoZm9yXG4gKiBpbnZhbGlkYXRpb24pIGFuZCB0aGUgZXh0cmFjdGVkIHF1ZXJ5IG1vZHVsZXMgKHZpYSBydW5SZXBvcnQpIG5lZWQgdGhlbSwgYW5kIGFcbiAqIHNoYXJlZCBzaW5nbGV0b24gbXVzdCBoYXZlIGV4YWN0bHkgb25lIGRlZmluaXRpb24gc2l0ZS5cbiAqXG4gKiBJbnZlbnRvcnkgcmVhZHMgKHBsdWdpbiBzdW1tYXJ5L2Rpc3RyaWJ1dGlvbi92ZXJzaW9ucykgY2hhbmdlIHJhcmVseSDigJQgNSBtaW4uXG4gKiBUaW1lc2VyaWVzIHJlYWRzIChleGVjdXRpb24vYnVpbGQgbWV0cmljcyBvdmVyIGEgcmFuZ2UpIOKAlCAyIG1pbi5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDYWNoZVNlcnZpY2UsIGVudkludCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcblxuZXhwb3J0IGNvbnN0IGludmVudG9yeUNhY2hlID0gY3JlYXRlQ2FjaGVTZXJ2aWNlKCdyZXBvcnQ6aW52OicsIGVudkludCgnQ0FDSEVfVFRMX1JFUE9SVF9JTlZFTlRPUlknLCAzMDAsIHsgbWluOiAxIH0pKTtcbmV4cG9ydCBjb25zdCB0aW1lc2VyaWVzQ2FjaGUgPSBjcmVhdGVDYWNoZVNlcnZpY2UoJ3JlcG9ydDp0czonLCBlbnZJbnQoJ0NBQ0hFX1RUTF9SRVBPUlRfVElNRVNFUklFUycsIDEyMCwgeyBtaW46IDEgfSkpO1xuXG4vKiogRHJvcCBldmVyeSBjYWNoZWQgcmVwb3J0IGZvciBhbiBvcmcg4oCUIGNhbGxlZCBhZnRlciBhbiBpbmdlc3Qvd3JpdGUgdGhhdFxuICogIGNvdWxkIGNoYW5nZSBhbnkgb2YgdGhlbS4gQm90aCBjYWNoZXMgYXJlIHBhdHRlcm4taW52YWxpZGF0ZWQgYmVjYXVzZSBhXG4gKiAgc2luZ2xlIHdyaXRlIChhbiBldmVudCwgYSBkZXBsb3kgb3V0Y29tZSwgYW4gaW5jaWRlbnQpIGNhbiBtb3ZlIGludmVudG9yeVxuICogIGFuZCB0aW1lc2VyaWVzIG51bWJlcnMgYWxpa2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52YWxpZGF0ZU9yZ1JlcG9ydHMob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgaW52ZW50b3J5Q2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oYCR7b3JnSWR9OipgKSxcbiAgICB0aW1lc2VyaWVzQ2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oYCR7b3JnSWR9OipgKSxcbiAgXSk7XG59XG4iXX0=
@@ -170,4 +170,4 @@ export async function runRollupPass(now = new Date()) {
170
170
  }
171
171
  return { days, rows };
172
172
  }
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktcm9sbHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvZGFpbHktcm9sbHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUU1Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU8sTUFBTSxDQUFDLCtCQUErQixFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELDhDQUE4QztBQUM5QyxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQU87SUFDakMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxHQUFTO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBRTVELDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLFFBQVE7SUFDUixFQUFFO0lBQ0YsaUZBQWlGO0lBQ2pGLDRFQUE0RTtJQUM1RSxtQ0FBbUM7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBOzs7Ozs7Ozs7OzRCQVU5QixRQUFRLHFCQUFxQixNQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQXFDN0MsUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQnZCLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSxJQUFJLEdBQUksTUFBMkMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLEdBQUcsR0FBUyxJQUFJLElBQUksRUFBRTtJQUN4RCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUNoRCw0RUFBNEU7SUFDNUUsd0NBQXdDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUM7WUFDSCxJQUFJLElBQUksTUFBTSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsNERBQTRELEVBQUU7Z0JBQ3hFLEdBQUcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO2FBQ3pCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQnVpbGRpbmcgYGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzYCBmcm9tIGV2ZW50cy5cbiAqXG4gKiBFdmVyeSBzZWN0aW9uIHRoYXQgc2F5cyBcInJ1bnNcIiwgXCJzdWNjZXNzIHJhdGVcIiwgXCJwOTVcIiBvciBcImJ1aWxkIG1pbnV0ZXNcIiByZWFkc1xuICogdGhlc2Ugcm93cywgc28gYSBxdWFydGVybHkgcmVwb3J0IG92ZXIgYSBidXN5IG9yZyBjb3N0cyBhIGZldyBodW5kcmVkIHJvd3NcbiAqIGluc3RlYWQgb2YgYSBmZXcgaHVuZHJlZCB0aG91c2FuZCDigJQgYW5kIGtlZXBzIHdvcmtpbmcgYWZ0ZXIgcmV0ZW50aW9uIGhhcyBzd2VwdFxuICogdGhlIGV2ZW50cyBpdCB3YXMgYnVpbHQgZnJvbS5cbiAqXG4gKiBUV08gUFJPUEVSVElFUyBUSEUgSk9CIEhBUyBUTyBIQVZFLCBhbmQgYm90aCBzaGFwZSB0aGUgY29kZTpcbiAqXG4gKiAgLSBJREVNUE9URU5UIFBFUiBEQVkuIEEgZGF5IGlzIHJlY29tcHV0ZWQgV0hPTEVTQUxFIGFuZCB1cHNlcnRlZCwgbmV2ZXJcbiAqICAgIGluY3JlbWVudGVkLiBJbmNyZW1lbnRpbmcgaXMgaG93IGEgcmVkZWxpdmVyZWQgZXZlbnQsIGEgcmV0cmllZCB0aWNrIG9yIGFcbiAqICAgIGNyYXNoZWQgaGFsZi1ydW4gc2lsZW50bHkgaW5mbGF0ZXMgYSBjb3VudCwgYW5kIGFuIGluZmxhdGVkIHN1Y2Nlc3MgcmF0ZSBpc1xuICogICAgd29yc2UgdGhhbiBhIG1pc3Npbmcgb25lIGJlY2F1c2Ugbm9ib2R5IGNhbiB0ZWxsLlxuICogIC0gUkVCVUlMRFMgQSBEQVkgV0hFTiBMQVRFIEVWRU5UUyBBUlJJVkUuIFRoZSBpbmdlc3QncyBkZWFkLWxldHRlciBxdWV1ZSBpc1xuICogICAgcmVkcml2ZW4gaG91cnMgbGF0ZXIsIHNvIHllc3RlcmRheSdzIG51bWJlcnMgbGVnaXRpbWF0ZWx5IGNoYW5nZS4gVGhlXG4gKiAgICBgY29tcHV0ZWRfYXRgIHN0YW1wIGlzIHdoYXQgbWFrZXMgdGhhdCB2aXNpYmxlIHJhdGhlciB0aGFuIG15c3RlcmlvdXMuXG4gKlxuICogVEhFIFNFVFRMRSBERUxBWSBsaXZlcyBoZXJlIHRvbzogYSBkYXkgaXMgb25seSByb2xsZWQgdXAgb25jZSBpdCBoYXMgYmVlbiBjbG9zZWRcbiAqIGxvbmcgZW5vdWdoIGZvciBpbi1mbGlnaHQgZXhlY3V0aW9ucyB0byBmaW5pc2guIFJvbGxpbmcgdXAgYSBkYXkgYXQgMDA6MDEgY291bnRzXG4gKiBldmVyeSBleGVjdXRpb24gc3RpbGwgcnVubmluZyBhdCBtaWRuaWdodCBhcyBuZWl0aGVyIGEgc3VjY2VzcyBub3IgYSBmYWlsdXJlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgZXJyb3JNZXNzYWdlLCBlbnZJbnQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkYWlseS1yb2xsdXAnKTtcblxuLyoqXG4gKiBIb3cgbG9uZyBhZnRlciBhIGRheSBjbG9zZXMgYmVmb3JlIGl0IGlzIHJvbGxlZCB1cCAoaG91cnMpLlxuICpcbiAqIFNpeCBieSBkZWZhdWx0LCBtYXRjaGluZyB0aGUgcmVwb3J0IHNjaGVkdWxlcidzIG93biBzZXR0bGUgZGVsYXk6IGJvdGggZXhpc3QgZm9yXG4gKiB0aGUgc2FtZSByZWFzb24sIGFuZCBhIHJvbGx1cCB0aGF0IGxhZ2dlZCB0aGUgcmVwb3J0IHdvdWxkIG1ha2UgYSBzY2hlZHVsZWRcbiAqIHJlcG9ydCByZWFkIGEgaGFsZi1idWlsdCBkYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb2xsdXBTZXR0bGVIb3VycygpOiBudW1iZXIge1xuICByZXR1cm4gZW52SW50KCdSRVBPUlRJTkdfUk9MTFVQX1NFVFRMRV9IT1VSUycsIDYsIHsgbWluOiAwIH0pO1xufVxuXG4vKiogUm93cyBwZXIgcmVidWlsZCBwYXNzLiBCb3VuZHMgdGhlIHN0YXRlbWVudCwgbm90IHRoZSBiYWNrbG9nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvbGx1cEJhdGNoRGF5cygpOiBudW1iZXIge1xuICByZXR1cm4gZW52SW50KCdSRVBPUlRJTkdfUk9MTFVQX0JBVENIX0RBWVMnLCA3LCB7IG1pbjogMSB9KTtcbn1cblxuLyoqIFRoZSBVVEMgbWlkbmlnaHQgdGhhdCBzdGFydHMgYGRgJ3MgZGF5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV0Y0RheVN0YXJ0KGQ6IERhdGUpOiBEYXRlIHtcbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0RhdGUoKSkpO1xufVxuXG4vKipcbiAqIFJlYnVpbGQgdGhlIHJvbGx1cCByb3dzIGZvciBvbmUgVVRDIGRheSwgZm9yIGV2ZXJ5IG9yZyB0aGF0IGhhZCBhY3Rpdml0eS5cbiAqXG4gKiBPTkUgc3RhdGVtZW50LCBjb21wdXRlZCBlbnRpcmVseSBpbiBQb3N0Z3Jlcy4gRGVsaWJlcmF0ZWx5IG5vdCBcInNlbGVjdCB0aGVcbiAqIGV2ZW50cywgYWdncmVnYXRlIGluIE5vZGUsIHdyaXRlIHRoZSByb3dzXCI6IHRoZSB3aG9sZSBwb2ludCBvZiB0aGUgcm9sbHVwIGlzIHRvXG4gKiBhdm9pZCBtb3ZpbmcgYSBkYXkncyBldmVudHMgYWNyb3NzIHRoZSB3aXJlLCBhbmQgYSBqb2IgdGhhdCBkaWQgaXQgdG8gQlVJTEQgdGhlXG4gKiByb2xsdXAgd291bGQganVzdCBtb3ZlIHRoZSBjb3N0IHJhdGhlciB0aGFuIHJlbW92ZSBpdC5cbiAqXG4gKiBQZXJjZW50aWxlcyB1c2UgYFBFUkNFTlRJTEVfQ09OVGAsIHdoaWNoIGlzIHRoZSBzYW1lIGZ1bmN0aW9uIHRoZSBvbi1kZW1hbmRcbiAqIHF1ZXJpZXMgdXNlIOKAlCBzbyBhIHJvbGx1cC1iYWNrZWQgbnVtYmVyIGFuZCBhIGxpdmUgbnVtYmVyIGFncmVlIHJhdGhlciB0aGFuXG4gKiBkaWZmZXJpbmcgYnkgYW4gaW50ZXJwb2xhdGlvbiBydWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZERheShkYXk6IERhdGUpOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBkYXlTdGFydCA9IHV0Y0RheVN0YXJ0KGRheSk7XG4gIGNvbnN0IGRheUVuZCA9IG5ldyBEYXRlKGRheVN0YXJ0LmdldFRpbWUoKSArIDI0ICogMzYwMF8wMDApO1xuXG4gIC8vIFRXTyBHUkFJTlMsIG9uZSBzY2FuLCBhbmQgbm8gR1JPVVBJTkcgU0VUUyBuZWVkZWQ6IGEgUElQRUxJTkUgZXZlbnQgY2Fycmllc1xuICAvLyBubyBzdGFnZSBuYW1lLCBzbyBpdCBjb2xsYXBzZXMgdG8gdGhlIGAnJ2AgcGlwZWxpbmUtbGV2ZWwgcm93LCBhbmQgYSBTVEFHRVxuICAvLyBldmVudCBsYW5kcyBvbiBpdHMgb3duIHN0YWdlIHJvdy4gVGhlIGV2ZW50IHNoYXBlIGdpdmVzIHRoZSBoaWVyYXJjaHkgZm9yXG4gIC8vIGZyZWUuXG4gIC8vXG4gIC8vIENURXMgcmF0aGVyIHRoYW4gd2luZG93IGZ1bmN0aW9ucywgYmVjYXVzZSBgUEVSQ0VOVElMRV9DT05UYCBpcyBhbiBvcmRlcmVkLXNldFxuICAvLyBhZ2dyZWdhdGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGEgd2luZG93IGZ1bmN0aW9uIGF0IGFsbCDigJQgdGhlIHNoYXBlIHRoYXRcbiAgLy8gbG9va3MgbmF0dXJhbCBoZXJlIGRvZXMgbm90IHJ1bi5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBldiBBUyAoXG4gICAgICBTRUxFQ1RcbiAgICAgICAgb3JnX2lkLFxuICAgICAgICBwaXBlbGluZV9pZDo6dGV4dCBBUyBwaXBlbGluZV9pZCxcbiAgICAgICAgQ09BTEVTQ0Uoc3RhZ2VfbmFtZSwgJycpIEFTIHN0YWdlX25hbWUsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgZmFpbHVyZV9jYXRlZ29yeSxcbiAgICAgICAgZHVyYXRpb25fbXNcbiAgICAgIEZST00gcGlwZWxpbmVfZXZlbnRzXG4gICAgICBXSEVSRSBjcmVhdGVkX2F0ID49ICR7ZGF5U3RhcnR9IEFORCBjcmVhdGVkX2F0IDwgJHtkYXlFbmR9XG4gICAgICAgIEFORCBwaXBlbGluZV9pZCBJUyBOT1QgTlVMTFxuICAgICAgICBBTkQgZXZlbnRfdHlwZSBJTiAoJ1BJUEVMSU5FJywgJ1NUQUdFJylcbiAgICApLFxuICAgIGNhdHMgQVMgKFxuICAgICAgU0VMRUNUIG9yZ19pZCwgcGlwZWxpbmVfaWQsIHN0YWdlX25hbWUsXG4gICAgICAgICAgICAganNvbmJfb2JqZWN0X2FnZyhmYWlsdXJlX2NhdGVnb3J5LCBuKSBBUyBmYWlsdXJlc19ieV9jYXRlZ29yeVxuICAgICAgRlJPTSAoXG4gICAgICAgIFNFTEVDVCBvcmdfaWQsIHBpcGVsaW5lX2lkLCBzdGFnZV9uYW1lLCBmYWlsdXJlX2NhdGVnb3J5LCBDT1VOVCgqKTo6aW50IEFTIG5cbiAgICAgICAgRlJPTSBldlxuICAgICAgICBXSEVSRSBmYWlsdXJlX2NhdGVnb3J5IElTIE5PVCBOVUxMXG4gICAgICAgIEdST1VQIEJZIDEsIDIsIDMsIDRcbiAgICAgICkgdFxuICAgICAgR1JPVVAgQlkgMSwgMiwgM1xuICAgICksXG4gICAgYWdnIEFTIChcbiAgICAgIFNFTEVDVFxuICAgICAgICBvcmdfaWQsIHBpcGVsaW5lX2lkLCBzdGFnZV9uYW1lLFxuICAgICAgICBDT1VOVCgqKTo6aW50IEFTIHJ1bnMsXG4gICAgICAgIENPVU5UKCopIEZJTFRFUiAoV0hFUkUgc3RhdHVzIElOICgnU1VDQ0VFREVEJywgJ1NVQ0NFU1MnKSk6OmludCBBUyBzdWNjZWVkZWQsXG4gICAgICAgIENPVU5UKCopIEZJTFRFUiAoV0hFUkUgc3RhdHVzIElOICgnRkFJTEVEJywgJ0ZBSUxVUkUnLCAnRVJST1InLCAnVElNRURfT1VUJykpOjppbnQgQVMgZmFpbGVkLFxuICAgICAgICAtLSBOVUxMIGR1cmF0aW9ucyBhcmUgaWdub3JlZCBieSBQRVJDRU5USUxFX0NPTlQsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudDogYW5cbiAgICAgICAgLS0gZXZlbnQgd2l0aCBubyBkdXJhdGlvbiBoYXMgbm8gdGltaW5nIHRvIGNvbnRyaWJ1dGUsIGFuZCB0cmVhdGluZyBpdCBhc1xuICAgICAgICAtLSB6ZXJvIHdvdWxkIGRyYWcgZXZlcnkgcGVyY2VudGlsZSBkb3duLlxuICAgICAgICBQRVJDRU5USUxFX0NPTlQoMC41KSBXSVRISU4gR1JPVVAgKE9SREVSIEJZIGR1cmF0aW9uX21zKTo6aW50IEFTIHA1MF9tcyxcbiAgICAgICAgUEVSQ0VOVElMRV9DT05UKDAuOSkgV0lUSElOIEdST1VQIChPUkRFUiBCWSBkdXJhdGlvbl9tcyk6OmludCBBUyBwOTBfbXMsXG4gICAgICAgIFBFUkNFTlRJTEVfQ09OVCgwLjk1KSBXSVRISU4gR1JPVVAgKE9SREVSIEJZIGR1cmF0aW9uX21zKTo6aW50IEFTIHA5NV9tcyxcbiAgICAgICAgKFNVTShDT0FMRVNDRShkdXJhdGlvbl9tcywgMCkpIC8gMTAwMCk6OmludCBBUyBidWlsZF9zZWNvbmRzXG4gICAgICBGUk9NIGV2XG4gICAgICBHUk9VUCBCWSAxLCAyLCAzXG4gICAgKVxuICAgIElOU0VSVCBJTlRPIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIChcbiAgICAgIG9yZ19pZCwgZGF5LCBwaXBlbGluZV9pZCwgc3RhZ2VfbmFtZSxcbiAgICAgIHJ1bnMsIHN1Y2NlZWRlZCwgZmFpbGVkLCBmYWlsdXJlc19ieV9jYXRlZ29yeSxcbiAgICAgIHA1MF9tcywgcDkwX21zLCBwOTVfbXMsIGJ1aWxkX3NlY29uZHMsIGNvbXB1dGVkX2F0XG4gICAgKVxuICAgIFNFTEVDVFxuICAgICAgYS5vcmdfaWQsICR7ZGF5U3RhcnR9Ojp0aW1lc3RhbXB0eiwgYS5waXBlbGluZV9pZCwgYS5zdGFnZV9uYW1lLFxuICAgICAgYS5ydW5zLCBhLnN1Y2NlZWRlZCwgYS5mYWlsZWQsXG4gICAgICBDT0FMRVNDRShjLmZhaWx1cmVzX2J5X2NhdGVnb3J5LCAne30nOjpqc29uYiksXG4gICAgICBhLnA1MF9tcywgYS5wOTBfbXMsIGEucDk1X21zLCBhLmJ1aWxkX3NlY29uZHMsIE5PVygpXG4gICAgRlJPTSBhZ2cgYVxuICAgIExFRlQgSk9JTiBjYXRzIGNcbiAgICAgIE9OIGMub3JnX2lkID0gYS5vcmdfaWQgQU5EIGMucGlwZWxpbmVfaWQgPSBhLnBpcGVsaW5lX2lkIEFORCBjLnN0YWdlX25hbWUgPSBhLnN0YWdlX25hbWVcbiAgICBPTiBDT05GTElDVCAob3JnX2lkLCBkYXksIHBpcGVsaW5lX2lkLCBzdGFnZV9uYW1lKSBETyBVUERBVEUgU0VUXG4gICAgICBydW5zID0gZXhjbHVkZWQucnVucyxcbiAgICAgIHN1Y2NlZWRlZCA9IGV4Y2x1ZGVkLnN1Y2NlZWRlZCxcbiAgICAgIGZhaWxlZCA9IGV4Y2x1ZGVkLmZhaWxlZCxcbiAgICAgIGZhaWx1cmVzX2J5X2NhdGVnb3J5ID0gZXhjbHVkZWQuZmFpbHVyZXNfYnlfY2F0ZWdvcnksXG4gICAgICBwNTBfbXMgPSBleGNsdWRlZC5wNTBfbXMsXG4gICAgICBwOTBfbXMgPSBleGNsdWRlZC5wOTBfbXMsXG4gICAgICBwOTVfbXMgPSBleGNsdWRlZC5wOTVfbXMsXG4gICAgICBidWlsZF9zZWNvbmRzID0gZXhjbHVkZWQuYnVpbGRfc2Vjb25kcyxcbiAgICAgIGNvbXB1dGVkX2F0ID0gZXhjbHVkZWQuY29tcHV0ZWRfYXRcbiAgYCkpO1xuICBjb25zdCByb3dzID0gKHJlc3VsdCBhcyB1bmtub3duIGFzIHsgcm93Q291bnQ/OiBudW1iZXIgfSkucm93Q291bnQgPz8gMDtcbiAgbG9nZ2VyLmRlYnVnKCdSb2xsZWQgdXAgYSBkYXknLCB7IGRheTogZGF5U3RhcnQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCksIHJvd3MgfSk7XG4gIHJldHVybiByb3dzO1xufVxuXG4vKipcbiAqIE9uZSByb2xsdXAgcGFzczogcmVidWlsZCB0aGUgbW9zdCByZWNlbnQgc2V0dGxlZCBkYXlzLlxuICpcbiAqIFJlYnVpbGRpbmcgYSBXSU5ET1cgcmF0aGVyIHRoYW4gb25seSB0aGUgbmV3ZXN0IGRheSBpcyB3aGF0IGhhbmRsZXMgbGF0ZVxuICogZXZlbnRzOiB0aGUgZGVhZC1sZXR0ZXIgcmVkcml2ZSBsYW5kcyBldmVudHMgZm9yIGRheXMgYWxyZWFkeSByb2xsZWQgdXAsIGFuZCBhXG4gKiBqb2IgdGhhdCBvbmx5IGV2ZXIgYnVpbHQgXCJ5ZXN0ZXJkYXlcIiB3b3VsZCBsZWF2ZSB0aG9zZSBkYXlzIHBlcm1hbmVudGx5IHdyb25nLlxuICogUmVjb21wdXRpbmcgYSB3ZWVrIGNvc3RzIG9uZSBzdGF0ZW1lbnQgcGVyIGRheSBhbmQgbWFrZXMgbGF0ZW5lc3Mgc2VsZi1oZWFsaW5nXG4gKiBpbnN0ZWFkIG9mIGEgc3VwcG9ydCBxdWVzdGlvbi5cbiAqXG4gKiBOZXZlciB0aHJvd3Mg4oCUIHRoZSBjYWxsZXIgaXMgYSBzY2hlZHVsZXIgdGljaywgYW5kIGEgZmFpbGVkIHBhc3MgbXVzdCByZXRyeSBuZXh0XG4gKiB0aWNrIHJhdGhlciB0aGFuIHRha2UgdGhlIHNlcnZpY2UncyBiYWNrZ3JvdW5kIHdvcmsgZG93biB3aXRoIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUm9sbHVwUGFzcyhub3c6IERhdGUgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTx7IGRheXM6IG51bWJlcjsgcm93czogbnVtYmVyIH0+IHtcbiAgY29uc3Qgc2V0dGxlTXMgPSByb2xsdXBTZXR0bGVIb3VycygpICogMzYwMF8wMDA7XG4gIC8vIFRoZSBuZXdlc3QgZGF5IHRoYXQgaGFzIHNldHRsZWQuIEEgZGF5IGlzIG9ubHkgYnVpbHQgb25jZSBldmVyeXRoaW5nIHRoYXRcbiAgLy8gc3RhcnRlZCBpbiBpdCBoYXMgaGFkIHRpbWUgdG8gZmluaXNoLlxuICBjb25zdCBuZXdlc3QgPSB1dGNEYXlTdGFydChuZXcgRGF0ZShub3cuZ2V0VGltZSgpIC0gc2V0dGxlTXMpKTtcbiAgbGV0IHJvd3MgPSAwO1xuICBsZXQgZGF5cyA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm9sbHVwQmF0Y2hEYXlzKCk7IGkrKykge1xuICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKG5ld2VzdC5nZXRUaW1lKCkgLSBpICogMjQgKiAzNjAwXzAwMCk7XG4gICAgdHJ5IHtcbiAgICAgIHJvd3MgKz0gYXdhaXQgcmVidWlsZERheShkYXkpO1xuICAgICAgZGF5cysrO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1JvbGx1cCBwYXNzIGZhaWxlZCBmb3IgYSBkYXk7IGl0IHdpbGwgYmUgcmV0cmllZCBuZXh0IHBhc3MnLCB7XG4gICAgICAgIGRheTogZGF5LnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApLFxuICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgZGF5cywgcm93cyB9O1xufVxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktcm9sbHVwLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9kYWlseS1yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTVDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxNQUFNLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsOENBQThDO0FBQzlDLE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBTztJQUNqQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUFDLEdBQVM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFFNUQsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsUUFBUTtJQUNSLEVBQUU7SUFDRixpRkFBaUY7SUFDakYsNEVBQTRFO0lBQzVFLG1DQUFtQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUE7Ozs7Ozs7Ozs7NEJBVTlCLFFBQVEscUJBQXFCLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBcUM3QyxRQUFROzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCdkIsQ0FBQyxDQUFDLENBQUM7SUFDSixNQUFNLElBQUksR0FBSSxNQUEyQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFDeEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsR0FBRyxHQUFTLElBQUksSUFBSSxFQUFFO0lBQ3hELE1BQU0sUUFBUSxHQUFHLGlCQUFpQixFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQ2hELDRFQUE0RTtJQUM1RSx3Q0FBd0M7SUFDeEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQztZQUNILElBQUksSUFBSSxNQUFNLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLEVBQUUsQ0FBQztRQUNULENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyw0REFBNEQsRUFBRTtnQkFDeEUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkMsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7YUFDekIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBCdWlsZGluZyBgZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNgIGZyb20gZXZlbnRzLlxuICpcbiAqIEV2ZXJ5IHNlY3Rpb24gdGhhdCBzYXlzIFwicnVuc1wiLCBcInN1Y2Nlc3MgcmF0ZVwiLCBcInA5NVwiIG9yIFwiYnVpbGQgbWludXRlc1wiIHJlYWRzXG4gKiB0aGVzZSByb3dzLCBzbyBhIHF1YXJ0ZXJseSByZXBvcnQgb3ZlciBhIGJ1c3kgb3JnIGNvc3RzIGEgZmV3IGh1bmRyZWQgcm93c1xuICogaW5zdGVhZCBvZiBhIGZldyBodW5kcmVkIHRob3VzYW5kIOKAlCBhbmQga2VlcHMgd29ya2luZyBhZnRlciByZXRlbnRpb24gaGFzIHN3ZXB0XG4gKiB0aGUgZXZlbnRzIGl0IHdhcyBidWlsdCBmcm9tLlxuICpcbiAqIFRXTyBQUk9QRVJUSUVTIFRIRSBKT0IgSEFTIFRPIEhBVkUsIGFuZCBib3RoIHNoYXBlIHRoZSBjb2RlOlxuICpcbiAqICAtIElERU1QT1RFTlQgUEVSIERBWS4gQSBkYXkgaXMgcmVjb21wdXRlZCBXSE9MRVNBTEUgYW5kIHVwc2VydGVkLCBuZXZlclxuICogICAgaW5jcmVtZW50ZWQuIEluY3JlbWVudGluZyBpcyBob3cgYSByZWRlbGl2ZXJlZCBldmVudCwgYSByZXRyaWVkIHRpY2sgb3IgYVxuICogICAgY3Jhc2hlZCBoYWxmLXJ1biBzaWxlbnRseSBpbmZsYXRlcyBhIGNvdW50LCBhbmQgYW4gaW5mbGF0ZWQgc3VjY2VzcyByYXRlIGlzXG4gKiAgICB3b3JzZSB0aGFuIGEgbWlzc2luZyBvbmUgYmVjYXVzZSBub2JvZHkgY2FuIHRlbGwuXG4gKiAgLSBSRUJVSUxEUyBBIERBWSBXSEVOIExBVEUgRVZFTlRTIEFSUklWRS4gVGhlIGluZ2VzdCdzIGRlYWQtbGV0dGVyIHF1ZXVlIGlzXG4gKiAgICByZWRyaXZlbiBob3VycyBsYXRlciwgc28geWVzdGVyZGF5J3MgbnVtYmVycyBsZWdpdGltYXRlbHkgY2hhbmdlLiBUaGVcbiAqICAgIGBjb21wdXRlZF9hdGAgc3RhbXAgaXMgd2hhdCBtYWtlcyB0aGF0IHZpc2libGUgcmF0aGVyIHRoYW4gbXlzdGVyaW91cy5cbiAqXG4gKiBUSEUgU0VUVExFIERFTEFZIGxpdmVzIGhlcmUgdG9vOiBhIGRheSBpcyBvbmx5IHJvbGxlZCB1cCBvbmNlIGl0IGhhcyBiZWVuIGNsb3NlZFxuICogbG9uZyBlbm91Z2ggZm9yIGluLWZsaWdodCBleGVjdXRpb25zIHRvIGZpbmlzaC4gUm9sbGluZyB1cCBhIGRheSBhdCAwMDowMSBjb3VudHNcbiAqIGV2ZXJ5IGV4ZWN1dGlvbiBzdGlsbCBydW5uaW5nIGF0IG1pZG5pZ2h0IGFzIG5laXRoZXIgYSBzdWNjZXNzIG5vciBhIGZhaWx1cmUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBlcnJvck1lc3NhZ2UsIGVudkludCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2RhaWx5LXJvbGx1cCcpO1xuXG4vKipcbiAqIEhvdyBsb25nIGFmdGVyIGEgZGF5IGNsb3NlcyBiZWZvcmUgaXQgaXMgcm9sbGVkIHVwIChob3VycykuXG4gKlxuICogU2l4IGJ5IGRlZmF1bHQsIG1hdGNoaW5nIHRoZSByZXBvcnQgc2NoZWR1bGVyJ3Mgb3duIHNldHRsZSBkZWxheTogYm90aCBleGlzdCBmb3JcbiAqIHRoZSBzYW1lIHJlYXNvbiwgYW5kIGEgcm9sbHVwIHRoYXQgbGFnZ2VkIHRoZSByZXBvcnQgd291bGQgbWFrZSBhIHNjaGVkdWxlZFxuICogcmVwb3J0IHJlYWQgYSBoYWxmLWJ1aWx0IGRheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvbGx1cFNldHRsZUhvdXJzKCk6IG51bWJlciB7XG4gIHJldHVybiBlbnZJbnQoJ1JFUE9SVElOR19ST0xMVVBfU0VUVExFX0hPVVJTJywgNiwgeyBtaW46IDAgfSk7XG59XG5cbi8qKiBSb3dzIHBlciByZWJ1aWxkIHBhc3MuIEJvdW5kcyB0aGUgc3RhdGVtZW50LCBub3QgdGhlIGJhY2tsb2cuICovXG5leHBvcnQgZnVuY3Rpb24gcm9sbHVwQmF0Y2hEYXlzKCk6IG51bWJlciB7XG4gIHJldHVybiBlbnZJbnQoJ1JFUE9SVElOR19ST0xMVVBfQkFUQ0hfREFZUycsIDcsIHsgbWluOiAxIH0pO1xufVxuXG4vKiogVGhlIFVUQyBtaWRuaWdodCB0aGF0IHN0YXJ0cyBgZGAncyBkYXkuICovXG5leHBvcnQgZnVuY3Rpb24gdXRjRGF5U3RhcnQoZDogRGF0ZSk6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRGF0ZSgpKSk7XG59XG5cbi8qKlxuICogUmVidWlsZCB0aGUgcm9sbHVwIHJvd3MgZm9yIG9uZSBVVEMgZGF5LCBmb3IgZXZlcnkgb3JnIHRoYXQgaGFkIGFjdGl2aXR5LlxuICpcbiAqIE9ORSBzdGF0ZW1lbnQsIGNvbXB1dGVkIGVudGlyZWx5IGluIFBvc3RncmVzLiBEZWxpYmVyYXRlbHkgbm90IFwic2VsZWN0IHRoZVxuICogZXZlbnRzLCBhZ2dyZWdhdGUgaW4gTm9kZSwgd3JpdGUgdGhlIHJvd3NcIjogdGhlIHdob2xlIHBvaW50IG9mIHRoZSByb2xsdXAgaXMgdG9cbiAqIGF2b2lkIG1vdmluZyBhIGRheSdzIGV2ZW50cyBhY3Jvc3MgdGhlIHdpcmUsIGFuZCBhIGpvYiB0aGF0IGRpZCBpdCB0byBCVUlMRCB0aGVcbiAqIHJvbGx1cCB3b3VsZCBqdXN0IG1vdmUgdGhlIGNvc3QgcmF0aGVyIHRoYW4gcmVtb3ZlIGl0LlxuICpcbiAqIFBlcmNlbnRpbGVzIHVzZSBgUEVSQ0VOVElMRV9DT05UYCwgd2hpY2ggaXMgdGhlIHNhbWUgZnVuY3Rpb24gdGhlIG9uLWRlbWFuZFxuICogcXVlcmllcyB1c2Ug4oCUIHNvIGEgcm9sbHVwLWJhY2tlZCBudW1iZXIgYW5kIGEgbGl2ZSBudW1iZXIgYWdyZWUgcmF0aGVyIHRoYW5cbiAqIGRpZmZlcmluZyBieSBhbiBpbnRlcnBvbGF0aW9uIHJ1bGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWJ1aWxkRGF5KGRheTogRGF0ZSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGRheVN0YXJ0ID0gdXRjRGF5U3RhcnQoZGF5KTtcbiAgY29uc3QgZGF5RW5kID0gbmV3IERhdGUoZGF5U3RhcnQuZ2V0VGltZSgpICsgMjQgKiAzNjAwXzAwMCk7XG5cbiAgLy8gVFdPIEdSQUlOUywgb25lIHNjYW4sIGFuZCBubyBHUk9VUElORyBTRVRTIG5lZWRlZDogYSBQSVBFTElORSBldmVudCBjYXJyaWVzXG4gIC8vIG5vIHN0YWdlIG5hbWUsIHNvIGl0IGNvbGxhcHNlcyB0byB0aGUgYCcnYCBwaXBlbGluZS1sZXZlbCByb3csIGFuZCBhIFNUQUdFXG4gIC8vIGV2ZW50IGxhbmRzIG9uIGl0cyBvd24gc3RhZ2Ugcm93LiBUaGUgZXZlbnQgc2hhcGUgZ2l2ZXMgdGhlIGhpZXJhcmNoeSBmb3JcbiAgLy8gZnJlZS5cbiAgLy9cbiAgLy8gQ1RFcyByYXRoZXIgdGhhbiB3aW5kb3cgZnVuY3Rpb25zLCBiZWNhdXNlIGBQRVJDRU5USUxFX0NPTlRgIGlzIGFuIG9yZGVyZWQtc2V0XG4gIC8vIGFnZ3JlZ2F0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSB3aW5kb3cgZnVuY3Rpb24gYXQgYWxsIOKAlCB0aGUgc2hhcGUgdGhhdFxuICAvLyBsb29rcyBuYXR1cmFsIGhlcmUgZG9lcyBub3QgcnVuLlxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBXSVRIIGV2IEFTIChcbiAgICAgIFNFTEVDVFxuICAgICAgICBvcmdfaWQsXG4gICAgICAgIHBpcGVsaW5lX2lkOjp0ZXh0IEFTIHBpcGVsaW5lX2lkLFxuICAgICAgICBDT0FMRVNDRShzdGFnZV9uYW1lLCAnJykgQVMgc3RhZ2VfbmFtZSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBmYWlsdXJlX2NhdGVnb3J5LFxuICAgICAgICBkdXJhdGlvbl9tc1xuICAgICAgRlJPTSBwaXBlbGluZV9ldmVudHNcbiAgICAgIFdIRVJFIGNyZWF0ZWRfYXQgPj0gJHtkYXlTdGFydH0gQU5EIGNyZWF0ZWRfYXQgPCAke2RheUVuZH1cbiAgICAgICAgQU5EIHBpcGVsaW5lX2lkIElTIE5PVCBOVUxMXG4gICAgICAgIEFORCBldmVudF90eXBlIElOICgnUElQRUxJTkUnLCAnU1RBR0UnKVxuICAgICksXG4gICAgY2F0cyBBUyAoXG4gICAgICBTRUxFQ1Qgb3JnX2lkLCBwaXBlbGluZV9pZCwgc3RhZ2VfbmFtZSxcbiAgICAgICAgICAgICBqc29uYl9vYmplY3RfYWdnKGZhaWx1cmVfY2F0ZWdvcnksIG4pIEFTIGZhaWx1cmVzX2J5X2NhdGVnb3J5XG4gICAgICBGUk9NIChcbiAgICAgICAgU0VMRUNUIG9yZ19pZCwgcGlwZWxpbmVfaWQsIHN0YWdlX25hbWUsIGZhaWx1cmVfY2F0ZWdvcnksIENPVU5UKCopOjppbnQgQVMgblxuICAgICAgICBGUk9NIGV2XG4gICAgICAgIFdIRVJFIGZhaWx1cmVfY2F0ZWdvcnkgSVMgTk9UIE5VTExcbiAgICAgICAgR1JPVVAgQlkgMSwgMiwgMywgNFxuICAgICAgKSB0XG4gICAgICBHUk9VUCBCWSAxLCAyLCAzXG4gICAgKSxcbiAgICBhZ2cgQVMgKFxuICAgICAgU0VMRUNUXG4gICAgICAgIG9yZ19pZCwgcGlwZWxpbmVfaWQsIHN0YWdlX25hbWUsXG4gICAgICAgIENPVU5UKCopOjppbnQgQVMgcnVucyxcbiAgICAgICAgQ09VTlQoKikgRklMVEVSIChXSEVSRSBzdGF0dXMgSU4gKCdTVUNDRUVERUQnLCAnU1VDQ0VTUycpKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgQ09VTlQoKikgRklMVEVSIChXSEVSRSBzdGF0dXMgSU4gKCdGQUlMRUQnLCAnRkFJTFVSRScsICdFUlJPUicsICdUSU1FRF9PVVQnKSk6OmludCBBUyBmYWlsZWQsXG4gICAgICAgIC0tIE5VTEwgZHVyYXRpb25zIGFyZSBpZ25vcmVkIGJ5IFBFUkNFTlRJTEVfQ09OVCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50OiBhblxuICAgICAgICAtLSBldmVudCB3aXRoIG5vIGR1cmF0aW9uIGhhcyBubyB0aW1pbmcgdG8gY29udHJpYnV0ZSwgYW5kIHRyZWF0aW5nIGl0IGFzXG4gICAgICAgIC0tIHplcm8gd291bGQgZHJhZyBldmVyeSBwZXJjZW50aWxlIGRvd24uXG4gICAgICAgIFBFUkNFTlRJTEVfQ09OVCgwLjUpIFdJVEhJTiBHUk9VUCAoT1JERVIgQlkgZHVyYXRpb25fbXMpOjppbnQgQVMgcDUwX21zLFxuICAgICAgICBQRVJDRU5USUxFX0NPTlQoMC45KSBXSVRISU4gR1JPVVAgKE9SREVSIEJZIGR1cmF0aW9uX21zKTo6aW50IEFTIHA5MF9tcyxcbiAgICAgICAgUEVSQ0VOVElMRV9DT05UKDAuOTUpIFdJVEhJTiBHUk9VUCAoT1JERVIgQlkgZHVyYXRpb25fbXMpOjppbnQgQVMgcDk1X21zLFxuICAgICAgICAoU1VNKENPQUxFU0NFKGR1cmF0aW9uX21zLCAwKSkgLyAxMDAwKTo6aW50IEFTIGJ1aWxkX3NlY29uZHNcbiAgICAgIEZST00gZXZcbiAgICAgIEdST1VQIEJZIDEsIDIsIDNcbiAgICApXG4gICAgSU5TRVJUIElOVE8gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgKFxuICAgICAgb3JnX2lkLCBkYXksIHBpcGVsaW5lX2lkLCBzdGFnZV9uYW1lLFxuICAgICAgcnVucywgc3VjY2VlZGVkLCBmYWlsZWQsIGZhaWx1cmVzX2J5X2NhdGVnb3J5LFxuICAgICAgcDUwX21zLCBwOTBfbXMsIHA5NV9tcywgYnVpbGRfc2Vjb25kcywgY29tcHV0ZWRfYXRcbiAgICApXG4gICAgU0VMRUNUXG4gICAgICBhLm9yZ19pZCwgJHtkYXlTdGFydH06OnRpbWVzdGFtcHR6LCBhLnBpcGVsaW5lX2lkLCBhLnN0YWdlX25hbWUsXG4gICAgICBhLnJ1bnMsIGEuc3VjY2VlZGVkLCBhLmZhaWxlZCxcbiAgICAgIENPQUxFU0NFKGMuZmFpbHVyZXNfYnlfY2F0ZWdvcnksICd7fSc6Ompzb25iKSxcbiAgICAgIGEucDUwX21zLCBhLnA5MF9tcywgYS5wOTVfbXMsIGEuYnVpbGRfc2Vjb25kcywgTk9XKClcbiAgICBGUk9NIGFnZyBhXG4gICAgTEVGVCBKT0lOIGNhdHMgY1xuICAgICAgT04gYy5vcmdfaWQgPSBhLm9yZ19pZCBBTkQgYy5waXBlbGluZV9pZCA9IGEucGlwZWxpbmVfaWQgQU5EIGMuc3RhZ2VfbmFtZSA9IGEuc3RhZ2VfbmFtZVxuICAgIE9OIENPTkZMSUNUIChvcmdfaWQsIGRheSwgcGlwZWxpbmVfaWQsIHN0YWdlX25hbWUpIERPIFVQREFURSBTRVRcbiAgICAgIHJ1bnMgPSBleGNsdWRlZC5ydW5zLFxuICAgICAgc3VjY2VlZGVkID0gZXhjbHVkZWQuc3VjY2VlZGVkLFxuICAgICAgZmFpbGVkID0gZXhjbHVkZWQuZmFpbGVkLFxuICAgICAgZmFpbHVyZXNfYnlfY2F0ZWdvcnkgPSBleGNsdWRlZC5mYWlsdXJlc19ieV9jYXRlZ29yeSxcbiAgICAgIHA1MF9tcyA9IGV4Y2x1ZGVkLnA1MF9tcyxcbiAgICAgIHA5MF9tcyA9IGV4Y2x1ZGVkLnA5MF9tcyxcbiAgICAgIHA5NV9tcyA9IGV4Y2x1ZGVkLnA5NV9tcyxcbiAgICAgIGJ1aWxkX3NlY29uZHMgPSBleGNsdWRlZC5idWlsZF9zZWNvbmRzLFxuICAgICAgY29tcHV0ZWRfYXQgPSBleGNsdWRlZC5jb21wdXRlZF9hdFxuICBgKSk7XG4gIGNvbnN0IHJvd3MgPSAocmVzdWx0IGFzIHVua25vd24gYXMgeyByb3dDb3VudD86IG51bWJlciB9KS5yb3dDb3VudCA/PyAwO1xuICBsb2dnZXIuZGVidWcoJ1JvbGxlZCB1cCBhIGRheScsIHsgZGF5OiBkYXlTdGFydC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSwgcm93cyB9KTtcbiAgcmV0dXJuIHJvd3M7XG59XG5cbi8qKlxuICogT25lIHJvbGx1cCBwYXNzOiByZWJ1aWxkIHRoZSBtb3N0IHJlY2VudCBzZXR0bGVkIGRheXMuXG4gKlxuICogUmVidWlsZGluZyBhIFdJTkRPVyByYXRoZXIgdGhhbiBvbmx5IHRoZSBuZXdlc3QgZGF5IGlzIHdoYXQgaGFuZGxlcyBsYXRlXG4gKiBldmVudHM6IHRoZSBkZWFkLWxldHRlciByZWRyaXZlIGxhbmRzIGV2ZW50cyBmb3IgZGF5cyBhbHJlYWR5IHJvbGxlZCB1cCwgYW5kIGFcbiAqIGpvYiB0aGF0IG9ubHkgZXZlciBidWlsdCBcInllc3RlcmRheVwiIHdvdWxkIGxlYXZlIHRob3NlIGRheXMgcGVybWFuZW50bHkgd3JvbmcuXG4gKiBSZWNvbXB1dGluZyBhIHdlZWsgY29zdHMgb25lIHN0YXRlbWVudCBwZXIgZGF5IGFuZCBtYWtlcyBsYXRlbmVzcyBzZWxmLWhlYWxpbmdcbiAqIGluc3RlYWQgb2YgYSBzdXBwb3J0IHF1ZXN0aW9uLlxuICpcbiAqIE5ldmVyIHRocm93cyDigJQgdGhlIGNhbGxlciBpcyBhIHNjaGVkdWxlciB0aWNrLCBhbmQgYSBmYWlsZWQgcGFzcyBtdXN0IHJldHJ5IG5leHRcbiAqIHRpY2sgcmF0aGVyIHRoYW4gdGFrZSB0aGUgc2VydmljZSdzIGJhY2tncm91bmQgd29yayBkb3duIHdpdGggaXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Sb2xsdXBQYXNzKG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBQcm9taXNlPHsgZGF5czogbnVtYmVyOyByb3dzOiBudW1iZXIgfT4ge1xuICBjb25zdCBzZXR0bGVNcyA9IHJvbGx1cFNldHRsZUhvdXJzKCkgKiAzNjAwXzAwMDtcbiAgLy8gVGhlIG5ld2VzdCBkYXkgdGhhdCBoYXMgc2V0dGxlZC4gQSBkYXkgaXMgb25seSBidWlsdCBvbmNlIGV2ZXJ5dGhpbmcgdGhhdFxuICAvLyBzdGFydGVkIGluIGl0IGhhcyBoYWQgdGltZSB0byBmaW5pc2guXG4gIGNvbnN0IG5ld2VzdCA9IHV0Y0RheVN0YXJ0KG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSBzZXR0bGVNcykpO1xuICBsZXQgcm93cyA9IDA7XG4gIGxldCBkYXlzID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb2xsdXBCYXRjaERheXMoKTsgaSsrKSB7XG4gICAgY29uc3QgZGF5ID0gbmV3IERhdGUobmV3ZXN0LmdldFRpbWUoKSAtIGkgKiAyNCAqIDM2MDBfMDAwKTtcbiAgICB0cnkge1xuICAgICAgcm93cyArPSBhd2FpdCByZWJ1aWxkRGF5KGRheSk7XG4gICAgICBkYXlzKys7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIud2FybignUm9sbHVwIHBhc3MgZmFpbGVkIGZvciBhIGRheTsgaXQgd2lsbCBiZSByZXRyaWVkIG5leHQgcGFzcycsIHtcbiAgICAgICAgZGF5OiBkYXkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCksXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBkYXlzLCByb3dzIH07XG59XG4iXX0=
@@ -204,4 +204,4 @@ export async function correlateIncident(orgId, environment, openedAt, windowHour
204
204
  isNull(schema.doraDeployment.failedAt))));
205
205
  return { executionId: deploy.executionId, confidence };
206
206
  }
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXJvbGx1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2RlcGxveS1yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFxQjdDLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdEQUFnRDtBQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUUvRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFvQjtJQUNoRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztXQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7V0FDakIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO1dBQ2pCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMs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QUFDLENBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ04sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXcml0aW5nIGBkb3JhX2RlcGxveW1lbnRzYCBhdCBpbmdlc3QuXG4gKlxuICogRXZlcnkgRE9SQSBudW1iZXIgdXNlZCB0byBiZSBkZXJpdmVkIGJ5IHNjYW5uaW5nIGBwaXBlbGluZV9ldmVudHNgIHBlciByZWFkLlxuICogVHdvIHRoaW5ncyB3ZXJlIHdyb25nIHdpdGggdGhhdCwgYW5kIG9ubHkgb25lIG9mIHRoZW0gd2FzIHNwZWVkOlxuICpcbiAqICAxLiBMRUFEIFRJTUUgV0FTIERPVUJMRS1DT1VOVEVEIElOIFdBSVRJTkcuIEEgZGVwbG95IGVtaXRzIGEgU1RBR0UgZXZlbnQgYW5kXG4gKiAgICAgYW4gQUNUSU9OIGV2ZW50LCBhbmQgYm90aCBjYXJyeSB0aGUgc2FtZSByZXNvbHZlZCBjb21taXQgcmFuZ2UuIEFueVxuICogICAgIGFnZ3JlZ2F0ZSBvdmVyIGV2ZW50cyB0aGVyZWZvcmUgY291bnRlZCBvbmUgZGVwbG95J3MgbGVhZCB0aW1lIHR3aWNlIHRoZVxuICogICAgIG1vbWVudCBzb21lYm9keSBhZGRlZCB0aGUgQUNUSU9OIHJvd3MgdG8gYSBxdWVyeS4gU3RvcmluZyBpdCBvbmNlIHBlclxuICogICAgIGV4ZWN1dGlvbiBtYWtlcyB0aGF0IG1pc3Rha2UgdW5hdmFpbGFibGUgcmF0aGVyIHRoYW4gbWVyZWx5IHVubWFkZS5cbiAqICAyLiBUSEUgTlVNQkVSUyBESUQgTk9UIFNVUlZJVkUgUkVURU5USU9OLiBUaGUgc3dlZXAgcHVyZ2VzIHJhdyBldmVudHMgYnlcbiAqICAgICB0aWVyLCBzbyBhIHF1YXJ0ZXJseSByZXBvcnQgY291bGQgbm90IGJlIHJlY29tcHV0ZWQgb25jZSBpdHMgZXZlbnRzIHdlcmVcbiAqICAgICBnb25lIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoZW4gc29tZW9uZSBhc2tzIGFib3V0IGl0LlxuICpcbiAqIEEgZGVwbG95IGlzIGEgU1RBR0UgZXZlbnQgY2FycnlpbmcgYW4gYGVudmlyb25tZW50YDogdGhlIHNhbWUgcHJlZGljYXRlIHRoZVxuICogRE9SQSBxdWVyaWVzIGhhdmUgYWx3YXlzIHVzZWQsIG5vdyBhcHBsaWVkIG9uY2UgYXQgd3JpdGUgdGltZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGFuZCwgZXEsIGlzTnVsbCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHR5cGUgeyBMZWFkVGltZUdhcCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2RlcGxveS1yb2xsdXAnKTtcblxuLyoqIFRoZSBmaWVsZHMgb2YgYW4gaW5zZXJ0ZWQgZXZlbnQgcm93IHRoaXMgbW9kdWxlIG5lZWRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lDYW5kaWRhdGUge1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmcgfCBudWxsO1xuICBleGVjdXRpb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRTaGE/OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRUaW1lc3RhbXA/OiBEYXRlIHwgbnVsbDtcbiAgY29tbWl0Q291bnQ/OiBudW1iZXIgfCBudWxsO1xuICBjb21wbGV0ZWRBdD86IERhdGUgfCBudWxsO1xuICBzdGFydGVkQXQ/OiBEYXRlIHwgbnVsbDtcbiAgY3JlYXRlZEF0PzogRGF0ZSB8IG51bGw7XG4gIC8qKiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgaWQgb2YgdGhlIHJvdywgd2hlbiBpdHMgcHJvZHVjZXIgaGFkIG9uZS4gKi9cbiAgc291cmNlRXZlbnRJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBTdGF0dXNlcyBhbiBldmVudCB1c2VzIGZvciBcInRoaXMgZmluaXNoZWQsIGFuZCBpdCB3b3JrZWRcIi4gKi9cbmNvbnN0IFNVQ0NFRURFRCA9IG5ldyBTZXQoWydTVUNDRUVERUQnLCAnU1VDQ0VTUyddKTtcbi8qKiDigKZhbmQgZm9yIFwidGhpcyBmaW5pc2hlZCwgYW5kIGl0IGRpZCBub3RcIi4gKi9cbmNvbnN0IEZBSUxFRCA9IG5ldyBTZXQoWydGQUlMRUQnLCAnRkFJTFVSRScsICdDQU5DRUxFRCcsICdDQU5DRUxMRUQnLCAnU1RPUFBFRCcsICdUSU1FRF9PVVQnXSk7XG5cbi8qKlxuICogSXMgdGhpcyByb3cgYSBkZXBsb3k/XG4gKlxuICogQSBTVEFHRSBldmVudCB3aXRoIGFuIGVudmlyb25tZW50LCBpbiBhIHRlcm1pbmFsIHN0YXRlLiBgSU5fUFJPR1JFU1NgIHJvd3MgYXJlXG4gKiBza2lwcGVkIGRlbGliZXJhdGVseTogYSBkZXBsb3kgdGhhdCBoYXMgc3RhcnRlZCBoYXMgbm8gZHVyYXRpb24sIG5vIG91dGNvbWUgYW5kXG4gKiBubyBwbGFjZSBpbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IGNvdW50LCBhbmQgd3JpdGluZyBpdCB3b3VsZCBtYWtlIGV2ZXJ5XG4gKiBpbi1mbGlnaHQgZGVwbG95IGxvb2sgbGlrZSBhIHN1Y2Nlc3NmdWwgb25lIHVudGlsIGl0cyBuZXh0IGV2ZW50IGxhbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQocm93OiBEZXBsb3lDYW5kaWRhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJvdy5ldmVudFR5cGUgPT09ICdTVEFHRSdcbiAgICAmJiAhIXJvdy5lbnZpcm9ubWVudFxuICAgICYmICEhcm93LmV4ZWN1dGlvbklkXG4gICAgJiYgKFNVQ0NFRURFRC5oYXMocm93LnN0YXR1cykgfHwgRkFJTEVELmhhcyhyb3cuc3RhdHVzKSk7XG59XG5cbi8qKlxuICogV2h5IGxlYWQgdGltZSBpcyBhYnNlbnQgZm9yIGEgZGVwbG95IHRoYXQgaGFzIG5vIGNvbW1pdCB0aW1lc3RhbXAuXG4gKlxuICogYG5vX2NvbW1pdF9kYXRhYCBpcyB0aGUgaG9uZXN0IGRlZmF1bHQ6IHRoZSBmb3J3YXJkZXIgcmVzb2x2ZXMgdGhlIGNvbW1pdCByYW5nZVxuICogaW4tYWNjb3VudCBhbmQgcmVwb3J0cyB0aGUgcmVhc29uIGl0IGNvdWxkIG5vdCwgc28gYW55dGhpbmcgZWxzZSBoZXJlIHdvdWxkIGJlXG4gKiB0aGlzIG1vZHVsZSBndWVzc2luZy4gVGhlIHJlYXNvbiBpdCBESUQgcmVwb3J0IHJpZGVzIG9uIHRoZSBldmVudCdzIGBkZXRhaWxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVhZFRpbWVHYXBPZihyb3c6IERlcGxveUNhbmRpZGF0ZSAmIHsgZGV0YWlsPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIH0pOiBMZWFkVGltZUdhcCB8IG51bGwge1xuICBpZiAocm93LmNvbW1pdFRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlcG9ydGVkID0gcm93LmRldGFpbD8ubGVhZFRpbWVHYXA7XG4gIGlmIChyZXBvcnRlZCA9PT0gJ25vX3Rva2VuJyB8fCByZXBvcnRlZCA9PT0gJ3JhdGVfbGltaXRlZCcgfHwgcmVwb3J0ZWQgPT09ICd1bnN1cHBvcnRlZF9zb3VyY2UnKSByZXR1cm4gcmVwb3J0ZWQ7XG4gIHJldHVybiAnbm9fY29tbWl0X2RhdGEnO1xufVxuXG4vKiogV2hlbiB0aGUgZGVwbG95IGZpbmlzaGVkLiBGYWxscyBiYWNrIHRocm91Z2ggdGhlIGV2ZW50J3Mgb3duIHRpbWVzdGFtcHMuICovXG5mdW5jdGlvbiBkZXBsb3llZEF0T2Yocm93OiBEZXBsb3lDYW5kaWRhdGUpOiBEYXRlIHwgbnVsbCB7XG4gIHJldHVybiByb3cuY29tcGxldGVkQXQgPz8gcm93LnN0YXJ0ZWRBdCA/PyByb3cuY3JlYXRlZEF0ID8/IG51bGw7XG59XG5cbi8qKlxuICogVXBzZXJ0IHRoZSBkZXBsb3kgcm93cyBmb3IgYSBiYXRjaCBvZiBmcmVzaGx5LWluc2VydGVkIGV2ZW50cy5cbiAqXG4gKiBPTkUgUk9XIFBFUiAoZXhlY3V0aW9uLCBlbnZpcm9ubWVudCksIHNvIGEgcmVkZWxpdmVyZWQgZXZlbnQgcmVmcmVzaGVzIHRoZSByb3dcbiAqIHJhdGhlciB0aGFuIGFkZGluZyBhIHNlY29uZCBkZXBsb3kg4oCUIHRoZSBzYW1lIGF0LWxlYXN0LW9uY2UgcHJvYmxlbSB0aGUgZXZlbnRcbiAqIGluc2VydCBzb2x2ZXMgd2l0aCBpdHMgcGFydGlhbCB1bmlxdWUgaW5kZXguXG4gKlxuICogVGhlIGNvbmZsaWN0IHVwZGF0ZSBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgdG91Y2ggYGZhaWxlZF9hdGAgLyBgcmVzdG9yZWRfYXRgOlxuICogdGhvc2UgYXJlIHNldCBieSB0aGUgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzIGFuZCBieSBpbmNpZGVudCBjb3JyZWxhdGlvbixcbiAqIGFuZCBhIGxhdGUgcmVkZWxpdmVyeSBvZiB0aGUgb3JpZ2luYWwgZGVwbG95IGV2ZW50IG11c3Qgbm90IGVyYXNlIGEgcmVjb3JkZWRcbiAqIHByb2R1Y3Rpb24gZmFpbHVyZS5cbiAqXG4gKiBOZXZlciB0aHJvd3MuIEFuIGluZ2VzdCBiYXRjaCB0aGF0IGxhbmRlZCBpdHMgZXZlbnRzIGhhcyBkb25lIHRoZSBkdXJhYmxlIHBhcnRcbiAqIG9mIGl0cyBqb2I7IGZhaWxpbmcgdGhlIHdob2xlIGJhdGNoIGJlY2F1c2UgYSBkZXJpdmVkIHJvdyBjb3VsZCBub3QgYmUgd3JpdHRlblxuICogd291bGQgdHVybiBhIHJvbGx1cCBidWcgaW50byBkYXRhIGxvc3MsIGFuZCB0aGUgYmFja2ZpbGwgY2FuIHJlYnVpbGQgdGhlc2UgZnJvbVxuICogdGhlIGV2ZW50cyB3aGlsZSB0aGV5IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBzZXJ0RGVwbG95bWVudHMoXG4gIHJvd3M6IFJlYWRvbmx5QXJyYXk8RGVwbG95Q2FuZGlkYXRlICYgeyBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfT4sXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBkZXBsb3lzID0gcm93cy5maWx0ZXIoaXNEZXBsb3lFdmVudCk7XG4gIGlmIChkZXBsb3lzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgY29uc3QgdmFsdWVzID0gZGVwbG95cy5mbGF0TWFwKChyb3cpID0+IHtcbiAgICBjb25zdCBkZXBsb3llZEF0ID0gZGVwbG95ZWRBdE9mKHJvdyk7XG4gICAgaWYgKCFkZXBsb3llZEF0KSByZXR1cm4gW107XG4gICAgY29uc3Qgc3VjY2VlZGVkID0gU1VDQ0VFREVELmhhcyhyb3cuc3RhdHVzKTtcbiAgICBjb25zdCBlYXJsaWVzdENvbW1pdEF0ID0gcm93LmNvbW1pdFRpbWVzdGFtcCA/PyBudWxsO1xuICAgIC8vIExlYWQgdGltZSBpcyBjb21taXQg4oaSIGRlcGxveSwgYW5kIG9ubHkgd2hlbiBib3RoIGVuZHMgYXJlIHJlYWwuIEEgbmVnYXRpdmVcbiAgICAvLyBnYXAgbWVhbnMgdGhlIHR3byB0aW1lc3RhbXBzIGNhbWUgZnJvbSBkaWZmZXJlbnQgY2xvY2tzOyBpdCBpcyBkcm9wcGVkXG4gICAgLy8gcmF0aGVyIHRoYW4gY2xhbXBlZCB0byB6ZXJvLCBiZWNhdXNlIFwiMCBzZWNvbmRzXCIgaXMgYSBjbGFpbSBhbmQgXCJ1bmtub3duXCJcbiAgICAvLyBpcyB0aGUgdHJ1dGguXG4gICAgY29uc3QgbGVhZFNlY29uZHMgPSBlYXJsaWVzdENvbW1pdEF0XG4gICAgICA/IE1hdGgucm91bmQoKGRlcGxveWVkQXQuZ2V0VGltZSgpIC0gZWFybGllc3RDb21taXRBdC5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gW3tcbiAgICAgIG9yZ0lkOiByb3cub3JnSWQsXG4gICAgICBleGVjdXRpb25JZDogcm93LmV4ZWN1dGlvbklkIGFzIHN0cmluZyxcbiAgICAgIGVudmlyb25tZW50OiByb3cuZW52aXJvbm1lbnQgYXMgc3RyaW5nLFxuICAgICAgcGlwZWxpbmVJZDogcm93LnBpcGVsaW5lSWQsXG4gICAgICBkZXBsb3llZEF0LFxuICAgICAgc3VjY2VlZGVkLFxuICAgICAgZWFybGllc3RDb21taXRBdCxcbiAgICAgIGxlYWRUaW1lU2Vjb25kczogbGVhZFNlY29uZHMgIT09IG51bGwgJiYgbGVhZFNlY29uZHMgPj0gMCA/IGxlYWRTZWNvbmRzIDogbnVsbCxcbiAgICAgIGNvbW1pdENvdW50OiByb3cuY29tbWl0Q291bnQgPz8gbnVsbCxcbiAgICAgIGNvbW1pdFNoYTogcm93LmNvbW1pdFNoYSA/PyBudWxsLFxuICAgICAgbGVhZFRpbWVHYXA6IGxlYWRUaW1lR2FwT2Yocm93KSxcbiAgICAgIHNvdXJjZUV2ZW50SWQ6IHJvdy5zb3VyY2VFdmVudElkID8/IG51bGwsXG4gICAgfV07XG4gIH0pO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsYW5kZWQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5pbnNlcnQoc2NoZW1hLmRvcmFEZXBsb3ltZW50KS52YWx1ZXModmFsdWVzKVxuICAgICAgLm9uQ29uZmxpY3REb1VwZGF0ZSh7XG4gICAgICAgIHRhcmdldDogW3NjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50XSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgc3VjY2VlZGVkOiBzcWxgZXhjbHVkZWQuc3VjY2VlZGVkYCxcbiAgICAgICAgICBkZXBsb3llZEF0OiBzcWxgZXhjbHVkZWQuZGVwbG95ZWRfYXRgLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5waXBlbGluZV9pZCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQucGlwZWxpbmVJZH0pYCxcbiAgICAgICAgICAvLyBBIGxhdGVyIGV2ZW50IG1heSByZXNvbHZlIGEgY29tbWl0IHJhbmdlIHRoZSBmaXJzdCBvbmUgY291bGQgbm90LCBzb1xuICAgICAgICAgIC8vIHRoZXNlIGZpbGwgaW4g4oCUIGJ1dCBuZXZlciBibGFuayBvdXQgd2hhdCB3YXMgYWxyZWFkeSBtZWFzdXJlZC5cbiAgICAgICAgICBlYXJsaWVzdENvbW1pdEF0OiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQuZWFybGllc3RfY29tbWl0X2F0LCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5lYXJsaWVzdENvbW1pdEF0fSlgLFxuICAgICAgICAgIGxlYWRUaW1lU2Vjb25kczogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmxlYWRfdGltZV9zZWNvbmRzLCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5sZWFkVGltZVNlY29uZHN9KWAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5jb21taXRfY291bnQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdENvdW50fSlgLFxuICAgICAgICAgIGNvbW1pdFNoYTogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmNvbW1pdF9zaGEsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdFNoYX0pYCxcbiAgICAgICAgICAvLyBUaGUgZ2FwIGlzIGNsZWFyZWQgb25jZSBhIGNvbW1pdCB0aW1lc3RhbXAgYXJyaXZlczogYSByZXNvbHZlZCBsZWFkXG4gICAgICAgICAgLy8gdGltZSBhbmQgYSByZWFzb24gaXQgY291bGQgbm90IGJlIHJlc29sdmVkIG11c3QgbmV2ZXIgY29leGlzdC5cbiAgICAgICAgICBsZWFkVGltZUdhcDogc3FsYENBU0UgV0hFTiBDT0FMRVNDRShleGNsdWRlZC5lYXJsaWVzdF9jb21taXRfYXQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmVhcmxpZXN0Q29tbWl0QXR9KSBJUyBOT1QgTlVMTFxuICAgICAgICAgICAgVEhFTiBOVUxMIEVMU0UgZXhjbHVkZWQubGVhZF90aW1lX2dhcCBFTkRgLFxuICAgICAgICAgIC8vIFRoZSBkZXBsb3kgZXZlbnQgdGhhdCBsYXN0IHdyb3RlIHRoZSByb3csIHNvIHRoZSBET1JBIG51bWJlciB0cmFjZXNcbiAgICAgICAgICAvLyBiYWNrIHRvIGl0OyBhIHByb2R1Y2VyIHdpdGhvdXQgYW4gaWQgbmV2ZXIgYmxhbmtzIGEgcmVjb3JkZWQgb25lLlxuICAgICAgICAgIHNvdXJjZUV2ZW50SWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5zb3VyY2VfZXZlbnRfaWQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LnNvdXJjZUV2ZW50SWR9KWAsXG4gICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXR1cm5pbmcoeyBleGVjdXRpb25JZDogc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkIH0pKTtcbiAgICByZXR1cm4gKGxhbmRlZCBhcyB1bmtub3duW10pLmxlbmd0aDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0RlcGxveSByb2xsdXAgdXBzZXJ0IGZhaWxlZDsgdGhlIGV2ZW50cyBsYW5kZWQgYW5kIGEgcmVidWlsZCBjYW4gcmVjb3ZlciBpdCcsIHtcbiAgICAgIGRlcGxveXM6IHZhbHVlcy5sZW5ndGgsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBwb3N0LWRlcGxveSBvdXRjb21lIGFnYWluc3QgdGhlIGRlcGxveSBpdCBjb25jZXJucy5cbiAqXG4gKiBEZW5vcm1hbGl6ZWQgb250byBgZG9yYV9kZXBsb3ltZW50c2Agc28gY2hhbmdlLWZhaWx1cmUgcmF0ZSBhbmRcbiAqIHRpbWUtdG8tcmVzdG9yZSBhcmUgb25lIHNjYW4gb3ZlciB0aGUgd2luZG93IGluc3RlYWQgb2YgYSBqb2luIHBlciByZWFkLiBUaGVcbiAqIGBkZXBsb3ltZW50X291dGNvbWVzYCB0YWJsZSBzdGF5cyB0aGUgYXV0aG9yaXR5IOKAlCB0aGlzIGlzIHRoZSBjb3B5IHRoZVxuICogYWdncmVnYXRlcyB1c2UsIGFuZCBpdCBpcyByZWJ1aWxkYWJsZSBmcm9tIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlEZXBsb3lPdXRjb21lKFxuICBvcmdJZDogc3RyaW5nLFxuICBleGVjdXRpb25JZDogc3RyaW5nLFxuICBvdXRjb21lOiAnZmFpbGVkJyB8ICdyZXN0b3JlZCcsXG4gIGF0OiBEYXRlLFxuICBlbnZpcm9ubWVudD86IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB3aGVyZSA9IGVudmlyb25tZW50XG4gICAgPyBhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGV4ZWN1dGlvbklkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5lbnZpcm9ubWVudCwgZW52aXJvbm1lbnQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50Lm9yZ0lkLCBvcmdJZCksXG4gICAgKVxuICAgIDogYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBleGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQub3JnSWQsIG9yZ0lkKSxcbiAgICApO1xuICAvLyBBIGByZXN0b3JlZGAgbWFya2VyIG9ubHkgbWVhbnMgc29tZXRoaW5nIGZvciBhIGRlcGxveSB0aGF0IHdhcyBtYXJrZWQgZmFpbGVkO1xuICAvLyByZWNvcmRpbmcgYSByZXN0b3JlIHdpdGggbm8gZmFpbHVyZSB3b3VsZCBwcm9kdWNlIGEgbmVnYXRpdmUgdGltZS10by1yZXN0b3JlLlxuICBjb25zdCBzZXQgPSBvdXRjb21lID09PSAnZmFpbGVkJ1xuICAgID8geyBmYWlsZWRBdDogYXQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9XG4gICAgOiB7IHJlc3RvcmVkQXQ6IGF0LCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfTtcbiAgYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5kb3JhRGVwbG95bWVudCkuc2V0KHNldClcbiAgICAud2hlcmUob3V0Y29tZSA9PT0gJ3Jlc3RvcmVkJ1xuICAgICAgPyBhbmQod2hlcmUsIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5mYWlsZWRBdH0gSVMgTk9UIE5VTExgKVxuICAgICAgOiB3aGVyZSkpO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZSBhbiBpbmNpZGVudCB0byB0aGUgbW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgdG8gaXRzIGVudmlyb25tZW50XG4gKiB3aXRoaW4gdGhlIGNvcnJlbGF0aW9uIHdpbmRvdywgYW5kIGxhYmVsIGhvdyBjb25maWRlbnQgdGhhdCBsaW5rIGlzLlxuICpcbiAqIFRoZSBjb25maWRlbmNlIGlzIHRoZSBwb2ludC4gXCJUaGlzIGRlcGxveSBicm9rZSBwcm9kdWN0aW9uXCIgYW5kIFwiYW4gaW5jaWRlbnRcbiAqIG9wZW5lZCBlbGV2ZW4gaG91cnMgYWZ0ZXIgdGhpcyBkZXBsb3ksIGFuZCB0aGUgd2luZG93IGhhcHBlbnMgdG8gYmUgdHdlbHZlXCIgYXJlXG4gKiBkaWZmZXJlbnQgY2xhaW1zLCBhbmQgYSBtYW5hZ2VyIGFjdHMgZGlmZmVyZW50bHkgb24gZWFjaCDigJQgc28gdGhlIHJlcG9ydCBzaG93c1xuICogd2hpY2ggb25lIGl0IGlzIHJhdGhlciB0aGFuIHByZXNlbnRpbmcgYm90aCBhcyBhIGNoYW5nZSBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ycmVsYXRlSW5jaWRlbnQoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIGVudmlyb25tZW50OiBzdHJpbmcsXG4gIG9wZW5lZEF0OiBEYXRlLFxuICB3aW5kb3dIb3VyczogbnVtYmVyLFxuKTogUHJvbWlzZTx7IGV4ZWN1dGlvbklkOiBzdHJpbmc7IGNvbmZpZGVuY2U6ICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfSB8IG51bGw+IHtcbiAgY29uc3Qgd2luZG93U3RhcnQgPSBuZXcgRGF0ZShvcGVuZWRBdC5nZXRUaW1lKCkgLSB3aW5kb3dIb3VycyAqIDM2MDBfMDAwKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCh7XG4gICAgZXhlY3V0aW9uSWQ6IHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCxcbiAgICBkZXBsb3llZEF0OiBzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdCxcbiAgfSkuZnJvbShzY2hlbWEuZG9yYURlcGxveW1lbnQpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5vcmdJZCwgb3JnSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50LCBlbnZpcm9ubWVudCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuc3VjY2VlZGVkLCB0cnVlKSxcbiAgICAgIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0fSA8PSAke29wZW5lZEF0fWAsXG4gICAgICBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdH0gPj0gJHt3aW5kb3dTdGFydH1gLFxuICAgICkpXG4gICAgLm9yZGVyQnkoc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXR9IERFU0NgKVxuICAgIC5saW1pdCgxKSk7XG4gIGNvbnN0IGRlcGxveSA9IChyb3dzIGFzIEFycmF5PHsgZXhlY3V0aW9uSWQ6IHN0cmluZzsgZGVwbG95ZWRBdDogRGF0ZSB9PilbMF07XG4gIGlmICghZGVwbG95KSByZXR1cm4gbnVsbDtcblxuICAvLyBDb25maWRlbmNlIGJ5IGhvdyBlYXJseSBpbiB0aGUgd2luZG93IGl0IGZlbGwuIFRoZSB0aGlyZHMgYXJlIGEganVkZ2VtZW50LFxuICAvLyBhbmQgYSBzdGF0ZWQgb25lOiBhbiBpbmNpZGVudCB3aXRoaW4gdGhlIGZpcnN0IHRoaXJkIG9mIHRoZSB3aW5kb3cgYWZ0ZXIgYVxuICAvLyBkZXBsb3kgaXMgdGhlIGNhc2UgdGhlIERPUkEgZGVmaW5pdGlvbiBpcyBhY3R1YWxseSBhYm91dC5cbiAgY29uc3QgZWxhcHNlZCA9IG9wZW5lZEF0LmdldFRpbWUoKSAtIGRlcGxveS5kZXBsb3llZEF0LmdldFRpbWUoKTtcbiAgY29uc3Qgd2luZG93TXMgPSB3aW5kb3dIb3VycyAqIDM2MDBfMDAwO1xuICBjb25zdCBjb25maWRlbmNlID0gZWxhcHNlZCA8PSB3aW5kb3dNcyAvIDMgPyAnaGlnaCcgOiBlbGFwc2VkIDw9ICh3aW5kb3dNcyAqIDIpIC8gMyA/ICdtZWRpdW0nIDogJ2xvdyc7XG5cbiAgYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5kb3JhRGVwbG95bWVudClcbiAgICAuc2V0KHsgZmFpbGVkQXQ6IG9wZW5lZEF0LCBjb3JyZWxhdGlvbkNvbmZpZGVuY2U6IGNvbmZpZGVuY2UsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGRlcGxveS5leGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnQsIGVudmlyb25tZW50KSxcbiAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgYSBmYWlsdXJlIGFscmVhZHkgYXR0cmlidXRlZDogdGhlIEZJUlNUIGluY2lkZW50IGxpbmtlZFxuICAgICAgLy8gdG8gYSBkZXBsb3kgaXMgdGhlIG9uZSB0aGF0IG1hZGUgaXQgYSBjaGFuZ2UgZmFpbHVyZSwgYW5kIGEgbGF0ZXIgb25lXG4gICAgICAvLyByZS1kYXRpbmcgaXQgd291bGQgbW92ZSB0aW1lLXRvLXJlc3RvcmUuXG4gICAgICBpc051bGwoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmZhaWxlZEF0KSxcbiAgICApKSk7XG4gIHJldHVybiB7IGV4ZWN1dGlvbklkOiBkZXBsb3kuZXhlY3V0aW9uSWQsIGNvbmZpZGVuY2UgfTtcbn1cbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXJvbGx1cC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvZGVwbG95LXJvbGx1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQXFCN0MsaUVBQWlFO0FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsZ0RBQWdEO0FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRS9GOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQW9CO0lBQ2hELE9BQU8sR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPO1dBQzNCLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVztXQUNqQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7V0FDakIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7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QUFDLENBQUM7SUFDTixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdyaXRpbmcgYGRvcmFfZGVwbG95bWVudHNgIGF0IGluZ2VzdC5cbiAqXG4gKiBFdmVyeSBET1JBIG51bWJlciB1c2VkIHRvIGJlIGRlcml2ZWQgYnkgc2Nhbm5pbmcgYHBpcGVsaW5lX2V2ZW50c2AgcGVyIHJlYWQuXG4gKiBUd28gdGhpbmdzIHdlcmUgd3Jvbmcgd2l0aCB0aGF0LCBhbmQgb25seSBvbmUgb2YgdGhlbSB3YXMgc3BlZWQ6XG4gKlxuICogIDEuIExFQUQgVElNRSBXQVMgRE9VQkxFLUNPVU5URUQgSU4gV0FJVElORy4gQSBkZXBsb3kgZW1pdHMgYSBTVEFHRSBldmVudCBhbmRcbiAqICAgICBhbiBBQ1RJT04gZXZlbnQsIGFuZCBib3RoIGNhcnJ5IHRoZSBzYW1lIHJlc29sdmVkIGNvbW1pdCByYW5nZS4gQW55XG4gKiAgICAgYWdncmVnYXRlIG92ZXIgZXZlbnRzIHRoZXJlZm9yZSBjb3VudGVkIG9uZSBkZXBsb3kncyBsZWFkIHRpbWUgdHdpY2UgdGhlXG4gKiAgICAgbW9tZW50IHNvbWVib2R5IGFkZGVkIHRoZSBBQ1RJT04gcm93cyB0byBhIHF1ZXJ5LiBTdG9yaW5nIGl0IG9uY2UgcGVyXG4gKiAgICAgZXhlY3V0aW9uIG1ha2VzIHRoYXQgbWlzdGFrZSB1bmF2YWlsYWJsZSByYXRoZXIgdGhhbiBtZXJlbHkgdW5tYWRlLlxuICogIDIuIFRIRSBOVU1CRVJTIERJRCBOT1QgU1VSVklWRSBSRVRFTlRJT04uIFRoZSBzd2VlcCBwdXJnZXMgcmF3IGV2ZW50cyBieVxuICogICAgIHRpZXIsIHNvIGEgcXVhcnRlcmx5IHJlcG9ydCBjb3VsZCBub3QgYmUgcmVjb21wdXRlZCBvbmNlIGl0cyBldmVudHMgd2VyZVxuICogICAgIGdvbmUg4oCUIHdoaWNoIGlzIGV4YWN0bHkgd2hlbiBzb21lb25lIGFza3MgYWJvdXQgaXQuXG4gKlxuICogQSBkZXBsb3kgaXMgYSBTVEFHRSBldmVudCBjYXJyeWluZyBhbiBgZW52aXJvbm1lbnRgOiB0aGUgc2FtZSBwcmVkaWNhdGUgdGhlXG4gKiBET1JBIHF1ZXJpZXMgaGF2ZSBhbHdheXMgdXNlZCwgbm93IGFwcGxpZWQgb25jZSBhdCB3cml0ZSB0aW1lLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgYW5kLCBlcSwgaXNOdWxsLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IExlYWRUaW1lR2FwIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2Uvc2NoZW1hL3JlcG9ydGluZy1hbmFseXRpY3MuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZGVwbG95LXJvbGx1cCcpO1xuXG4vKiogVGhlIGZpZWxkcyBvZiBhbiBpbnNlcnRlZCBldmVudCByb3cgdGhpcyBtb2R1bGUgbmVlZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUNhbmRpZGF0ZSB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZyB8IG51bGw7XG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcgfCBudWxsO1xuICBldmVudFR5cGU6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHN0YWdlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIGNvbW1pdFNoYT86IHN0cmluZyB8IG51bGw7XG4gIGNvbW1pdFRpbWVzdGFtcD86IERhdGUgfCBudWxsO1xuICBjb21taXRDb3VudD86IG51bWJlciB8IG51bGw7XG4gIGNvbXBsZXRlZEF0PzogRGF0ZSB8IG51bGw7XG4gIHN0YXJ0ZWRBdD86IERhdGUgfCBudWxsO1xuICBjcmVhdGVkQXQ/OiBEYXRlIHwgbnVsbDtcbiAgLyoqIFRoZSBFdmVudEJyaWRnZSBldmVudCBpZCBvZiB0aGUgcm93LCB3aGVuIGl0cyBwcm9kdWNlciBoYWQgb25lLiAqL1xuICBzb3VyY2VFdmVudElkPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIFN0YXR1c2VzIGFuIGV2ZW50IHVzZXMgZm9yIFwidGhpcyBmaW5pc2hlZCwgYW5kIGl0IHdvcmtlZFwiLiAqL1xuY29uc3QgU1VDQ0VFREVEID0gbmV3IFNldChbJ1NVQ0NFRURFRCcsICdTVUNDRVNTJ10pO1xuLyoqIOKApmFuZCBmb3IgXCJ0aGlzIGZpbmlzaGVkLCBhbmQgaXQgZGlkIG5vdFwiLiAqL1xuY29uc3QgRkFJTEVEID0gbmV3IFNldChbJ0ZBSUxFRCcsICdGQUlMVVJFJywgJ0NBTkNFTEVEJywgJ0NBTkNFTExFRCcsICdTVE9QUEVEJywgJ1RJTUVEX09VVCddKTtcblxuLyoqXG4gKiBJcyB0aGlzIHJvdyBhIGRlcGxveT9cbiAqXG4gKiBBIFNUQUdFIGV2ZW50IHdpdGggYW4gZW52aXJvbm1lbnQsIGluIGEgdGVybWluYWwgc3RhdGUuIGBJTl9QUk9HUkVTU2Agcm93cyBhcmVcbiAqIHNraXBwZWQgZGVsaWJlcmF0ZWx5OiBhIGRlcGxveSB0aGF0IGhhcyBzdGFydGVkIGhhcyBubyBkdXJhdGlvbiwgbm8gb3V0Y29tZSBhbmRcbiAqIG5vIHBsYWNlIGluIGEgZGVwbG95bWVudC1mcmVxdWVuY3kgY291bnQsIGFuZCB3cml0aW5nIGl0IHdvdWxkIG1ha2UgZXZlcnlcbiAqIGluLWZsaWdodCBkZXBsb3kgbG9vayBsaWtlIGEgc3VjY2Vzc2Z1bCBvbmUgdW50aWwgaXRzIG5leHQgZXZlbnQgbGFuZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZXBsb3lFdmVudChyb3c6IERlcGxveUNhbmRpZGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcm93LmV2ZW50VHlwZSA9PT0gJ1NUQUdFJ1xuICAgICYmICEhcm93LmVudmlyb25tZW50XG4gICAgJiYgISFyb3cuZXhlY3V0aW9uSWRcbiAgICAmJiAoU1VDQ0VFREVELmhhcyhyb3cuc3RhdHVzKSB8fCBGQUlMRUQuaGFzKHJvdy5zdGF0dXMpKTtcbn1cblxuLyoqXG4gKiBXaHkgbGVhZCB0aW1lIGlzIGFic2VudCBmb3IgYSBkZXBsb3kgdGhhdCBoYXMgbm8gY29tbWl0IHRpbWVzdGFtcC5cbiAqXG4gKiBgbm9fY29tbWl0X2RhdGFgIGlzIHRoZSBob25lc3QgZGVmYXVsdDogdGhlIGZvcndhcmRlciByZXNvbHZlcyB0aGUgY29tbWl0IHJhbmdlXG4gKiBpbi1hY2NvdW50IGFuZCByZXBvcnRzIHRoZSByZWFzb24gaXQgY291bGQgbm90LCBzbyBhbnl0aGluZyBlbHNlIGhlcmUgd291bGQgYmVcbiAqIHRoaXMgbW9kdWxlIGd1ZXNzaW5nLiBUaGUgcmVhc29uIGl0IERJRCByZXBvcnQgcmlkZXMgb24gdGhlIGV2ZW50J3MgYGRldGFpbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZWFkVGltZUdhcE9mKHJvdzogRGVwbG95Q2FuZGlkYXRlICYgeyBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfSk6IExlYWRUaW1lR2FwIHwgbnVsbCB7XG4gIGlmIChyb3cuY29tbWl0VGltZXN0YW1wKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmVwb3J0ZWQgPSByb3cuZGV0YWlsPy5sZWFkVGltZUdhcDtcbiAgaWYgKHJlcG9ydGVkID09PSAnbm9fdG9rZW4nIHx8IHJlcG9ydGVkID09PSAncmF0ZV9saW1pdGVkJyB8fCByZXBvcnRlZCA9PT0gJ3Vuc3VwcG9ydGVkX3NvdXJjZScpIHJldHVybiByZXBvcnRlZDtcbiAgcmV0dXJuICdub19jb21taXRfZGF0YSc7XG59XG5cbi8qKiBXaGVuIHRoZSBkZXBsb3kgZmluaXNoZWQuIEZhbGxzIGJhY2sgdGhyb3VnaCB0aGUgZXZlbnQncyBvd24gdGltZXN0YW1wcy4gKi9cbmZ1bmN0aW9uIGRlcGxveWVkQXRPZihyb3c6IERlcGxveUNhbmRpZGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgcmV0dXJuIHJvdy5jb21wbGV0ZWRBdCA/PyByb3cuc3RhcnRlZEF0ID8/IHJvdy5jcmVhdGVkQXQgPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBVcHNlcnQgdGhlIGRlcGxveSByb3dzIGZvciBhIGJhdGNoIG9mIGZyZXNobHktaW5zZXJ0ZWQgZXZlbnRzLlxuICpcbiAqIE9ORSBST1cgUEVSIChleGVjdXRpb24sIGVudmlyb25tZW50KSwgc28gYSByZWRlbGl2ZXJlZCBldmVudCByZWZyZXNoZXMgdGhlIHJvd1xuICogcmF0aGVyIHRoYW4gYWRkaW5nIGEgc2Vjb25kIGRlcGxveSDigJQgdGhlIHNhbWUgYXQtbGVhc3Qtb25jZSBwcm9ibGVtIHRoZSBldmVudFxuICogaW5zZXJ0IHNvbHZlcyB3aXRoIGl0cyBwYXJ0aWFsIHVuaXF1ZSBpbmRleC5cbiAqXG4gKiBUaGUgY29uZmxpY3QgdXBkYXRlIGRlbGliZXJhdGVseSBkb2VzIE5PVCB0b3VjaCBgZmFpbGVkX2F0YCAvIGByZXN0b3JlZF9hdGA6XG4gKiB0aG9zZSBhcmUgc2V0IGJ5IHRoZSBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlcnMgYW5kIGJ5IGluY2lkZW50IGNvcnJlbGF0aW9uLFxuICogYW5kIGEgbGF0ZSByZWRlbGl2ZXJ5IG9mIHRoZSBvcmlnaW5hbCBkZXBsb3kgZXZlbnQgbXVzdCBub3QgZXJhc2UgYSByZWNvcmRlZFxuICogcHJvZHVjdGlvbiBmYWlsdXJlLlxuICpcbiAqIE5ldmVyIHRocm93cy4gQW4gaW5nZXN0IGJhdGNoIHRoYXQgbGFuZGVkIGl0cyBldmVudHMgaGFzIGRvbmUgdGhlIGR1cmFibGUgcGFydFxuICogb2YgaXRzIGpvYjsgZmFpbGluZyB0aGUgd2hvbGUgYmF0Y2ggYmVjYXVzZSBhIGRlcml2ZWQgcm93IGNvdWxkIG5vdCBiZSB3cml0dGVuXG4gKiB3b3VsZCB0dXJuIGEgcm9sbHVwIGJ1ZyBpbnRvIGRhdGEgbG9zcywgYW5kIHRoZSBiYWNrZmlsbCBjYW4gcmVidWlsZCB0aGVzZSBmcm9tXG4gKiB0aGUgZXZlbnRzIHdoaWxlIHRoZXkgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cHNlcnREZXBsb3ltZW50cyhcbiAgcm93czogUmVhZG9ubHlBcnJheTxEZXBsb3lDYW5kaWRhdGUgJiB7IGRldGFpbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB9Pixcbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGRlcGxveXMgPSByb3dzLmZpbHRlcihpc0RlcGxveUV2ZW50KTtcbiAgaWYgKGRlcGxveXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICBjb25zdCB2YWx1ZXMgPSBkZXBsb3lzLmZsYXRNYXAoKHJvdykgPT4ge1xuICAgIGNvbnN0IGRlcGxveWVkQXQgPSBkZXBsb3llZEF0T2Yocm93KTtcbiAgICBpZiAoIWRlcGxveWVkQXQpIHJldHVybiBbXTtcbiAgICBjb25zdCBzdWNjZWVkZWQgPSBTVUNDRUVERUQuaGFzKHJvdy5zdGF0dXMpO1xuICAgIGNvbnN0IGVhcmxpZXN0Q29tbWl0QXQgPSByb3cuY29tbWl0VGltZXN0YW1wID8/IG51bGw7XG4gICAgLy8gTGVhZCB0aW1lIGlzIGNvbW1pdCDihpIgZGVwbG95LCBhbmQgb25seSB3aGVuIGJvdGggZW5kcyBhcmUgcmVhbC4gQSBuZWdhdGl2ZVxuICAgIC8vIGdhcCBtZWFucyB0aGUgdHdvIHRpbWVzdGFtcHMgY2FtZSBmcm9tIGRpZmZlcmVudCBjbG9ja3M7IGl0IGlzIGRyb3BwZWRcbiAgICAvLyByYXRoZXIgdGhhbiBjbGFtcGVkIHRvIHplcm8sIGJlY2F1c2UgXCIwIHNlY29uZHNcIiBpcyBhIGNsYWltIGFuZCBcInVua25vd25cIlxuICAgIC8vIGlzIHRoZSB0cnV0aC5cbiAgICBjb25zdCBsZWFkU2Vjb25kcyA9IGVhcmxpZXN0Q29tbWl0QXRcbiAgICAgID8gTWF0aC5yb3VuZCgoZGVwbG95ZWRBdC5nZXRUaW1lKCkgLSBlYXJsaWVzdENvbW1pdEF0LmdldFRpbWUoKSkgLyAxMDAwKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiBbe1xuICAgICAgb3JnSWQ6IHJvdy5vcmdJZCxcbiAgICAgIGV4ZWN1dGlvbklkOiByb3cuZXhlY3V0aW9uSWQgYXMgc3RyaW5nLFxuICAgICAgZW52aXJvbm1lbnQ6IHJvdy5lbnZpcm9ubWVudCBhcyBzdHJpbmcsXG4gICAgICBwaXBlbGluZUlkOiByb3cucGlwZWxpbmVJZCxcbiAgICAgIGRlcGxveWVkQXQsXG4gICAgICBzdWNjZWVkZWQsXG4gICAgICBlYXJsaWVzdENvbW1pdEF0LFxuICAgICAgbGVhZFRpbWVTZWNvbmRzOiBsZWFkU2Vjb25kcyAhPT0gbnVsbCAmJiBsZWFkU2Vjb25kcyA+PSAwID8gbGVhZFNlY29uZHMgOiBudWxsLFxuICAgICAgY29tbWl0Q291bnQ6IHJvdy5jb21taXRDb3VudCA/PyBudWxsLFxuICAgICAgY29tbWl0U2hhOiByb3cuY29tbWl0U2hhID8/IG51bGwsXG4gICAgICBsZWFkVGltZUdhcDogbGVhZFRpbWVHYXBPZihyb3cpLFxuICAgICAgc291cmNlRXZlbnRJZDogcm93LnNvdXJjZUV2ZW50SWQgPz8gbnVsbCxcbiAgICB9XTtcbiAgfSk7XG4gIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxhbmRlZCA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4Lmluc2VydChzY2hlbWEuZG9yYURlcGxveW1lbnQpLnZhbHVlcyh2YWx1ZXMpXG4gICAgICAub25Db25mbGljdERvVXBkYXRlKHtcbiAgICAgICAgdGFyZ2V0OiBbc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnRdLFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICBzdWNjZWVkZWQ6IHNxbGBleGNsdWRlZC5zdWNjZWVkZWRgLFxuICAgICAgICAgIGRlcGxveWVkQXQ6IHNxbGBleGNsdWRlZC5kZXBsb3llZF9hdGAsXG4gICAgICAgICAgcGlwZWxpbmVJZDogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLnBpcGVsaW5lX2lkLCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5waXBlbGluZUlkfSlgLFxuICAgICAgICAgIC8vIEEgbGF0ZXIgZXZlbnQgbWF5IHJlc29sdmUgYSBjb21taXQgcmFuZ2UgdGhlIGZpcnN0IG9uZSBjb3VsZCBub3QsIHNvXG4gICAgICAgICAgLy8gdGhlc2UgZmlsbCBpbiDigJQgYnV0IG5ldmVyIGJsYW5rIG91dCB3aGF0IHdhcyBhbHJlYWR5IG1lYXN1cmVkLlxuICAgICAgICAgIGVhcmxpZXN0Q29tbWl0QXQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5lYXJsaWVzdF9jb21taXRfYXQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmVhcmxpZXN0Q29tbWl0QXR9KWAsXG4gICAgICAgICAgbGVhZFRpbWVTZWNvbmRzOiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQubGVhZF90aW1lX3NlY29uZHMsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmxlYWRUaW1lU2Vjb25kc30pYCxcbiAgICAgICAgICBjb21taXRDb3VudDogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmNvbW1pdF9jb3VudCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuY29tbWl0Q291bnR9KWAsXG4gICAgICAgICAgY29tbWl0U2hhOiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQuY29tbWl0X3NoYSwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuY29tbWl0U2hhfSlgLFxuICAgICAgICAgIC8vIFRoZSBnYXAgaXMgY2xlYXJlZCBvbmNlIGEgY29tbWl0IHRpbWVzdGFtcCBhcnJpdmVzOiBhIHJlc29sdmVkIGxlYWRcbiAgICAgICAgICAvLyB0aW1lIGFuZCBhIHJlYXNvbiBpdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgbXVzdCBuZXZlciBjb2V4aXN0LlxuICAgICAgICAgIGxlYWRUaW1lR2FwOiBzcWxgQ0FTRSBXSEVOIENPQUxFU0NFKGV4Y2x1ZGVkLmVhcmxpZXN0X2NvbW1pdF9hdCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZWFybGllc3RDb21taXRBdH0pIElTIE5PVCBOVUxMXG4gICAgICAgICAgICBUSEVOIE5VTEwgRUxTRSBleGNsdWRlZC5sZWFkX3RpbWVfZ2FwIEVORGAsXG4gICAgICAgICAgLy8gVGhlIGRlcGxveSBldmVudCB0aGF0IGxhc3Qgd3JvdGUgdGhlIHJvdywgc28gdGhlIERPUkEgbnVtYmVyIHRyYWNlc1xuICAgICAgICAgIC8vIGJhY2sgdG8gaXQ7IGEgcHJvZHVjZXIgd2l0aG91dCBhbiBpZCBuZXZlciBibGFua3MgYSByZWNvcmRlZCBvbmUuXG4gICAgICAgICAgc291cmNlRXZlbnRJZDogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLnNvdXJjZV9ldmVudF9pZCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuc291cmNlRXZlbnRJZH0pYCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnJldHVybmluZyh7IGV4ZWN1dGlvbklkOiBzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQgfSkpO1xuICAgIHJldHVybiAobGFuZGVkIGFzIHVua25vd25bXSkubGVuZ3RoO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybignRGVwbG95IHJvbGx1cCB1cHNlcnQgZmFpbGVkOyB0aGUgZXZlbnRzIGxhbmRlZCBhbmQgYSByZWJ1aWxkIGNhbiByZWNvdmVyIGl0Jywge1xuICAgICAgZGVwbG95czogdmFsdWVzLmxlbmd0aCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJlY29yZCBhIHBvc3QtZGVwbG95IG91dGNvbWUgYWdhaW5zdCB0aGUgZGVwbG95IGl0IGNvbmNlcm5zLlxuICpcbiAqIERlbm9ybWFsaXplZCBvbnRvIGBkb3JhX2RlcGxveW1lbnRzYCBzbyBjaGFuZ2UtZmFpbHVyZSByYXRlIGFuZFxuICogdGltZS10by1yZXN0b3JlIGFyZSBvbmUgc2NhbiBvdmVyIHRoZSB3aW5kb3cgaW5zdGVhZCBvZiBhIGpvaW4gcGVyIHJlYWQuIFRoZVxuICogYGRlcGxveW1lbnRfb3V0Y29tZXNgIHRhYmxlIHN0YXlzIHRoZSBhdXRob3JpdHkg4oCUIHRoaXMgaXMgdGhlIGNvcHkgdGhlXG4gKiBhZ2dyZWdhdGVzIHVzZSwgYW5kIGl0IGlzIHJlYnVpbGRhYmxlIGZyb20gaXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseURlcGxveU91dGNvbWUoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG91dGNvbWU6ICdmYWlsZWQnIHwgJ3Jlc3RvcmVkJyxcbiAgYXQ6IERhdGUsXG4gIGVudmlyb25tZW50Pzogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdoZXJlID0gZW52aXJvbm1lbnRcbiAgICA/IGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgZXhlY3V0aW9uSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50LCBlbnZpcm9ubWVudCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQub3JnSWQsIG9yZ0lkKSxcbiAgICApXG4gICAgOiBhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGV4ZWN1dGlvbklkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5vcmdJZCwgb3JnSWQpLFxuICAgICk7XG4gIC8vIEEgYHJlc3RvcmVkYCBtYXJrZXIgb25seSBtZWFucyBzb21ldGhpbmcgZm9yIGEgZGVwbG95IHRoYXQgd2FzIG1hcmtlZCBmYWlsZWQ7XG4gIC8vIHJlY29yZGluZyBhIHJlc3RvcmUgd2l0aCBubyBmYWlsdXJlIHdvdWxkIHByb2R1Y2UgYSBuZWdhdGl2ZSB0aW1lLXRvLXJlc3RvcmUuXG4gIGNvbnN0IHNldCA9IG91dGNvbWUgPT09ICdmYWlsZWQnXG4gICAgPyB7IGZhaWxlZEF0OiBhdCwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH1cbiAgICA6IHsgcmVzdG9yZWRBdDogYXQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9O1xuICBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC51cGRhdGUoc2NoZW1hLmRvcmFEZXBsb3ltZW50KS5zZXQoc2V0KVxuICAgIC53aGVyZShvdXRjb21lID09PSAncmVzdG9yZWQnXG4gICAgICA/IGFuZCh3aGVyZSwgc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmZhaWxlZEF0fSBJUyBOT1QgTlVMTGApXG4gICAgICA6IHdoZXJlKSk7XG59XG5cbi8qKlxuICogQXR0cmlidXRlIGFuIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBpdHMgZW52aXJvbm1lbnRcbiAqIHdpdGhpbiB0aGUgY29ycmVsYXRpb24gd2luZG93LCBhbmQgbGFiZWwgaG93IGNvbmZpZGVudCB0aGF0IGxpbmsgaXMuXG4gKlxuICogVGhlIGNvbmZpZGVuY2UgaXMgdGhlIHBvaW50LiBcIlRoaXMgZGVwbG95IGJyb2tlIHByb2R1Y3Rpb25cIiBhbmQgXCJhbiBpbmNpZGVudFxuICogb3BlbmVkIGVsZXZlbiBob3VycyBhZnRlciB0aGlzIGRlcGxveSwgYW5kIHRoZSB3aW5kb3cgaGFwcGVucyB0byBiZSB0d2VsdmVcIiBhcmVcbiAqIGRpZmZlcmVudCBjbGFpbXMsIGFuZCBhIG1hbmFnZXIgYWN0cyBkaWZmZXJlbnRseSBvbiBlYWNoIOKAlCBzbyB0aGUgcmVwb3J0IHNob3dzXG4gKiB3aGljaCBvbmUgaXQgaXMgcmF0aGVyIHRoYW4gcHJlc2VudGluZyBib3RoIGFzIGEgY2hhbmdlIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3JyZWxhdGVJbmNpZGVudChcbiAgb3JnSWQ6IHN0cmluZyxcbiAgZW52aXJvbm1lbnQ6IHN0cmluZyxcbiAgb3BlbmVkQXQ6IERhdGUsXG4gIHdpbmRvd0hvdXJzOiBudW1iZXIsXG4pOiBQcm9taXNlPHsgZXhlY3V0aW9uSWQ6IHN0cmluZzsgY29uZmlkZW5jZTogJ2hpZ2gnIHwgJ21lZGl1bScgfCAnbG93JyB9IHwgbnVsbD4ge1xuICBjb25zdCB3aW5kb3dTdGFydCA9IG5ldyBEYXRlKG9wZW5lZEF0LmdldFRpbWUoKSAtIHdpbmRvd0hvdXJzICogMzYwMF8wMDApO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBleGVjdXRpb25JZDogc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLFxuICAgIGRlcGxveWVkQXQ6IHNjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0LFxuICB9KS5mcm9tKHNjaGVtYS5kb3JhRGVwbG95bWVudClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50Lm9yZ0lkLCBvcmdJZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnQsIGVudmlyb25tZW50KSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5zdWNjZWVkZWQsIHRydWUpLFxuICAgICAgc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXR9IDw9ICR7b3BlbmVkQXR9YCxcbiAgICAgIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0fSA+PSAke3dpbmRvd1N0YXJ0fWAsXG4gICAgKSlcbiAgICAub3JkZXJCeShzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdH0gREVTQ2ApXG4gICAgLmxpbWl0KDEpKTtcbiAgY29uc3QgZGVwbG95ID0gKHJvd3MgYXMgQXJyYXk8eyBleGVjdXRpb25JZDogc3RyaW5nOyBkZXBsb3llZEF0OiBEYXRlIH0+KVswXTtcbiAgaWYgKCFkZXBsb3kpIHJldHVybiBudWxsO1xuXG4gIC8vIENvbmZpZGVuY2UgYnkgaG93IGVhcmx5IGluIHRoZSB3aW5kb3cgaXQgZmVsbC4gVGhlIHRoaXJkcyBhcmUgYSBqdWRnZW1lbnQsXG4gIC8vIGFuZCBhIHN0YXRlZCBvbmU6IGFuIGluY2lkZW50IHdpdGhpbiB0aGUgZmlyc3QgdGhpcmQgb2YgdGhlIHdpbmRvdyBhZnRlciBhXG4gIC8vIGRlcGxveSBpcyB0aGUgY2FzZSB0aGUgRE9SQSBkZWZpbml0aW9uIGlzIGFjdHVhbGx5IGFib3V0LlxuICBjb25zdCBlbGFwc2VkID0gb3BlbmVkQXQuZ2V0VGltZSgpIC0gZGVwbG95LmRlcGxveWVkQXQuZ2V0VGltZSgpO1xuICBjb25zdCB3aW5kb3dNcyA9IHdpbmRvd0hvdXJzICogMzYwMF8wMDA7XG4gIGNvbnN0IGNvbmZpZGVuY2UgPSBlbGFwc2VkIDw9IHdpbmRvd01zIC8gMyA/ICdoaWdoJyA6IGVsYXBzZWQgPD0gKHdpbmRvd01zICogMikgLyAzID8gJ21lZGl1bScgOiAnbG93JztcblxuICBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC51cGRhdGUoc2NoZW1hLmRvcmFEZXBsb3ltZW50KVxuICAgIC5zZXQoeyBmYWlsZWRBdDogb3BlbmVkQXQsIGNvcnJlbGF0aW9uQ29uZmlkZW5jZTogY29uZmlkZW5jZSwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgZGVwbG95LmV4ZWN1dGlvbklkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5lbnZpcm9ubWVudCwgZW52aXJvbm1lbnQpLFxuICAgICAgLy8gRG8gbm90IG92ZXJ3cml0ZSBhIGZhaWx1cmUgYWxyZWFkeSBhdHRyaWJ1dGVkOiB0aGUgRklSU1QgaW5jaWRlbnQgbGlua2VkXG4gICAgICAvLyB0byBhIGRlcGxveSBpcyB0aGUgb25lIHRoYXQgbWFkZSBpdCBhIGNoYW5nZSBmYWlsdXJlLCBhbmQgYSBsYXRlciBvbmVcbiAgICAgIC8vIHJlLWRhdGluZyBpdCB3b3VsZCBtb3ZlIHRpbWUtdG8tcmVzdG9yZS5cbiAgICAgIGlzTnVsbChzY2hlbWEuZG9yYURlcGxveW1lbnQuZmFpbGVkQXQpLFxuICAgICkpKTtcbiAgcmV0dXJuIHsgZXhlY3V0aW9uSWQ6IGRlcGxveS5leGVjdXRpb25JZCwgY29uZmlkZW5jZSB9O1xufVxuIl19