cdk-nextjs 0.7.13 → 0.7.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.jsii +132 -42
  2. package/.jsii.tabl.json +1 -1
  3. package/API.md +56 -0
  4. package/docs/harness-coverage.md +16 -6
  5. package/docs/next-build-output-guide.md +1 -1
  6. package/lib/adapter/adapter.mjs +1 -1
  7. package/lib/generated-structs/OptionalNextjsApiProps.d.ts +6 -0
  8. package/lib/generated-structs/OptionalNextjsApiProps.js +1 -1
  9. package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +6 -0
  10. package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
  11. package/lib/nextjs-api.d.ts +11 -0
  12. package/lib/nextjs-api.js +63 -9
  13. package/lib/nextjs-api.test.js +127 -1
  14. package/lib/nextjs-build/nextjs-build.js +1 -1
  15. package/lib/nextjs-cache.js +1 -1
  16. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  17. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  18. package/lib/nextjs-distribution.d.ts +21 -0
  19. package/lib/nextjs-distribution.js +69 -4
  20. package/lib/nextjs-distribution.test.js +132 -1
  21. package/lib/nextjs-post-deploy.js +1 -1
  22. package/lib/nextjs-static-assets.js +1 -1
  23. package/lib/root-constructs/nextjs-base-construct.d.ts +7 -0
  24. package/lib/root-constructs/nextjs-base-construct.js +14 -2
  25. package/lib/root-constructs/nextjs-global-containers.js +3 -2
  26. package/lib/root-constructs/nextjs-global-functions.js +3 -2
  27. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  28. package/lib/root-constructs/nextjs-regional-functions.js +3 -2
  29. package/lib/runtime/core.js +4 -6
  30. package/lib/runtime/http/response.d.ts +0 -6
  31. package/lib/runtime/http/response.js +1 -7
  32. package/lib/runtime/http/sink.js +10 -6
  33. package/lib/runtime/http/sink.test.js +45 -13
  34. package/lib/runtime/lambda.mjs +2 -10
  35. package/lib/runtime/server.mjs +2 -10
  36. package/package.json +1 -1
  37. package/scripts/e2e-harness/README.md +10 -8
@@ -54,12 +54,6 @@ class ShimServerResponse extends node_stream_1.Transform {
54
54
  useChunkedEncodingByDefault = false;
55
55
  /** Set by Next.js in a few places; never read by us. */
56
56
  req;
57
- /**
58
- * Installed by the runtime core when it inserts gzip, so that Next.js's
59
- * per-chunk `if ("flush" in res) res.flush()` actually reaches the
60
- * compressor. Without it, streamed HTML sits in zlib's buffer.
61
- */
62
- flush;
63
57
  /** Lowercased name → original casing + value, mirroring Node's own store. */
64
58
  headerStore = new Map();
65
59
  constructor() {
@@ -226,4 +220,4 @@ exports.ShimServerResponse = ShimServerResponse;
226
220
  function asServerResponse(res) {
227
221
  return res;
228
222
  }
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9odHRwL3Jlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBDQSxzQ0FJQztBQXFPRCw0Q0FFQztBQXJSRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gseUNBQXlDO0FBRXpDLDZDQUF3QztBQWN4Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBaUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUlELG1FQUFtRTtBQUNuRSxTQUFTLFdBQVcsQ0FBQyxNQUFjO0lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2IsT0FBTyxNQUFNLDhEQUE4RDtRQUN6RSxvRUFBb0U7UUFDcEUsV0FBVyxDQUNkLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSx1QkFBUztJQUN4QyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLGFBQWEsQ0FBVTtJQUN2QixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLCtFQUErRTtJQUN4RSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLHdEQUF3RDtJQUNqRCxHQUFHLENBQVc7SUFDckI7Ozs7T0FJRztJQUNJLEtBQUssQ0FBYztJ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QUFpQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNNLGVBQWU7UUFDcEIsT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFoTkQsZ0RBZ05DO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUF1QjtJQUN0RCxPQUFPLEdBQWdDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzeW50aGVzaXplZCwgc3RyZWFtaW5nIGBodHRwLlNlcnZlclJlc3BvbnNlYC5cbiAqXG4gKiBUaGUgcmVzcG9uc2UgKmlzKiB0aGUgc3RyZWFtOiB0aGlzIGlzIGEgYFRyYW5zZm9ybWAgdGhhdCBOZXh0LmpzIHdyaXRlcyBpbnRvLFxuICogYW5kIHRoZSBzaGVsbCBwaXBlcyBpbnRvIGl0cyBvd24gYnl0ZSBzaW5rIChgYXdzbGFtYmRhLkh0dHBSZXNwb25zZVN0cmVhbWAgZm9yXG4gKiBGdW5jdGlvbnMsIHRoZSByZWFsIGBTZXJ2ZXJSZXNwb25zZWAgZm9yIENvbnRhaW5lcnMpLiBTdGF0dXMgYW5kIGhlYWRlcnMgYXJlXG4gKiBlbWl0dGVkIG9uY2UgYXMgYSB7QGxpbmsgUmVzcG9uc2VIZWFkfSBvbiB0aGUgYFwiaGVhZFwiYCBldmVudCwgYmVjYXVzZSBMYW1iZGEnc1xuICogcmVzcG9uc2Ugc3RyZWFtIG5lZWRzIHRoZW0gaW4gYSBwcmVsdWRlICpiZWZvcmUqIGFueSBib2R5IGJ5dGUuXG4gKlxuICogTW9kZWxlZCBvbiBPcGVuTmV4dCdzIGBPcGVuTmV4dE5vZGVSZXNwb25zZWAgKE1JVCwgwqkgMjAyMiBTU1QpOlxuICogaHR0cHM6Ly9naXRodWIuY29tL29wZW5uZXh0anMvb3Blbm5leHRqcy1hd3MvYmxvYi9tYWluL3BhY2thZ2VzL29wZW4tbmV4dC9zcmMvaHR0cC9vcGVuTmV4dFJlc3BvbnNlLnRzXG4gKlxuICogRGVsaWJlcmF0ZWx5IG11Y2ggc21hbGxlciB0aGFuIHRoYXQgZmlsZS4gT3Blbk5leHQncyBzaGltIGRvdWJsZXMgYXMgYVxuICogYEJhc2VOZXh0UmVzcG9uc2VgIGFuZCByZS1pbXBsZW1lbnRzIHRoZSBtaWRkbGV3YXJlIGhlYWRlciBtZXJnZSwgYmVjYXVzZVxuICogT3Blbk5leHQgcmVpbXBsZW1lbnRzIHJvdXRpbmcuIFdlIGhhbmQgdGhpcyBvYmplY3QgdG8gYGhhbmRsZXIocmVxLCByZXMsIGN0eClgLFxuICogd2hpY2ggd3JhcHMgaXQgaW4gTmV4dC5qcydzIG93biBgTm9kZU5leHRSZXNwb25zZWBcbiAqIChgbmV4dC9kaXN0L3NlcnZlci9iYXNlLWh0dHAvbm9kZS5qc2ApIOKAlCBzbyB0aGUgY29udHJhY3QgaXMganVzdCBcImJlIGFcbiAqIGBTZXJ2ZXJSZXNwb25zZWBcIiwgYW5kIHRoZSBoZWFkZXItbWVyZ2UgbG9naWMgYmVsb25ncyB0byBgQG5leHQvcm91dGluZ2AuXG4gKi9cbmltcG9ydCB7IFNUQVRVU19DT0RFUyB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB0eXBlIHsgT3V0Z29pbmdIdHRwSGVhZGVycywgU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm0gfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtQ2FsbGJhY2sgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUhlYWQge1xuICByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXR1c01lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGbGF0IGhlYWRlciBtYXAgd2l0aCBgc2V0LWNvb2tpZWAgcmVtb3ZlZCDigJQgYSBgUmVjb3JkPHN0cmluZywgc3RyaW5nPmBcbiAgICogY2Fubm90IHJlcHJlc2VudCBpdCwgYW5kIGJvdGggc2lua3MgdGFrZSBjb29raWVzIHNlcGFyYXRlbHkuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkb25seSBjb29raWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPbmUgZW50cnkgcGVyIGBTZXQtQ29va2llYCBsaW5lLCB0aGUgd2F5IE5vZGUncyBgU2VydmVyUmVzcG9uc2VgIGVtaXRzIHRoZW06XG4gKiBlYWNoIGFycmF5IGVsZW1lbnQgaXMgYSB3aG9sZSBjb29raWUgYW5kIGEgc3RyaW5nIGlzIGV4YWN0bHkgb25lLiBOb3RoaW5nIGhlcmVcbiAqIHNwbGl0cyBvbiBjb21tYXMg4oCUIGBFeHBpcmVzPWAgZGF0ZXMgY29udGFpbiBvbmUgaW4gZXZlcnkgZm9ybWF0IChgV2VkLCAyMSBPY3RgLFxuICogYFdlZG5lc2RheSwgMjEtT2N0LTI2YCksIGFuZCBhIGhldXJpc3RpYyBzcGxpdCB0dXJucyBvbmUgY29va2llIGludG8gYSBzZXNzaW9uXG4gKiBjb29raWUgb24gdGhlIHdyb25nIHBhdGggcGx1cyBhIGp1bmsgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29va2llTGlzdCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pXG4gICAgLm1hcCgoY29va2llKSA9PiBTdHJpbmcoY29va2llKS50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbn1cblxudHlwZSBIZWFkZXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdO1xuXG4vKiogTm9kZSBuZXZlciBjYWxscyB0aGVzZSwgYW5kIE5leHQuanMgbmV2ZXIgY2FsbHMgdGhlbSBlaXRoZXIuICovXG5mdW5jdGlvbiB1bnN1cHBvcnRlZChtZXRob2Q6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGByZXMuJHttZXRob2R9KCkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY2RrLW5leHRqcyBydW50aW1lLiBOZXh0LmpzIGRvZXMgYCArXG4gICAgICBgbm90IGNhbGwgaXQsIHNvIHJlYWNoaW5nIHRoaXMgbWVhbnMgc29tZXRoaW5nIGVsc2UgaXMgd3JpdGluZyB0aGUgYCArXG4gICAgICBgcmVzcG9uc2UuYCxcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNoaW1TZXJ2ZXJSZXNwb25zZSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIHB1YmxpYyBzdGF0dXNDb2RlID0gMjAwO1xuICBwdWJsaWMgc3RhdHVzTWVzc2FnZT86IHN0cmluZztcbiAgcHVibGljIGhlYWRlcnNTZW50ID0gZmFsc2U7XG4gIC8qKiBBY2NlcHRlZCBhbmQgaWdub3JlZDogdGhlcmUgaXMgbm8gc29ja2V0IHRvIHNjaGVkdWxlIGEgYERhdGVgIGhlYWRlciBvbi4gKi9cbiAgcHVibGljIHNlbmREYXRlID0gZmFsc2U7XG4gIHB1YmxpYyBzdHJpY3RDb250ZW50TGVuZ3RoID0gZmFsc2U7XG4gIHB1YmxpYyBjaHVua2VkRW5jb2RpbmcgPSBmYWxzZTtcbiAgcHVibGljIHNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgdXNlQ2h1bmtlZEVuY29kaW5nQnlEZWZhdWx0ID0gZmFsc2U7XG4gIC8qKiBTZXQgYnkgTmV4dC5qcyBpbiBhIGZldyBwbGFjZXM7IG5ldmVyIHJlYWQgYnkgdXMuICovXG4gIHB1YmxpYyByZXE/OiB1bmtub3duO1xuICAvKipcbiAgICogSW5zdGFsbGVkIGJ5IHRoZSBydW50aW1lIGNvcmUgd2hlbiBpdCBpbnNlcnRzIGd6aXAsIHNvIHRoYXQgTmV4dC5qcydzXG4gICAqIHBlci1jaHVuayBgaWYgKFwiZmx1c2hcIiBpbiByZXMpIHJlcy5mbHVzaCgpYCBhY3R1YWxseSByZWFjaGVzIHRoZVxuICAgKiBjb21wcmVzc29yLiBXaXRob3V0IGl0LCBzdHJlYW1lZCBIVE1MIHNpdHMgaW4gemxpYidzIGJ1ZmZlci5cbiAgICovXG4gIHB1YmxpYyBmbHVzaD86ICgpID0+IHZvaWQ7XG5cbiAgLyoqIExvd2VyY2FzZWQgbmFtZSDihpIgb3JpZ2luYWwgY2FzaW5nICsgdmFsdWUsIG1pcnJvcmluZyBOb2RlJ3Mgb3duIHN0b3JlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlclN0b3JlID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBIZWFkZXJWYWx1ZSB9XG4gID4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8vIC0tLSBoZWFkZXIgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIHNldEhlYWRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBIZWFkZXJWYWx1ZSk6IHRoaXMge1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuc2V0KG5hbWUudG9Mb3dlckNhc2UoKSwgeyBuYW1lLCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaGVhZGVyU3RvcmUuZ2V0KGtleSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShjdXJyZW50LnZhbHVlKVxuICAgICAgPyBjdXJyZW50LnZhbHVlXG4gICAgICA6IFtTdHJpbmcoY3VycmVudC52YWx1ZSldO1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuc2V0KGtleSwge1xuICAgICAgbmFtZTogY3VycmVudC5uYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlcy5jb25jYXQodmFsdWUpLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlcihuYW1lOiBzdHJpbmcpOiBIZWFkZXJWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyU3RvcmUuZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSk/LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlcnMoKTogT3V0Z29pbmdIdHRwSGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycyA9IHt9O1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXMuaGVhZGVyU3RvcmUudmFsdWVzKCkpIHtcbiAgICAgIGhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRIZWFkZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmhlYWRlclN0b3JlLmtleXMoKV07XG4gIH1cblxuICBwdWJsaWMgaGFzSGVhZGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhlYWRlclN0b3JlLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUhlYWRlcihuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlclN0b3JlLmRlbGV0ZShuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlSGVhZChcbiAgICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgc3RhdHVzTWVzc2FnZU9ySGVhZGVycz86IHN0cmluZyB8IE91dGdvaW5nSHR0cEhlYWRlcnMgfCBIZWFkZXJWYWx1ZVtdLFxuICAgIG1heWJlSGVhZGVycz86IE91dGdvaW5nSHR0cEhlYWRlcnMgfCBIZWFkZXJWYWx1ZVtdLFxuICApOiB0aGlzIHtcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzID0gbWF5YmVIZWFkZXJzO1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzTWVzc2FnZU9ySGVhZGVycyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZU9ySGVhZGVycztcbiAgICB9IGVsc2UgaWYgKHN0YXR1c01lc3NhZ2VPckhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGVhZGVycyA9IHN0YXR1c01lc3NhZ2VPckhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIC8vIE5vZGUncyBmbGF0IGV2ZW4vb2RkIGBbbmFtZSwgdmFsdWUsIG5hbWUsIHZhbHVlXWAgZm9ybSwgd2hlcmUgYSBuYW1lXG4gICAgICAvLyBtYXkgcmVwZWF0IChvbmUgYFNldC1Db29raWVgIHBlciBjb29raWUpLCBzbywgYXMgTm9kZSBkb2VzLCBlYWNoIG5hbWVcbiAgICAgIC8vIHJlcGxhY2VzIHdoYXQgd2FzIHNldCBiZWZvcmUgYnV0IGl0cyB2YWx1ZXMgYWRkIHVwLiBUdXBsZXMgYXJlXG4gICAgICAvLyBmbGF0dGVuZWQgaW50byB0aGUgc2FtZSBmb3JtLlxuICAgICAgY29uc3QgZmxhdCA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1swXSkgPyBoZWFkZXJzLmZsYXQoKSA6IGhlYWRlcnM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsYXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVIZWFkZXIoU3RyaW5nKGZsYXRbaV0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxhdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZsYXRbaSArIDFdIGFzIEhlYWRlclZhbHVlO1xuICAgICAgICB0aGlzLmFwcGVuZEhlYWRlcihcbiAgICAgICAgICBTdHJpbmcoZmxhdFtpXSksXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRIZWFkZXIobmFtZSwgdmFsdWUgYXMgSGVhZGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGcmVlemVzIHN0YXR1cyArIGhlYWRlcnMgYW5kIGVtaXRzIHRoZW0gYXMgdGhlIGBcImhlYWRcImAgZXZlbnQuIENhbGxlZFxuICAgKiBleHBsaWNpdGx5IGJ5IE5leHQuanMgYmVmb3JlIGl0IHN0cmVhbXMsIGFuZCBsYXppbHkgYnkgdGhpcyBjbGFzcyBvbiB0aGVcbiAgICogZmlyc3QgYnl0ZSBvciBvbiBgZW5kKClgIHdoZW4gaXQgaXNuJ3QuXG4gICAqL1xuICBwdWJsaWMgZmx1c2hIZWFkZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWRlcnNTZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGVhZGVyc1NlbnQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdChcImhlYWRcIiwgdGhpcy5idWlsZEhlYWQoKSk7XG4gIH1cblxuICAvKiogRGVwcmVjYXRlZCBvbiBgU2VydmVyUmVzcG9uc2VgLCBidXQgYE5vZGVOZXh0UmVzcG9uc2Uuc2VudGAgcmVhZHMgaXQuICovXG4gIHB1YmxpYyBnZXQgZmluaXNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGFibGVFbmRlZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkKCk6IFJlc3BvbnNlSGVhZCB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGxldCBjb29raWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXMuaGVhZGVyU3RvcmUudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChrZXkgPT09IFwic2V0LWNvb2tpZVwiKSB7XG4gICAgICAgIGNvb2tpZXMgPSBzZXRDb29raWVMaXN0KHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJsb2NhdGlvblwiKSB7XG4gICAgICAgICAgLy8gTmV4dC5qcyBzZW5kcyBhbiBhcnJheSBgTG9jYXRpb25gIHdoZW4gYSBjYWNoZUhhbmRsZXIgYGdldGAgcmV0dXJuc1xuICAgICAgICAgIC8vIG51bGwgZm9yIGEgcGFnZSB0aGF0IGNhbGxzIGByZWRpcmVjdCgpYC4gQ29tbWEtam9pbmluZyBwcm9kdWNlcyBhXG4gICAgICAgICAgLy8gVVJMIHRoYXQgcmVzb2x2ZXMgdG8gbm90aGluZywgc28gdGFrZSB0aGUgbGFzdCB3cml0ZS5cbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Nkay1uZXh0anNdIE5leHQuanMgc2V0ICR7dmFsdWUubGVuZ3RofSBMb2NhdGlvbiBoZWFkZXJzIGAgK1xuICAgICAgICAgICAgICBgKCR7dmFsdWUuam9pbihcIiB8IFwiKX0pOyB1c2luZyB0aGUgbGFzdCBvbmUuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFN0cmluZyh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWUuam9pbihcIiwgXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhlYWRlcnNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiB0aGlzLnN0YXR1c0NvZGUsXG4gICAgICBzdGF0dXNNZXNzYWdlOiB0aGlzLnN0YXR1c01lc3NhZ2UgPz8gU1RBVFVTX0NPREVTW3RoaXMuc3RhdHVzQ29kZV0sXG4gICAgICBoZWFkZXJzLFxuICAgICAgY29va2llcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gLS0tIHN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgb3ZlcnJpZGUgX3RyYW5zZm9ybShcbiAgICBjaHVuazogdW5rbm93bixcbiAgICBfZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nLFxuICAgIGNhbGxiYWNrOiBUcmFuc2Zvcm1DYWxsYmFjayxcbiAgKTogdm9pZCB7XG4gICAgLy8gTGF6aWx5LCBiZWNhdXNlIE5leHQuanMgb25seSBjYWxscyBgZmx1c2hIZWFkZXJzKClgIG9uIHRoZSBwYXRocyB0aGF0XG4gICAgLy8gc3RyZWFtLiBgc2VuZFBheWxvYWRgIGp1c3Qgd3JpdGVzIGFuZCBlbmRzLlxuICAgIHRoaXMuZmx1c2hIZWFkZXJzKCk7XG4gICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIF9mbHVzaChjYWxsYmFjazogVHJhbnNmb3JtQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAvLyBBbiBlbXB0eSBib2R5IHN0aWxsIG5lZWRzIGEgc3RhdHVzIGxpbmUuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgLy8gLS0tIHRoZSByZXN0IG9mIHRoZSBTZXJ2ZXJSZXNwb25zZSBzdXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYWRkVHJhaWxlcnMoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcImFkZFRyYWlsZXJzXCIpO1xuICB9XG4gIHB1YmxpYyBhc3NpZ25Tb2NrZXQoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcImFzc2lnblNvY2tldFwiKTtcbiAgfVxuICBwdWJsaWMgZGV0YWNoU29ja2V0KCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJkZXRhY2hTb2NrZXRcIik7XG4gIH1cbiAgcHVibGljIHdyaXRlQ29udGludWUoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcIndyaXRlQ29udGludWVcIik7XG4gIH1cbiAgcHVibGljIHdyaXRlRWFybHlIaW50cygpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwid3JpdGVFYXJseUhpbnRzXCIpO1xuICB9XG4gIHB1YmxpYyB3cml0ZVByb2Nlc3NpbmcoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcIndyaXRlUHJvY2Vzc2luZ1wiKTtcbiAgfVxufVxuXG4vKipcbiAqIGBTaGltU2VydmVyUmVzcG9uc2VgIGlzIHN0cnVjdHVyYWxseSBhIGBTZXJ2ZXJSZXNwb25zZWAgZm9yIGV2ZXJ5dGhpbmcgTmV4dC5qc1xuICogdG91Y2hlcywgYnV0IG5vdCBub21pbmFsbHkgb25lIChubyBzb2NrZXQsIG5vIHRyYWlsZXJzKS4gVGhlIGVudHJ5cG9pbnRcbiAqIHNpZ25hdHVyZSB3YW50cyB0aGUgcmVhbCB0eXBlLCBzbyB0aGUgY2FzdCBpcyBjZW50cmFsaXplZCBoZXJlIHdpdGggdGhlXG4gKiByZWFzb25pbmcgYXR0YWNoZWQgcmF0aGVyIHRoYW4gcmVwZWF0ZWQgYXQgZWFjaCBjYWxsIHNpdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc1NlcnZlclJlc3BvbnNlKHJlczogU2hpbVNlcnZlclJlc3BvbnNlKTogU2VydmVyUmVzcG9uc2Uge1xuICByZXR1cm4gcmVzIGFzIHVua25vd24gYXMgU2VydmVyUmVzcG9uc2U7XG59XG4iXX0=
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9odHRwL3Jlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBDQSxzQ0FJQztBQStORCw0Q0FFQztBQS9RRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gseUNBQXlDO0FBRXpDLDZDQUF3QztBQWN4Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBaUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUlELG1FQUFtRTtBQUNuRSxTQUFTLFdBQVcsQ0FBQyxNQUFjO0lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2IsT0FBTyxNQUFNLDhEQUE4RDtRQUN6RSxvRUFBb0U7UUFDcEUsV0FBVyxDQUNkLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSx1QkFBUztJQUN4QyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLGFBQWEsQ0FBVTtJQUN2QixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLCtFQUErRTtJQUN4RSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLHdEQUF3RDtJQUNqRCxHQUFHLENBQVc7SUFFckIsNkVBQTZFO0lBQzVELFdBQVcsR0FBRyxJ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TSxlQUFlO1FBQ3BCLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBMU1ELGdEQTBNQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBdUI7SUFDdEQsT0FBTyxHQUFnQyxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc3ludGhlc2l6ZWQsIHN0cmVhbWluZyBgaHR0cC5TZXJ2ZXJSZXNwb25zZWAuXG4gKlxuICogVGhlIHJlc3BvbnNlICppcyogdGhlIHN0cmVhbTogdGhpcyBpcyBhIGBUcmFuc2Zvcm1gIHRoYXQgTmV4dC5qcyB3cml0ZXMgaW50byxcbiAqIGFuZCB0aGUgc2hlbGwgcGlwZXMgaW50byBpdHMgb3duIGJ5dGUgc2luayAoYGF3c2xhbWJkYS5IdHRwUmVzcG9uc2VTdHJlYW1gIGZvclxuICogRnVuY3Rpb25zLCB0aGUgcmVhbCBgU2VydmVyUmVzcG9uc2VgIGZvciBDb250YWluZXJzKS4gU3RhdHVzIGFuZCBoZWFkZXJzIGFyZVxuICogZW1pdHRlZCBvbmNlIGFzIGEge0BsaW5rIFJlc3BvbnNlSGVhZH0gb24gdGhlIGBcImhlYWRcImAgZXZlbnQsIGJlY2F1c2UgTGFtYmRhJ3NcbiAqIHJlc3BvbnNlIHN0cmVhbSBuZWVkcyB0aGVtIGluIGEgcHJlbHVkZSAqYmVmb3JlKiBhbnkgYm9keSBieXRlLlxuICpcbiAqIE1vZGVsZWQgb24gT3Blbk5leHQncyBgT3Blbk5leHROb2RlUmVzcG9uc2VgIChNSVQsIMKpIDIwMjIgU1NUKTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVubmV4dGpzL29wZW5uZXh0anMtYXdzL2Jsb2IvbWFpbi9wYWNrYWdlcy9vcGVuLW5leHQvc3JjL2h0dHAvb3Blbk5leHRSZXNwb25zZS50c1xuICpcbiAqIERlbGliZXJhdGVseSBtdWNoIHNtYWxsZXIgdGhhbiB0aGF0IGZpbGUuIE9wZW5OZXh0J3Mgc2hpbSBkb3VibGVzIGFzIGFcbiAqIGBCYXNlTmV4dFJlc3BvbnNlYCBhbmQgcmUtaW1wbGVtZW50cyB0aGUgbWlkZGxld2FyZSBoZWFkZXIgbWVyZ2UsIGJlY2F1c2VcbiAqIE9wZW5OZXh0IHJlaW1wbGVtZW50cyByb3V0aW5nLiBXZSBoYW5kIHRoaXMgb2JqZWN0IHRvIGBoYW5kbGVyKHJlcSwgcmVzLCBjdHgpYCxcbiAqIHdoaWNoIHdyYXBzIGl0IGluIE5leHQuanMncyBvd24gYE5vZGVOZXh0UmVzcG9uc2VgXG4gKiAoYG5leHQvZGlzdC9zZXJ2ZXIvYmFzZS1odHRwL25vZGUuanNgKSDigJQgc28gdGhlIGNvbnRyYWN0IGlzIGp1c3QgXCJiZSBhXG4gKiBgU2VydmVyUmVzcG9uc2VgXCIsIGFuZCB0aGUgaGVhZGVyLW1lcmdlIGxvZ2ljIGJlbG9uZ3MgdG8gYEBuZXh0L3JvdXRpbmdgLlxuICovXG5pbXBvcnQgeyBTVEFUVVNfQ09ERVMgfSBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgdHlwZSB7IE91dGdvaW5nSHR0cEhlYWRlcnMsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIm5vZGU6aHR0cFwiO1xuaW1wb3J0IHsgVHJhbnNmb3JtIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybUNhbGxiYWNrIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VIZWFkIHtcbiAgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyO1xuICByZWFkb25seSBzdGF0dXNNZXNzYWdlPzogc3RyaW5nO1xuICAvKipcbiAgICogRmxhdCBoZWFkZXIgbWFwIHdpdGggYHNldC1jb29raWVgIHJlbW92ZWQg4oCUIGEgYFJlY29yZDxzdHJpbmcsIHN0cmluZz5gXG4gICAqIGNhbm5vdCByZXByZXNlbnQgaXQsIGFuZCBib3RoIHNpbmtzIHRha2UgY29va2llcyBzZXBhcmF0ZWx5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVhZG9ubHkgY29va2llczogc3RyaW5nW107XG59XG5cbi8qKlxuICogT25lIGVudHJ5IHBlciBgU2V0LUNvb2tpZWAgbGluZSwgdGhlIHdheSBOb2RlJ3MgYFNlcnZlclJlc3BvbnNlYCBlbWl0cyB0aGVtOlxuICogZWFjaCBhcnJheSBlbGVtZW50IGlzIGEgd2hvbGUgY29va2llIGFuZCBhIHN0cmluZyBpcyBleGFjdGx5IG9uZS4gTm90aGluZyBoZXJlXG4gKiBzcGxpdHMgb24gY29tbWFzIOKAlCBgRXhwaXJlcz1gIGRhdGVzIGNvbnRhaW4gb25lIGluIGV2ZXJ5IGZvcm1hdCAoYFdlZCwgMjEgT2N0YCxcbiAqIGBXZWRuZXNkYXksIDIxLU9jdC0yNmApLCBhbmQgYSBoZXVyaXN0aWMgc3BsaXQgdHVybnMgb25lIGNvb2tpZSBpbnRvIGEgc2Vzc2lvblxuICogY29va2llIG9uIHRoZSB3cm9uZyBwYXRoIHBsdXMgYSBqdW5rIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvb2tpZUxpc3QodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKVxuICAgIC5tYXAoKGNvb2tpZSkgPT4gU3RyaW5nKGNvb2tpZSkudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbnR5cGUgSGVhZGVyVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBzdHJpbmdbXTtcblxuLyoqIE5vZGUgbmV2ZXIgY2FsbHMgdGhlc2UsIGFuZCBOZXh0LmpzIG5ldmVyIGNhbGxzIHRoZW0gZWl0aGVyLiAqL1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQobWV0aG9kOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgcmVzLiR7bWV0aG9kfSgpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGNkay1uZXh0anMgcnVudGltZS4gTmV4dC5qcyBkb2VzIGAgK1xuICAgICAgYG5vdCBjYWxsIGl0LCBzbyByZWFjaGluZyB0aGlzIG1lYW5zIHNvbWV0aGluZyBlbHNlIGlzIHdyaXRpbmcgdGhlIGAgK1xuICAgICAgYHJlc3BvbnNlLmAsXG4gICk7XG59XG5cbmV4cG9ydCBjbGFzcyBTaGltU2VydmVyUmVzcG9uc2UgZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBwdWJsaWMgc3RhdHVzQ29kZSA9IDIwMDtcbiAgcHVibGljIHN0YXR1c01lc3NhZ2U/OiBzdHJpbmc7XG4gIHB1YmxpYyBoZWFkZXJzU2VudCA9IGZhbHNlO1xuICAvKiogQWNjZXB0ZWQgYW5kIGlnbm9yZWQ6IHRoZXJlIGlzIG5vIHNvY2tldCB0byBzY2hlZHVsZSBhIGBEYXRlYCBoZWFkZXIgb24uICovXG4gIHB1YmxpYyBzZW5kRGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMgc3RyaWN0Q29udGVudExlbmd0aCA9IGZhbHNlO1xuICBwdWJsaWMgY2h1bmtlZEVuY29kaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBzaG91bGRLZWVwQWxpdmUgPSBmYWxzZTtcbiAgcHVibGljIHVzZUNodW5rZWRFbmNvZGluZ0J5RGVmYXVsdCA9IGZhbHNlO1xuICAvKiogU2V0IGJ5IE5leHQuanMgaW4gYSBmZXcgcGxhY2VzOyBuZXZlciByZWFkIGJ5IHVzLiAqL1xuICBwdWJsaWMgcmVxPzogdW5rbm93bjtcblxuICAvKiogTG93ZXJjYXNlZCBuYW1lIOKGkiBvcmlnaW5hbCBjYXNpbmcgKyB2YWx1ZSwgbWlycm9yaW5nIE5vZGUncyBvd24gc3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyU3RvcmUgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IEhlYWRlclZhbHVlIH1cbiAgPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLy8gLS0tIGhlYWRlciBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgc2V0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IEhlYWRlclZhbHVlKTogdGhpcyB7XG4gICAgdGhpcy5oZWFkZXJTdG9yZS5zZXQobmFtZS50b0xvd2VyQ2FzZSgpLCB7IG5hbWUsIHZhbHVlIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFwcGVuZEhlYWRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IGtleSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5oZWFkZXJTdG9yZS5nZXQoa2V5KTtcbiAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGN1cnJlbnQudmFsdWUpXG4gICAgICA/IGN1cnJlbnQudmFsdWVcbiAgICAgIDogW1N0cmluZyhjdXJyZW50LnZhbHVlKV07XG4gICAgdGhpcy5oZWFkZXJTdG9yZS5zZXQoa2V5LCB7XG4gICAgICBuYW1lOiBjdXJyZW50Lm5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVzLmNvbmNhdCh2YWx1ZSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVyKG5hbWU6IHN0cmluZyk6IEhlYWRlclZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJTdG9yZS5nZXQobmFtZS50b0xvd2VyQ2FzZSgpKT8udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVycygpOiBPdXRnb2luZ0h0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBoZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzID0ge307XG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgdGhpcy5oZWFkZXJTdG9yZS52YWx1ZXMoKSkge1xuICAgICAgaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaGVhZGVyU3RvcmUua2V5cygpXTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNIZWFkZXIobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyU3RvcmUuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlSGVhZGVyKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuZGVsZXRlKG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVIZWFkKFxuICAgIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgICBzdGF0dXNNZXNzYWdlT3JIZWFkZXJzPzogc3RyaW5nIHwgT3V0Z29pbmdIdHRwSGVhZGVycyB8IEhlYWRlclZhbHVlW10sXG4gICAgbWF5YmVIZWFkZXJzPzogT3V0Z29pbmdIdHRwSGVhZGVycyB8IEhlYWRlclZhbHVlW10sXG4gICk6IHRoaXMge1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgbGV0IGhlYWRlcnMgPSBtYXliZUhlYWRlcnM7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNNZXNzYWdlT3JIZWFkZXJzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLnN0YXR1c01lc3NhZ2UgPSBzdGF0dXNNZXNzYWdlT3JIZWFkZXJzO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzTWVzc2FnZU9ySGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoZWFkZXJzID0gc3RhdHVzTWVzc2FnZU9ySGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgLy8gTm9kZSdzIGZsYXQgZXZlbi9vZGQgYFtuYW1lLCB2YWx1ZSwgbmFtZSwgdmFsdWVdYCBmb3JtLCB3aGVyZSBhIG5hbWVcbiAgICAgIC8vIG1heSByZXBlYXQgKG9uZSBgU2V0LUNvb2tpZWAgcGVyIGNvb2tpZSksIHNvLCBhcyBOb2RlIGRvZXMsIGVhY2ggbmFtZVxuICAgICAgLy8gcmVwbGFjZXMgd2hhdCB3YXMgc2V0IGJlZm9yZSBidXQgaXRzIHZhbHVlcyBhZGQgdXAuIFR1cGxlcyBhcmVcbiAgICAgIC8vIGZsYXR0ZW5lZCBpbnRvIHRoZSBzYW1lIGZvcm0uXG4gICAgICBjb25zdCBmbGF0ID0gQXJyYXkuaXNBcnJheShoZWFkZXJzWzBdKSA/IGhlYWRlcnMuZmxhdCgpIDogaGVhZGVycztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxhdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB0aGlzLnJlbW92ZUhlYWRlcihTdHJpbmcoZmxhdFtpXSkpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGF0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmxhdFtpICsgMV0gYXMgSGVhZGVyVmFsdWU7XG4gICAgICAgIHRoaXMuYXBwZW5kSGVhZGVyKFxuICAgICAgICAgIFN0cmluZyhmbGF0W2ldKSxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgPyBTdHJpbmcodmFsdWUpIDogdmFsdWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnNldEhlYWRlcihuYW1lLCB2YWx1ZSBhcyBIZWFkZXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZsdXNoSGVhZGVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyZWV6ZXMgc3RhdHVzICsgaGVhZGVycyBhbmQgZW1pdHMgdGhlbSBhcyB0aGUgYFwiaGVhZFwiYCBldmVudC4gQ2FsbGVkXG4gICAqIGV4cGxpY2l0bHkgYnkgTmV4dC5qcyBiZWZvcmUgaXQgc3RyZWFtcywgYW5kIGxhemlseSBieSB0aGlzIGNsYXNzIG9uIHRoZVxuICAgKiBmaXJzdCBieXRlIG9yIG9uIGBlbmQoKWAgd2hlbiBpdCBpc24ndC5cbiAgICovXG4gIHB1YmxpYyBmbHVzaEhlYWRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oZWFkZXJzU2VudCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KFwiaGVhZFwiLCB0aGlzLmJ1aWxkSGVhZCgpKTtcbiAgfVxuXG4gIC8qKiBEZXByZWNhdGVkIG9uIGBTZXJ2ZXJSZXNwb25zZWAsIGJ1dCBgTm9kZU5leHRSZXNwb25zZS5zZW50YCByZWFkcyBpdC4gKi9cbiAgcHVibGljIGdldCBmaW5pc2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53cml0YWJsZUVuZGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEhlYWQoKTogUmVzcG9uc2VIZWFkIHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgbGV0IGNvb2tpZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgdGhpcy5oZWFkZXJTdG9yZS52YWx1ZXMoKSkge1xuICAgICAgY29uc3Qga2V5ID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGtleSA9PT0gXCJzZXQtY29va2llXCIpIHtcbiAgICAgICAgY29va2llcyA9IHNldENvb2tpZUxpc3QodmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcImxvY2F0aW9uXCIpIHtcbiAgICAgICAgICAvLyBOZXh0LmpzIHNlbmRzIGFuIGFycmF5IGBMb2NhdGlvbmAgd2hlbiBhIGNhY2hlSGFuZGxlciBgZ2V0YCByZXR1cm5zXG4gICAgICAgICAgLy8gbnVsbCBmb3IgYSBwYWdlIHRoYXQgY2FsbHMgYHJlZGlyZWN0KClgLiBDb21tYS1qb2luaW5nIHByb2R1Y2VzIGFcbiAgICAgICAgICAvLyBVUkwgdGhhdCByZXNvbHZlcyB0byBub3RoaW5nLCBzbyB0YWtlIHRoZSBsYXN0IHdyaXRlLlxuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbY2RrLW5leHRqc10gTmV4dC5qcyBzZXQgJHt2YWx1ZS5sZW5ndGh9IExvY2F0aW9uIGhlYWRlcnMgYCArXG4gICAgICAgICAgICAgIGAoJHt2YWx1ZS5qb2luKFwiIHwgXCIpfSk7IHVzaW5nIHRoZSBsYXN0IG9uZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gU3RyaW5nKHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZS5qb2luKFwiLCBcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaGVhZGVyc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1c0NvZGU6IHRoaXMuc3RhdHVzQ29kZSxcbiAgICAgIHN0YXR1c01lc3NhZ2U6IHRoaXMuc3RhdHVzTWVzc2FnZSA/PyBTVEFUVVNfQ09ERVNbdGhpcy5zdGF0dXNDb2RlXSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb29raWVzLFxuICAgIH07XG4gIH1cblxuICAvLyAtLS0gc3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBvdmVycmlkZSBfdHJhbnNmb3JtKFxuICAgIGNodW5rOiB1bmtub3duLFxuICAgIF9lbmNvZGluZzogQnVmZmVyRW5jb2RpbmcsXG4gICAgY2FsbGJhY2s6IFRyYW5zZm9ybUNhbGxiYWNrLFxuICApOiB2b2lkIHtcbiAgICAvLyBMYXppbHksIGJlY2F1c2UgTmV4dC5qcyBvbmx5IGNhbGxzIGBmbHVzaEhlYWRlcnMoKWAgb24gdGhlIHBhdGhzIHRoYXRcbiAgICAvLyBzdHJlYW0uIGBzZW5kUGF5bG9hZGAganVzdCB3cml0ZXMgYW5kIGVuZHMuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgX2ZsdXNoKGNhbGxiYWNrOiBUcmFuc2Zvcm1DYWxsYmFjayk6IHZvaWQge1xuICAgIC8vIEFuIGVtcHR5IGJvZHkgc3RpbGwgbmVlZHMgYSBzdGF0dXMgbGluZS5cbiAgICB0aGlzLmZsdXNoSGVhZGVycygpO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICAvLyAtLS0gdGhlIHJlc3Qgb2YgdGhlIFNlcnZlclJlc3BvbnNlIHN1cmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBhZGRUcmFpbGVycygpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwiYWRkVHJhaWxlcnNcIik7XG4gIH1cbiAgcHVibGljIGFzc2lnblNvY2tldCgpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwiYXNzaWduU29ja2V0XCIpO1xuICB9XG4gIHB1YmxpYyBkZXRhY2hTb2NrZXQoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcImRldGFjaFNvY2tldFwiKTtcbiAgfVxuICBwdWJsaWMgd3JpdGVDb250aW51ZSgpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwid3JpdGVDb250aW51ZVwiKTtcbiAgfVxuICBwdWJsaWMgd3JpdGVFYXJseUhpbnRzKCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJ3cml0ZUVhcmx5SGludHNcIik7XG4gIH1cbiAgcHVibGljIHdyaXRlUHJvY2Vzc2luZygpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwid3JpdGVQcm9jZXNzaW5nXCIpO1xuICB9XG59XG5cbi8qKlxuICogYFNoaW1TZXJ2ZXJSZXNwb25zZWAgaXMgc3RydWN0dXJhbGx5IGEgYFNlcnZlclJlc3BvbnNlYCBmb3IgZXZlcnl0aGluZyBOZXh0LmpzXG4gKiB0b3VjaGVzLCBidXQgbm90IG5vbWluYWxseSBvbmUgKG5vIHNvY2tldCwgbm8gdHJhaWxlcnMpLiBUaGUgZW50cnlwb2ludFxuICogc2lnbmF0dXJlIHdhbnRzIHRoZSByZWFsIHR5cGUsIHNvIHRoZSBjYXN0IGlzIGNlbnRyYWxpemVkIGhlcmUgd2l0aCB0aGVcbiAqIHJlYXNvbmluZyBhdHRhY2hlZCByYXRoZXIgdGhhbiByZXBlYXRlZCBhdCBlYWNoIGNhbGwgc2l0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzU2VydmVyUmVzcG9uc2UocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpOiBTZXJ2ZXJSZXNwb25zZSB7XG4gIHJldHVybiByZXMgYXMgdW5rbm93biBhcyBTZXJ2ZXJSZXNwb25zZTtcbn1cbiJdfQ==
@@ -76,11 +76,15 @@ function pipeToSink(req, res, sink, options) {
76
76
  const stages = [];
77
77
  const gzip = shouldGzip(req, res, head, options);
78
78
  if (gzip) {
79
- const compressor = (0, node_zlib_1.createGzip)();
80
- // Next.js calls `res.flush()` after each chunk it writes
81
- // (`next/dist/server/pipe-readable.js`); without forwarding it, streamed
82
- // HTML sits in zlib's buffer and the response arrives all at once.
83
- res.flush = () => compressor.flush(node_zlib_1.constants.Z_SYNC_FLUSH);
79
+ // A sync flush on every chunk, so that each one reaches the client as
80
+ // soon as it is written rather than sitting in zlib's buffer until the
81
+ // next. This has to be zlib's own per-write flag: forwarding Next.js's
82
+ // `res.flush()` (`next/dist/server/pipe-readable.js`) to
83
+ // `compressor.flush()` queued the flush in zlib *ahead of* the chunk
84
+ // whenever backpressure held that chunk in `res`'s buffer, so the last
85
+ // chunk before a pause stayed in zlib - a `<Suspense>` fallback arrived
86
+ // only with the slow boundary it was standing in for (issue #321).
87
+ const compressor = (0, node_zlib_1.createGzip)({ flush: node_zlib_1.constants.Z_SYNC_FLUSH });
84
88
  stages.push(compressor);
85
89
  }
86
90
  if (sink.padEmptyBody) {
@@ -185,4 +189,4 @@ function padEmptyBody() {
185
189
  },
186
190
  });
187
191
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h0dHAvc2luay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStGQSxnQ0F5REM7QUFpQ0Qsa0NBc0JDO0FBL01EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILDZDQUFrRDtBQUNsRCxtREFBZ0Q7QUFDaEQseUNBQWtEO0FBa0NsRDs7OztHQUlHO0FBQ0gsTUFBTSxZQUFZLEdBQ2hCLDhGQUE4RixDQUFDO0FBRWpHOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdkQsa0RBQWtEO0FBQ2xELE1BQU0sWUFBWSxHQUFHLHFDQUFxQyxDQUFDO0FBTzNEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsR0FBd0IsRUFDeEIsR0FBdUIsRUFDdkIsSUFBa0IsRUFDbEIsT0FBb0I7SUFFcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsNEVBQTRFO1FBQzVFLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQWtCLEVBQUUs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c0NvbnRlbnQiOlsiLyoqXG4gKiBDb25uZWN0aW5nIGEge0BsaW5rIFNoaW1TZXJ2ZXJSZXNwb25zZX0gdG8gdGhlIGJ5dGVzLW91dCBzaWRlIG9mIGEgc2hlbGwsIGFuZFxuICogdGhlIG9uZSB0aGluZyB0aGF0IGhhcyB0byBoYXBwZW4gb24gdGhlIHdheTogZ3ppcC5cbiAqXG4gKiBUaGlzIGxpdmVzIGluIHNoYXJlZCBydW50aW1lIGNvZGUgcmF0aGVyIHRoYW4gaW4gdGhlIExhbWJkYSBzaGVsbCBvbiBwdXJwb3NlLlxuICogTmVpdGhlciBtYW5hZ2VkIGxheWVyIGNhbiBjb21wcmVzcyBhICpzdHJlYW1lZCogcmVzcG9uc2U6XG4gKlxuICogLSBBUEkgR2F0ZXdheSdzIGBtaW5Db21wcmVzc2lvblNpemVgIGlzIHNldCAoYHNyYy9uZXh0anMtYXBpLnRzYCkgYnV0IGluZXJ0LFxuICogICBiZWNhdXNlIGNkay1uZXh0anMgYWxzbyBzZXRzIGBSZXNwb25zZVRyYW5zZmVyTW9kZS5TVFJFQU1gLCBhbmQgU1RSRUFNIGRyb3BzXG4gKiAgIGNvbnRlbnQgZW5jb2Rpbmcgb3V0cmlnaHQg4oCUIFwiSWYgeW91IHdhbnQgdG8gY29tcHJlc3MgeW91ciBpbnRlZ3JhdGlvblxuICogICByZXNwb25zZSwgZG8gdGhpcyBpbiB5b3VyIGludGVncmF0aW9uXCIuXG4gKiAtIENsb3VkRnJvbnQgcmVxdWlyZXMgdGhlIG9yaWdpbiB0byBzZW5kIGBDb250ZW50LUxlbmd0aGAsIHdoaWNoIGEgc3RyZWFtZWRcbiAqICAgcmVzcG9uc2UgYnkgZGVmaW5pdGlvbiBkb2VzIG5vdC4gSXQgc3RpbGwgY29tcHJlc3NlcyBub24tc3RyZWFtZWQgcmVzcG9uc2VzXG4gKiAgIGFuZCBTMyBhc3NldHMsIHNvIHRoZSBnYXAgaXMgZXhhY3RseSBzdHJlYW1lZCBIVE1MIGFuZCBSU0MgcGF5bG9hZHMg4oCUIHRoZVxuICogICBsYXJnZXN0IHRleHQgcmVzcG9uc2VzIHdlIHNlcnZlLlxuICpcbiAqIFVudGlsIHRoZSBjb250YWluZXIgcGF0aCB3YXMgZHJvcHBlZCwgTGFtYmRhIFdlYiBBZGFwdGVyIGRpZCB0aGlzIGZvciB1cywgd2hpY2hcbiAqIGlzIHdoeSBub3RoaW5nIGluIHRoZSBvbGQgY29kZSBtZW50aW9ucyBpdC4gKipEb24ndCBcImZpeFwiIHRoZSBBUEkgR2F0ZXdheSBvclxuICogQ2xvdWRGcm9udCBzZXR0aW5ncyBleHBlY3RpbmcgdGhlbSB0byB0YWtlIG92ZXIuKipcbiAqXG4gKiBnemlwIHJhdGhlciB0aGFuIGJyb3RsaTogYnJvdGxpJ3Mgc3RyZWFtaW5nIHRocm91Z2hwdXQgYXQgZGVmYXVsdCBxdWFsaXR5IGlzXG4gKiBwb29yLCBhbmQgQ2xvdWRGcm9udCBwcmVmZXJzIGBicmAgb25seSB3aGVuIHRoZSBvcmlnaW4gZGlkbid0IGFscmVhZHkgZW5jb2RlIOKAlFxuICogd2hpY2ggc3RvcHMgYXBwbHlpbmcgdGhlIG1vbWVudCB3ZSBzZXQgYGNvbnRlbnQtZW5jb2RpbmdgIG91cnNlbHZlcy5cbiAqL1xuaW1wb3J0IHsgVHJhbnNmb3JtLCBXcml0YWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNvbnN0YW50cywgY3JlYXRlR3ppcCB9IGZyb20gXCJub2RlOnpsaWJcIjtcbmltcG9ydCB0eXBlIHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc3BvbnNlSGVhZCwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vcmVzcG9uc2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVNpbmsge1xuICAvKipcbiAgICogU2V0IGJ5IHRoZSBMYW1iZGEgc2luaywgZm9yIGJvdGggaW50ZWdyYXRpb25zOiBhIHN0cmVhbWVkIExhbWJkYSByZXNwb25zZVxuICAgKiB3aXRoIHplcm8gcGF5bG9hZCBieXRlcyBhZnRlciB0aGUgbWV0YWRhdGEgZGVsaW1pdGVyIGlzIG5vdCByZWNvZ25pemVkIGFzIGFcbiAgICogbWV0YWRhdGEgcmVzcG9uc2UgYXQgYWxsLCBzbyBhIHNpbmdsZSBzcGFjZSBpcyB3cml0dGVuIGluc3RlYWQgb2Ygbm90aGluZy5cbiAgICpcbiAgICogQVBJIEdhdGV3YXkgYW5zd2VycyA1MDIuIEEgRnVuY3Rpb24gVVJMIGlzIHdvcnNlIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdFxuICAgKiB3b3JrZWQ6IHRoZSBwcmVsdWRlIGlzIGRpc2NhcmRlZCBhbmQgdGhlIHJlc3BvbnNlIGFycml2ZXMgYXMgYSBiYXJlXG4gICAqIGAyMDAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCB3aXRoIGFuIGVtcHR5IGJvZHksIG5vbmUgb2YgdGhlIGFwcCdzIGhlYWRlcnMsXG4gICAqIGFuZCBhbiBIVFRQLzIgc3RyZWFtIHRoYXQgZG9lcyBub3QgY2xvc2UgY2xlYW5seSDigJQgd2hhdGV2ZXIgdGhlIHJlYWwgc3RhdHVzXG4gICAqIHdhcy4gTWVhc3VyZWQgYWdhaW5zdCBhIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGRlcGxveW1lbnQ6IGBIRUFEYCBvbiBhIDQwNFxuICAgKiBwYWdlIGFuc3dlcmVkIGAyMDBgLCBhbmQgYSBzZXJ2ZXIgYWN0aW9uIHdob3NlIHJlcGx5IGlzIGVtcHR5IChhbiBhY3Rpb24gdGhhdFxuICAgKiBvbmx5IGByZWRpcmVjdCgpYHMsIHdoaWNoIE5leHQuanMgYW5zd2VycyB3aXRoIGB4LWFjdGlvbi1yZWRpcmVjdGAgYW5kIG5vXG4gICAqIGJvZHkpIGxvc3QgdGhlIHJlZGlyZWN0IGhlYWRlciBhbmQgc28gbmV2ZXIgbmF2aWdhdGVkLlxuICAgKlxuICAgKiBUaGUgcHJlLWFkYXB0ZXIgaW1hZ2UgaGFuZGxlciBjYXJyaWVkIHRoZSBzYW1lIHdvcmthcm91bmQgZm9yIDMwNHMuIFJGQyA5MTEwXG4gICAqIGZvcmJpZHMgYSBib2R5IG9uIDIwNC8zMDQsIGFuZCBhIHNwYWNlIHRlY2huaWNhbGx5IHZpb2xhdGVzIHRoYXQsIGJ1dCBsb3NpbmdcbiAgICogdGhlIHN0YXR1cyBlbnRpcmVseSBpcyB0aGUgd29yc2UgZmFpbHVyZSDigJQgYW5kIG9uIHRoZSBDbG91ZEZyb250IHBhdGggYVxuICAgKiBjb25kaXRpb25hbCByZXF1ZXN0IGNhbm5vdCByZWFjaCB0aGUgb3JpZ2luIGFueXdheSwgYmVjYXVzZSBgaWYtbm9uZS1tYXRjaGBcbiAgICogaXMgbm90IGluIHRoZSBkeW5hbWljIGNhY2hlIHBvbGljeSdzIGhlYWRlciBhbGxvd2xpc3QuIFRoZSBjb250YWluZXIgc2lua1xuICAgKiB3cml0ZXMgdG8gYSByZWFsIGBTZXJ2ZXJSZXNwb25zZWAgYW5kIGRvZXMgbm90IHNldCB0aGlzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFkRW1wdHlCb2R5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENhbGxlZCBleGFjdGx5IG9uY2UsIGJlZm9yZSBhbnkgYm9keSBieXRlLCB3aXRoIHRoZSBmaW5hbCBoZWFkLiBSZXR1cm5zIHRoZVxuICAgKiBzdHJlYW0gdGhlIGJvZHkgaXMgd3JpdHRlbiB0bzsge0BsaW5rIHBpcGVUb1Npbmt9IGVuZHMgaXQuXG4gICAqL1xuICBiZWdpbihoZWFkOiBSZXNwb25zZUhlYWQpOiBXcml0YWJsZTtcbn1cblxuLyoqXG4gKiBDb250ZW50IHR5cGVzIHdvcnRoIGNvbXByZXNzaW5nLiBFdmVyeXRoaW5nIE5leHQgc3RyZWFtcyBhcyBIVE1MIG9yIGFuIFJTQ1xuICogcGF5bG9hZCBpcyBgdGV4dC8qYDsgaW1hZ2VzIGFuZCBmb250cyBhcmUgYWxyZWFkeSBjb21wcmVzc2VkLCBhbmQgZ3ppcHBpbmcgYW5cbiAqIG9wdGltaXplZCBBVklGIGp1c3QgYnVybnMgQ1BVLlxuICovXG5jb25zdCBDT01QUkVTU0lCTEUgPVxuICAvXig/OnRleHRcXC98YXBwbGljYXRpb25cXC8oPzpqc29ufGphdmFzY3JpcHR8eG1sfG1hbmlmZXN0fHJzc1xcK3htbHxhdG9tXFwreG1sKXxpbWFnZVxcL3N2Z1xcK3htbCkvO1xuXG4vKipcbiAqIFN0YXR1c2VzIHdob3NlIGJvZHkgbXVzdCBub3QgYmUgY29tcHJlc3NlZDogMjA0IGFuZCAzMDQgaGF2ZSBub25lLCBhbmQgYSAyMDYnc1xuICogYm9keSBpcyBhIGJ5dGUgcmFuZ2Ugb2YgdGhlICp1bmNvbXByZXNzZWQqIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIDIwNiBpcyByZWFjaGFibGUg4oCUIGBzZXJ2ZVN0YXRpY0ZpbGVgIGlzIGBzZW5kYCB1bmRlcm5lYXRoLCB3aGljaCBhZHZlcnRpc2VzXG4gKiBgQWNjZXB0LVJhbmdlczogYnl0ZXNgIGFuZCBob25vcnMgYFJhbmdlYCBvbiB0aGUgc3RhdGljIEhUTUwgdGhlIHJ1bnRpbWUgc2VydmVzXG4gKiBpdHNlbGYuIEd6aXBwaW5nIG9uZSBwcm9kdWNlZCBhIHJlc3BvbnNlIHdob3NlIGBDb250ZW50LVJhbmdlYCBzdGlsbCBkZXNjcmliZWRcbiAqIHRoZSB1bmNvbXByZXNzZWQgc2xpY2UgKGB3aXRoR3ppcEhlYWRlcnNgIGRyb3BzIGBjb250ZW50LWxlbmd0aGAgYnV0IGNhbm5vdFxuICogcmVzdGF0ZSBhIHJhbmdlKSwgc28gdGhlIGNsaWVudCBnb3QgYnl0ZXMgdGhhdCBkaWQgbm90IG1hdGNoIHdoYXQgaXQgYXNrZWQgZm9yLlxuICovXG5jb25zdCBVTkNPTVBSRVNTQUJMRV9TVEFUVVMgPSBuZXcgU2V0KFsyMDQsIDIwNiwgMzA0XSk7XG5cbi8qKiBgY29tcHJlc3Npb25gJ3Mgb3duIHRlc3QgZm9yIHRoZSBkaXJlY3RpdmUuICovXG5jb25zdCBOT19UUkFOU0ZPUk0gPSAvKD86XnwsKVxccyo/bm8tdHJhbnNmb3JtXFxzKj8oPzosfCQpL2k7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZU9wdGlvbnMge1xuICAvKiogYG5leHQuY29uZmlnYCBgY29tcHJlc3NgLiAqL1xuICByZWFkb25seSBjb21wcmVzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQaXBlIGByZXNgIGludG8gYHNpbmtgLCBnemlwcGluZyB3aGVuIHRoYXQgaXMgYm90aCBhbGxvd2VkIGFuZCB1c2VmdWwuXG4gKlxuICogUmVzb2x2ZXMgd2hlbiB0aGUgc2luaydzIHN0cmVhbSBoYXMgZmluaXNoZWQsIHdoaWNoIGZvciBMYW1iZGEgaXMgdGhlIHBvaW50IHRoZVxuICogY2xpZW50IGhhcyB0aGUgd2hvbGUgcmVzcG9uc2UuIE11c3QgYmUgY2FsbGVkICpiZWZvcmUqIGFueXRoaW5nIHdyaXRlcyB0b1xuICogYHJlc2AsIGJlY2F1c2UgaXQgc3Vic2NyaWJlcyB0byB0aGUgb25lLXNob3QgYFwiaGVhZFwiYCBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGVUb1NpbmsoXG4gIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgcmVzOiBTaGltU2VydmVyUmVzcG9uc2UsXG4gIHNpbms6IFJlc3BvbnNlU2luayxcbiAgb3B0aW9uczogUGlwZU9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgcGlwaW5nID0gZmFsc2U7XG4gICAgcmVzLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIC8vIERlc3Ryb3llZCBiZWZvcmUgdGhlIGhlYWQgd2VudCBvdXQsIGFuZCB3aXRob3V0IGFuIGVycm9yOiBhIGNsaWVudCB0aGF0XG4gICAgLy8gZGlzY29ubmVjdGVkIGJlZm9yZSB0aGUgZmlyc3QgYnl0ZSwgd2hpY2ggYGhhbmRsZSgpYCBhbnN3ZXJzIHdpdGhcbiAgICAvLyBgcmVzLmRlc3Ryb3koKWAuIGBUcmFuc2Zvcm0uZGVzdHJveSgpYCB3aXRoIG5vIGFyZ3VtZW50IGVtaXRzIG9ubHlcbiAgICAvLyBgXCJjbG9zZVwiYCwgYW5kIHRoZSBwaXBlbGluZSBiZWxvdyBuZXZlciBzdGFydGVkLCBzbyBub3RoaW5nIGVsc2UgY2FuIGV2ZXJcbiAgICAvLyBzZXR0bGUgdGhpcyBwcm9taXNlIOKAlCBsZWF2aW5nIGBoYW5kbGUoKWAgYXdhaXRpbmcgaXQgZm9yZXZlciwgaXRzXG4gICAgLy8gYHdhaXRVbnRpbGAgd29yayAoSVNSIHJldmFsaWRhdGlvbiwgY2FjaGUgd3JpdGVzKSBuZXZlciBmbHVzaGVkIGFuZCB0aGVcbiAgICAvLyBpbi1mbGlnaHQgcmVuZGVyJ3MgY2xvc3VyZSByZXRhaW5lZCBmb3IgdGhlIGxpZmUgb2YgdGhlIHByb2Nlc3MuXG4gICAgcmVzLm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICBpZiAoIXBpcGluZykge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzLm9uY2UoXCJoZWFkXCIsIChoZWFkOiBSZXNwb25zZUhlYWQpID0+IHtcbiAgICAgIHBpcGluZyA9IHRydWU7XG4gICAgICBjb25zdCBzdGFnZXM6IEFycmF5PFRyYW5zZm9ybSB8IFdyaXRhYmxlPiA9IFtdO1xuXG4gICAgICBjb25zdCBnemlwID0gc2hvdWxkR3ppcChyZXEsIHJlcywgaGVhZCwgb3B0aW9ucyk7XG4gICAgICBpZiAoZ3ppcCkge1xuICAgICAgICBjb25zdCBjb21wcmVzc29yID0gY3JlYXRlR3ppcCgpO1xuICAgICAgICAvLyBOZXh0LmpzIGNhbGxzIGByZXMuZmx1c2goKWAgYWZ0ZXIgZWFjaCBjaHVuayBpdCB3cml0ZXNcbiAgICAgICAgLy8gKGBuZXh0L2Rpc3Qvc2VydmVyL3BpcGUtcmVhZGFibGUuanNgKTsgd2l0aG91dCBmb3J3YXJkaW5nIGl0LCBzdHJlYW1lZFxuICAgICAgICAvLyBIVE1MIHNpdHMgaW4gemxpYidzIGJ1ZmZlciBhbmQgdGhlIHJlc3BvbnNlIGFycml2ZXMgYWxsIGF0IG9uY2UuXG4gICAgICAgIHJlcy5mbHVzaCA9ICgpID0+IGNvbXByZXNzb3IuZmx1c2goY29uc3RhbnRzLlpfU1lOQ19GTFVTSCk7XG4gICAgICAgIHN0YWdlcy5wdXNoKGNvbXByZXNzb3IpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbmsucGFkRW1wdHlCb2R5KSB7XG4gICAgICAgIHN0YWdlcy5wdXNoKHBhZEVtcHR5Qm9keSgpKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YWdlcy5wdXNoKHNpbmsuYmVnaW4oZ3ppcCA/IHdpdGhHemlwSGVhZGVycyhoZWFkKSA6IGhlYWQpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFRoaXMgcnVucyBpbnNpZGUgd2hpY2hldmVyIGByZXNgIGNhbGwgZmx1c2hlZCB0aGUgaGVhZCDigJQgdXN1YWxseSBhXG4gICAgICAgIC8vIGB3cml0ZSgpYCBmcm9tIGRlZXAgaW5zaWRlIE5leHQuanMg4oCUIHNvIGFuIGVzY2FwaW5nIHRocm93IGxhbmRzIHRoZXJlLFxuICAgICAgICAvLyB0aGUgcGlwZWxpbmUgYmVsb3cgbmV2ZXIgc3RhcnRzLCBhbmQgbm90aGluZyB3b3VsZCBzZXR0bGUgdGhpc1xuICAgICAgICAvLyBwcm9taXNlOiBgaGFuZGxlKClgIHdvdWxkIGhhbmcuIEEgc2luaydzIGB3cml0ZUhlYWRgIHJlamVjdGluZyBhXG4gICAgICAgIC8vIGhlYWRlciB2YWx1ZSBpcyBob3cgaXQgaGFwcGVucy4gRGVzdHJveWluZyBgcmVzYCBpcyB3aGF0IHN0b3BzIHRoZVxuICAgICAgICAvLyB3cml0ZXI7IHRoZSBgXCJlcnJvclwiYCB0aGF0IGVtaXRzIGlzIGEgbm8tb3AgYWZ0ZXIgdGhlIGByZWplY3RgLlxuICAgICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgICAgIHN0YWdlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXMuZGVzdHJveShlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBpcGVsaW5lKHJlcywgLi4uKHN0YWdlcyBhcyBbV3JpdGFibGVdKSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkR3ppcChcbiAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgaGVhZDogUmVzcG9uc2VIZWFkLFxuICBvcHRpb25zOiBQaXBlT3B0aW9ucyxcbik6IGJvb2xlYW4ge1xuICBpZiAoIW9wdGlvbnMuY29tcHJlc3MpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHJlcS5tZXRob2QgPT09IFwiSEVBRFwiIHx8IFVOQ09NUFJFU1NBQkxFX1NUQVRVUy5oYXMoaGVhZC5zdGF0dXNDb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBOZXh0LmpzIGVuY29kZXMgc29tZSByZXNwb25zZXMgaXRzZWxmOyBkb3VibGUtZW5jb2RpbmcgaXMgbm90IGEgdGhpbmcuXG4gIGlmIChyZXMuaGFzSGVhZGVyKFwiY29udGVudC1lbmNvZGluZ1wiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIUNPTVBSRVNTSUJMRS50ZXN0KGhlYWQuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA/PyBcIlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgcmVzcG9uc2UncyBvcHQtb3V0LCB3aGljaCBgbmV4dCBzdGFydGAncyBgY29tcHJlc3Npb25gIGhvbm9ycyB0b286IGFuXG4gIC8vIFNTRSBzdHJlYW0gc2V0cyBpdCBzbyB0aGF0IG5vdGhpbmcgYnVmZmVycyBpdHMgZXZlbnRzLlxuICBpZiAoTk9fVFJBTlNGT1JNLnRlc3QoaGVhZC5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSA/PyBcIlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gYWNjZXB0c0d6aXAocmVxLmhlYWRlcnNbXCJhY2NlcHQtZW5jb2RpbmdcIl0pO1xufVxuXG4vKipcbiAqIEEgYHE9MGAgb24gZ3ppcCBpcyBhIHJlZnVzYWwsIGFuZCBib3RoIGAqYCBmb3JtcyBoYXZlIHRvIGJlIGhvbm9yZWQsIHNvIHRoaXNcbiAqIHBhcnNlcyByYXRoZXIgdGhhbiBzdWJzdHJpbmctbWF0Y2hpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY2NlcHRzR3ppcChoZWFkZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmpvaW4oXCIsXCIpIDogaGVhZGVyO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxldCB3aWxkY2FyZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgIGNvbnN0IFtyYXdOYW1lLCAuLi5wYXJhbXNdID0gcGFydC5zcGxpdChcIjtcIik7XG4gICAgY29uc3QgbmFtZSA9IHJhd05hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5hbWUgIT09IFwiZ3ppcFwiICYmIG5hbWUgIT09IFwiKlwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcSA9IHBhcmFtc1xuICAgICAgLm1hcCgocCkgPT4gcC50cmltKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5maW5kKChwKSA9PiBwLnN0YXJ0c1dpdGgoXCJxPVwiKSk7XG4gICAgY29uc3QgYWNjZXB0ZWQgPSBxID09PSB1bmRlZmluZWQgfHwgTnVtYmVyKHEuc2xpY2UoMikpID4gMDtcbiAgICBpZiAobmFtZSA9PT0gXCJnemlwXCIpIHtcbiAgICAgIHJldHVybiBhY2NlcHRlZDtcbiAgICB9XG4gICAgd2lsZGNhcmQgPSBhY2NlcHRlZDtcbiAgfVxuICByZXR1cm4gd2lsZGNhcmQgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHdpdGhHemlwSGVhZGVycyhoZWFkOiBSZXNwb25zZUhlYWQpOiBSZXNwb25zZUhlYWQge1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIC4uLmhlYWQuaGVhZGVycyxcbiAgICBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJnemlwXCIsXG4gIH07XG4gIC8vIFRoZSBsZW5ndGggd2Ugd2VyZSB0b2xkIGlzIHRoZSB1bmNvbXByZXNzZWQgb25lLCBhbmQgd2UgZG8gbm90IGtub3cgdGhlXG4gIC8vIGNvbXByZXNzZWQgb25lIHVudGlsIHRoZSBzdHJlYW0gZW5kcy5cbiAgZGVsZXRlIGhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXTtcbiAgY29uc3QgdmFyeSA9IGhlYWRlcnMudmFyeTtcbiAgaWYgKCF2YXJ5KSB7XG4gICAgaGVhZGVycy52YXJ5ID0gXCJBY2NlcHQtRW5jb2RpbmdcIjtcbiAgfSBlbHNlIGlmICghL1xcYmFjY2VwdC1lbmNvZGluZ1xcYi9pLnRlc3QodmFyeSkpIHtcbiAgICBoZWFkZXJzLnZhcnkgPSBgJHt2YXJ5fSwgQWNjZXB0LUVuY29kaW5nYDtcbiAgfVxuICByZXR1cm4geyAuLi5oZWFkLCBoZWFkZXJzIH07XG59XG5cbi8qKiBTZWUge0BsaW5rIFJlc3BvbnNlU2luay5wYWRFbXB0eUJvZHl9LiAqL1xuZnVuY3Rpb24gcGFkRW1wdHlCb2R5KCk6IFRyYW5zZm9ybSB7XG4gIGxldCB3cm90ZVNvbWV0aGluZyA9IGZhbHNlO1xuICByZXR1cm4gbmV3IFRyYW5zZm9ybSh7XG4gICAgdHJhbnNmb3JtKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7XG4gICAgICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG4gICAgfSxcbiAgICBmbHVzaChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sobnVsbCwgd3JvdGVTb21ldGhpbmcgPyB1bmRlZmluZWQgOiBcIiBcIik7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h0dHAvc2luay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStGQSxnQ0E2REM7QUFpQ0Qsa0NBc0JDO0FBbk5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILDZDQUFrRDtBQUNsRCxtREFBZ0Q7QUFDaEQseUNBQWtEO0FBa0NsRDs7OztHQUlHO0FBQ0gsTUFBTSxZQUFZLEdBQ2hCLDhGQUE4RixDQUFDO0FBRWpHOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdkQsa0RBQWtEO0FBQ2xELE1BQU0sWUFBWSxHQUFHLHFDQUFxQyxDQUFDO0FBTzNEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsR0FBd0IsRUFDeEIsR0FBdUIsRUFDdkIsSUFBa0IsRUFDbEIsT0FBb0I7SUFFcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsNEVBQTRFO1FBQzVFLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQWtCLEVBQUUs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Q0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbm5lY3RpbmcgYSB7QGxpbmsgU2hpbVNlcnZlclJlc3BvbnNlfSB0byB0aGUgYnl0ZXMtb3V0IHNpZGUgb2YgYSBzaGVsbCwgYW5kXG4gKiB0aGUgb25lIHRoaW5nIHRoYXQgaGFzIHRvIGhhcHBlbiBvbiB0aGUgd2F5OiBnemlwLlxuICpcbiAqIFRoaXMgbGl2ZXMgaW4gc2hhcmVkIHJ1bnRpbWUgY29kZSByYXRoZXIgdGhhbiBpbiB0aGUgTGFtYmRhIHNoZWxsIG9uIHB1cnBvc2UuXG4gKiBOZWl0aGVyIG1hbmFnZWQgbGF5ZXIgY2FuIGNvbXByZXNzIGEgKnN0cmVhbWVkKiByZXNwb25zZTpcbiAqXG4gKiAtIEFQSSBHYXRld2F5J3MgYG1pbkNvbXByZXNzaW9uU2l6ZWAgaXMgc2V0IChgc3JjL25leHRqcy1hcGkudHNgKSBidXQgaW5lcnQsXG4gKiAgIGJlY2F1c2UgY2RrLW5leHRqcyBhbHNvIHNldHMgYFJlc3BvbnNlVHJhbnNmZXJNb2RlLlNUUkVBTWAsIGFuZCBTVFJFQU0gZHJvcHNcbiAqICAgY29udGVudCBlbmNvZGluZyBvdXRyaWdodCDigJQgXCJJZiB5b3Ugd2FudCB0byBjb21wcmVzcyB5b3VyIGludGVncmF0aW9uXG4gKiAgIHJlc3BvbnNlLCBkbyB0aGlzIGluIHlvdXIgaW50ZWdyYXRpb25cIi5cbiAqIC0gQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgb3JpZ2luIHRvIHNlbmQgYENvbnRlbnQtTGVuZ3RoYCwgd2hpY2ggYSBzdHJlYW1lZFxuICogICByZXNwb25zZSBieSBkZWZpbml0aW9uIGRvZXMgbm90LiBJdCBzdGlsbCBjb21wcmVzc2VzIG5vbi1zdHJlYW1lZCByZXNwb25zZXNcbiAqICAgYW5kIFMzIGFzc2V0cywgc28gdGhlIGdhcCBpcyBleGFjdGx5IHN0cmVhbWVkIEhUTUwgYW5kIFJTQyBwYXlsb2FkcyDigJQgdGhlXG4gKiAgIGxhcmdlc3QgdGV4dCByZXNwb25zZXMgd2Ugc2VydmUuXG4gKlxuICogVW50aWwgdGhlIGNvbnRhaW5lciBwYXRoIHdhcyBkcm9wcGVkLCBMYW1iZGEgV2ViIEFkYXB0ZXIgZGlkIHRoaXMgZm9yIHVzLCB3aGljaFxuICogaXMgd2h5IG5vdGhpbmcgaW4gdGhlIG9sZCBjb2RlIG1lbnRpb25zIGl0LiAqKkRvbid0IFwiZml4XCIgdGhlIEFQSSBHYXRld2F5IG9yXG4gKiBDbG91ZEZyb250IHNldHRpbmdzIGV4cGVjdGluZyB0aGVtIHRvIHRha2Ugb3Zlci4qKlxuICpcbiAqIGd6aXAgcmF0aGVyIHRoYW4gYnJvdGxpOiBicm90bGkncyBzdHJlYW1pbmcgdGhyb3VnaHB1dCBhdCBkZWZhdWx0IHF1YWxpdHkgaXNcbiAqIHBvb3IsIGFuZCBDbG91ZEZyb250IHByZWZlcnMgYGJyYCBvbmx5IHdoZW4gdGhlIG9yaWdpbiBkaWRuJ3QgYWxyZWFkeSBlbmNvZGUg4oCUXG4gKiB3aGljaCBzdG9wcyBhcHBseWluZyB0aGUgbW9tZW50IHdlIHNldCBgY29udGVudC1lbmNvZGluZ2Agb3Vyc2VsdmVzLlxuICovXG5pbXBvcnQgeyBUcmFuc2Zvcm0sIFdyaXRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gXCJub2RlOnN0cmVhbS9wcm9taXNlc1wiO1xuaW1wb3J0IHsgY29uc3RhbnRzLCBjcmVhdGVHemlwIH0gZnJvbSBcIm5vZGU6emxpYlwiO1xuaW1wb3J0IHR5cGUgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkLCBTaGltU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9yZXNwb25zZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlU2luayB7XG4gIC8qKlxuICAgKiBTZXQgYnkgdGhlIExhbWJkYSBzaW5rLCBmb3IgYm90aCBpbnRlZ3JhdGlvbnM6IGEgc3RyZWFtZWQgTGFtYmRhIHJlc3BvbnNlXG4gICAqIHdpdGggemVybyBwYXlsb2FkIGJ5dGVzIGFmdGVyIHRoZSBtZXRhZGF0YSBkZWxpbWl0ZXIgaXMgbm90IHJlY29nbml6ZWQgYXMgYVxuICAgKiBtZXRhZGF0YSByZXNwb25zZSBhdCBhbGwsIHNvIGEgc2luZ2xlIHNwYWNlIGlzIHdyaXR0ZW4gaW5zdGVhZCBvZiBub3RoaW5nLlxuICAgKlxuICAgKiBBUEkgR2F0ZXdheSBhbnN3ZXJzIDUwMi4gQSBGdW5jdGlvbiBVUkwgaXMgd29yc2UgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0XG4gICAqIHdvcmtlZDogdGhlIHByZWx1ZGUgaXMgZGlzY2FyZGVkIGFuZCB0aGUgcmVzcG9uc2UgYXJyaXZlcyBhcyBhIGJhcmVcbiAgICogYDIwMCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gIHdpdGggYW4gZW1wdHkgYm9keSwgbm9uZSBvZiB0aGUgYXBwJ3MgaGVhZGVycyxcbiAgICogYW5kIGFuIEhUVFAvMiBzdHJlYW0gdGhhdCBkb2VzIG5vdCBjbG9zZSBjbGVhbmx5IOKAlCB3aGF0ZXZlciB0aGUgcmVhbCBzdGF0dXNcbiAgICogd2FzLiBNZWFzdXJlZCBhZ2FpbnN0IGEgYE5leHRqc0dsb2JhbEZ1bmN0aW9uc2AgZGVwbG95bWVudDogYEhFQURgIG9uIGEgNDA0XG4gICAqIHBhZ2UgYW5zd2VyZWQgYDIwMGAsIGFuZCBhIHNlcnZlciBhY3Rpb24gd2hvc2UgcmVwbHkgaXMgZW1wdHkgKGFuIGFjdGlvbiB0aGF0XG4gICAqIG9ubHkgYHJlZGlyZWN0KClgcywgd2hpY2ggTmV4dC5qcyBhbnN3ZXJzIHdpdGggYHgtYWN0aW9uLXJlZGlyZWN0YCBhbmQgbm9cbiAgICogYm9keSkgbG9zdCB0aGUgcmVkaXJlY3QgaGVhZGVyIGFuZCBzbyBuZXZlciBuYXZpZ2F0ZWQuXG4gICAqXG4gICAqIFRoZSBwcmUtYWRhcHRlciBpbWFnZSBoYW5kbGVyIGNhcnJpZWQgdGhlIHNhbWUgd29ya2Fyb3VuZCBmb3IgMzA0cy4gUkZDIDkxMTBcbiAgICogZm9yYmlkcyBhIGJvZHkgb24gMjA0LzMwNCwgYW5kIGEgc3BhY2UgdGVjaG5pY2FsbHkgdmlvbGF0ZXMgdGhhdCwgYnV0IGxvc2luZ1xuICAgKiB0aGUgc3RhdHVzIGVudGlyZWx5IGlzIHRoZSB3b3JzZSBmYWlsdXJlIOKAlCBhbmQgb24gdGhlIENsb3VkRnJvbnQgcGF0aCBhXG4gICAqIGNvbmRpdGlvbmFsIHJlcXVlc3QgY2Fubm90IHJlYWNoIHRoZSBvcmlnaW4gYW55d2F5LCBiZWNhdXNlIGBpZi1ub25lLW1hdGNoYFxuICAgKiBpcyBub3QgaW4gdGhlIGR5bmFtaWMgY2FjaGUgcG9saWN5J3MgaGVhZGVyIGFsbG93bGlzdC4gVGhlIGNvbnRhaW5lciBzaW5rXG4gICAqIHdyaXRlcyB0byBhIHJlYWwgYFNlcnZlclJlc3BvbnNlYCBhbmQgZG9lcyBub3Qgc2V0IHRoaXMuXG4gICAqL1xuICByZWFkb25seSBwYWRFbXB0eUJvZHk/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIGV4YWN0bHkgb25jZSwgYmVmb3JlIGFueSBib2R5IGJ5dGUsIHdpdGggdGhlIGZpbmFsIGhlYWQuIFJldHVybnMgdGhlXG4gICAqIHN0cmVhbSB0aGUgYm9keSBpcyB3cml0dGVuIHRvOyB7QGxpbmsgcGlwZVRvU2lua30gZW5kcyBpdC5cbiAgICovXG4gIGJlZ2luKGhlYWQ6IFJlc3BvbnNlSGVhZCk6IFdyaXRhYmxlO1xufVxuXG4vKipcbiAqIENvbnRlbnQgdHlwZXMgd29ydGggY29tcHJlc3NpbmcuIEV2ZXJ5dGhpbmcgTmV4dCBzdHJlYW1zIGFzIEhUTUwgb3IgYW4gUlNDXG4gKiBwYXlsb2FkIGlzIGB0ZXh0LypgOyBpbWFnZXMgYW5kIGZvbnRzIGFyZSBhbHJlYWR5IGNvbXByZXNzZWQsIGFuZCBnemlwcGluZyBhblxuICogb3B0aW1pemVkIEFWSUYganVzdCBidXJucyBDUFUuXG4gKi9cbmNvbnN0IENPTVBSRVNTSUJMRSA9XG4gIC9eKD86dGV4dFxcL3xhcHBsaWNhdGlvblxcLyg/Ompzb258amF2YXNjcmlwdHx4bWx8bWFuaWZlc3R8cnNzXFwreG1sfGF0b21cXCt4bWwpfGltYWdlXFwvc3ZnXFwreG1sKS87XG5cbi8qKlxuICogU3RhdHVzZXMgd2hvc2UgYm9keSBtdXN0IG5vdCBiZSBjb21wcmVzc2VkOiAyMDQgYW5kIDMwNCBoYXZlIG5vbmUsIGFuZCBhIDIwNidzXG4gKiBib2R5IGlzIGEgYnl0ZSByYW5nZSBvZiB0aGUgKnVuY29tcHJlc3NlZCogcmVwcmVzZW50YXRpb24uXG4gKlxuICogMjA2IGlzIHJlYWNoYWJsZSDigJQgYHNlcnZlU3RhdGljRmlsZWAgaXMgYHNlbmRgIHVuZGVybmVhdGgsIHdoaWNoIGFkdmVydGlzZXNcbiAqIGBBY2NlcHQtUmFuZ2VzOiBieXRlc2AgYW5kIGhvbm9ycyBgUmFuZ2VgIG9uIHRoZSBzdGF0aWMgSFRNTCB0aGUgcnVudGltZSBzZXJ2ZXNcbiAqIGl0c2VsZi4gR3ppcHBpbmcgb25lIHByb2R1Y2VkIGEgcmVzcG9uc2Ugd2hvc2UgYENvbnRlbnQtUmFuZ2VgIHN0aWxsIGRlc2NyaWJlZFxuICogdGhlIHVuY29tcHJlc3NlZCBzbGljZSAoYHdpdGhHemlwSGVhZGVyc2AgZHJvcHMgYGNvbnRlbnQtbGVuZ3RoYCBidXQgY2Fubm90XG4gKiByZXN0YXRlIGEgcmFuZ2UpLCBzbyB0aGUgY2xpZW50IGdvdCBieXRlcyB0aGF0IGRpZCBub3QgbWF0Y2ggd2hhdCBpdCBhc2tlZCBmb3IuXG4gKi9cbmNvbnN0IFVOQ09NUFJFU1NBQkxFX1NUQVRVUyA9IG5ldyBTZXQoWzIwNCwgMjA2LCAzMDRdKTtcblxuLyoqIGBjb21wcmVzc2lvbmAncyBvd24gdGVzdCBmb3IgdGhlIGRpcmVjdGl2ZS4gKi9cbmNvbnN0IE5PX1RSQU5TRk9STSA9IC8oPzpefCwpXFxzKj9uby10cmFuc2Zvcm1cXHMqPyg/Oix8JCkvaTtcblxuZXhwb3J0IGludGVyZmFjZSBQaXBlT3B0aW9ucyB7XG4gIC8qKiBgbmV4dC5jb25maWdgIGBjb21wcmVzc2AuICovXG4gIHJlYWRvbmx5IGNvbXByZXNzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBpcGUgYHJlc2AgaW50byBgc2lua2AsIGd6aXBwaW5nIHdoZW4gdGhhdCBpcyBib3RoIGFsbG93ZWQgYW5kIHVzZWZ1bC5cbiAqXG4gKiBSZXNvbHZlcyB3aGVuIHRoZSBzaW5rJ3Mgc3RyZWFtIGhhcyBmaW5pc2hlZCwgd2hpY2ggZm9yIExhbWJkYSBpcyB0aGUgcG9pbnQgdGhlXG4gKiBjbGllbnQgaGFzIHRoZSB3aG9sZSByZXNwb25zZS4gTXVzdCBiZSBjYWxsZWQgKmJlZm9yZSogYW55dGhpbmcgd3JpdGVzIHRvXG4gKiBgcmVzYCwgYmVjYXVzZSBpdCBzdWJzY3JpYmVzIHRvIHRoZSBvbmUtc2hvdCBgXCJoZWFkXCJgIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlwZVRvU2luayhcbiAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc2luazogUmVzcG9uc2VTaW5rLFxuICBvcHRpb25zOiBQaXBlT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBwaXBpbmcgPSBmYWxzZTtcbiAgICByZXMub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgLy8gRGVzdHJveWVkIGJlZm9yZSB0aGUgaGVhZCB3ZW50IG91dCwgYW5kIHdpdGhvdXQgYW4gZXJyb3I6IGEgY2xpZW50IHRoYXRcbiAgICAvLyBkaXNjb25uZWN0ZWQgYmVmb3JlIHRoZSBmaXJzdCBieXRlLCB3aGljaCBgaGFuZGxlKClgIGFuc3dlcnMgd2l0aFxuICAgIC8vIGByZXMuZGVzdHJveSgpYC4gYFRyYW5zZm9ybS5kZXN0cm95KClgIHdpdGggbm8gYXJndW1lbnQgZW1pdHMgb25seVxuICAgIC8vIGBcImNsb3NlXCJgLCBhbmQgdGhlIHBpcGVsaW5lIGJlbG93IG5ldmVyIHN0YXJ0ZWQsIHNvIG5vdGhpbmcgZWxzZSBjYW4gZXZlclxuICAgIC8vIHNldHRsZSB0aGlzIHByb21pc2Ug4oCUIGxlYXZpbmcgYGhhbmRsZSgpYCBhd2FpdGluZyBpdCBmb3JldmVyLCBpdHNcbiAgICAvLyBgd2FpdFVudGlsYCB3b3JrIChJU1IgcmV2YWxpZGF0aW9uLCBjYWNoZSB3cml0ZXMpIG5ldmVyIGZsdXNoZWQgYW5kIHRoZVxuICAgIC8vIGluLWZsaWdodCByZW5kZXIncyBjbG9zdXJlIHJldGFpbmVkIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2Vzcy5cbiAgICByZXMub25jZShcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGlmICghcGlwaW5nKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXMub25jZShcImhlYWRcIiwgKGhlYWQ6IFJlc3BvbnNlSGVhZCkgPT4ge1xuICAgICAgcGlwaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHN0YWdlczogQXJyYXk8VHJhbnNmb3JtIHwgV3JpdGFibGU+ID0gW107XG5cbiAgICAgIGNvbnN0IGd6aXAgPSBzaG91bGRHemlwKHJlcSwgcmVzLCBoZWFkLCBvcHRpb25zKTtcbiAgICAgIGlmIChnemlwKSB7XG4gICAgICAgIC8vIEEgc3luYyBmbHVzaCBvbiBldmVyeSBjaHVuaywgc28gdGhhdCBlYWNoIG9uZSByZWFjaGVzIHRoZSBjbGllbnQgYXNcbiAgICAgICAgLy8gc29vbiBhcyBpdCBpcyB3cml0dGVuIHJhdGhlciB0aGFuIHNpdHRpbmcgaW4gemxpYidzIGJ1ZmZlciB1bnRpbCB0aGVcbiAgICAgICAgLy8gbmV4dC4gVGhpcyBoYXMgdG8gYmUgemxpYidzIG93biBwZXItd3JpdGUgZmxhZzogZm9yd2FyZGluZyBOZXh0LmpzJ3NcbiAgICAgICAgLy8gYHJlcy5mbHVzaCgpYCAoYG5leHQvZGlzdC9zZXJ2ZXIvcGlwZS1yZWFkYWJsZS5qc2ApIHRvXG4gICAgICAgIC8vIGBjb21wcmVzc29yLmZsdXNoKClgIHF1ZXVlZCB0aGUgZmx1c2ggaW4gemxpYiAqYWhlYWQgb2YqIHRoZSBjaHVua1xuICAgICAgICAvLyB3aGVuZXZlciBiYWNrcHJlc3N1cmUgaGVsZCB0aGF0IGNodW5rIGluIGByZXNgJ3MgYnVmZmVyLCBzbyB0aGUgbGFzdFxuICAgICAgICAvLyBjaHVuayBiZWZvcmUgYSBwYXVzZSBzdGF5ZWQgaW4gemxpYiAtIGEgYDxTdXNwZW5zZT5gIGZhbGxiYWNrIGFycml2ZWRcbiAgICAgICAgLy8gb25seSB3aXRoIHRoZSBzbG93IGJvdW5kYXJ5IGl0IHdhcyBzdGFuZGluZyBpbiBmb3IgKGlzc3VlICMzMjEpLlxuICAgICAgICBjb25zdCBjb21wcmVzc29yID0gY3JlYXRlR3ppcCh7IGZsdXNoOiBjb25zdGFudHMuWl9TWU5DX0ZMVVNIIH0pO1xuICAgICAgICBzdGFnZXMucHVzaChjb21wcmVzc29yKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaW5rLnBhZEVtcHR5Qm9keSkge1xuICAgICAgICBzdGFnZXMucHVzaChwYWRFbXB0eUJvZHkoKSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBzdGFnZXMucHVzaChzaW5rLmJlZ2luKGd6aXAgPyB3aXRoR3ppcEhlYWRlcnMoaGVhZCkgOiBoZWFkKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBUaGlzIHJ1bnMgaW5zaWRlIHdoaWNoZXZlciBgcmVzYCBjYWxsIGZsdXNoZWQgdGhlIGhlYWQg4oCUIHVzdWFsbHkgYVxuICAgICAgICAvLyBgd3JpdGUoKWAgZnJvbSBkZWVwIGluc2lkZSBOZXh0LmpzIOKAlCBzbyBhbiBlc2NhcGluZyB0aHJvdyBsYW5kcyB0aGVyZSxcbiAgICAgICAgLy8gdGhlIHBpcGVsaW5lIGJlbG93IG5ldmVyIHN0YXJ0cywgYW5kIG5vdGhpbmcgd291bGQgc2V0dGxlIHRoaXNcbiAgICAgICAgLy8gcHJvbWlzZTogYGhhbmRsZSgpYCB3b3VsZCBoYW5nLiBBIHNpbmsncyBgd3JpdGVIZWFkYCByZWplY3RpbmcgYVxuICAgICAgICAvLyBoZWFkZXIgdmFsdWUgaXMgaG93IGl0IGhhcHBlbnMuIERlc3Ryb3lpbmcgYHJlc2AgaXMgd2hhdCBzdG9wcyB0aGVcbiAgICAgICAgLy8gd3JpdGVyOyB0aGUgYFwiZXJyb3JcImAgdGhhdCBlbWl0cyBpcyBhIG5vLW9wIGFmdGVyIHRoZSBgcmVqZWN0YC5cbiAgICAgICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgICAgICBzdGFnZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmVzLmRlc3Ryb3koZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwaXBlbGluZShyZXMsIC4uLihzdGFnZXMgYXMgW1dyaXRhYmxlXSkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEd6aXAoXG4gIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgcmVzOiBTaGltU2VydmVyUmVzcG9uc2UsXG4gIGhlYWQ6IFJlc3BvbnNlSGVhZCxcbiAgb3B0aW9uczogUGlwZU9wdGlvbnMsXG4pOiBib29sZWFuIHtcbiAgaWYgKCFvcHRpb25zLmNvbXByZXNzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChyZXEubWV0aG9kID09PSBcIkhFQURcIiB8fCBVTkNPTVBSRVNTQUJMRV9TVEFUVVMuaGFzKGhlYWQuc3RhdHVzQ29kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gTmV4dC5qcyBlbmNvZGVzIHNvbWUgcmVzcG9uc2VzIGl0c2VsZjsgZG91YmxlLWVuY29kaW5nIGlzIG5vdCBhIHRoaW5nLlxuICBpZiAocmVzLmhhc0hlYWRlcihcImNvbnRlbnQtZW5jb2RpbmdcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFDT01QUkVTU0lCTEUudGVzdChoZWFkLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPz8gXCJcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHJlc3BvbnNlJ3Mgb3B0LW91dCwgd2hpY2ggYG5leHQgc3RhcnRgJ3MgYGNvbXByZXNzaW9uYCBob25vcnMgdG9vOiBhblxuICAvLyBTU0Ugc3RyZWFtIHNldHMgaXQgc28gdGhhdCBub3RoaW5nIGJ1ZmZlcnMgaXRzIGV2ZW50cy5cbiAgaWYgKE5PX1RSQU5TRk9STS50ZXN0KGhlYWQuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0gPz8gXCJcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGFjY2VwdHNHemlwKHJlcS5oZWFkZXJzW1wiYWNjZXB0LWVuY29kaW5nXCJdKTtcbn1cblxuLyoqXG4gKiBBIGBxPTBgIG9uIGd6aXAgaXMgYSByZWZ1c2FsLCBhbmQgYm90aCBgKmAgZm9ybXMgaGF2ZSB0byBiZSBob25vcmVkLCBzbyB0aGlzXG4gKiBwYXJzZXMgcmF0aGVyIHRoYW4gc3Vic3RyaW5nLW1hdGNoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWNjZXB0c0d6aXAoaGVhZGVyOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5qb2luKFwiLFwiKSA6IGhlYWRlcjtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgd2lsZGNhcmQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgcGFydCBvZiB2YWx1ZS5zcGxpdChcIixcIikpIHtcbiAgICBjb25zdCBbcmF3TmFtZSwgLi4ucGFyYW1zXSA9IHBhcnQuc3BsaXQoXCI7XCIpO1xuICAgIGNvbnN0IG5hbWUgPSByYXdOYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuYW1lICE9PSBcImd6aXBcIiAmJiBuYW1lICE9PSBcIipcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHEgPSBwYXJhbXNcbiAgICAgIC5tYXAoKHApID0+IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAuZmluZCgocCkgPT4gcC5zdGFydHNXaXRoKFwicT1cIikpO1xuICAgIGNvbnN0IGFjY2VwdGVkID0gcSA9PT0gdW5kZWZpbmVkIHx8IE51bWJlcihxLnNsaWNlKDIpKSA+IDA7XG4gICAgaWYgKG5hbWUgPT09IFwiZ3ppcFwiKSB7XG4gICAgICByZXR1cm4gYWNjZXB0ZWQ7XG4gICAgfVxuICAgIHdpbGRjYXJkID0gYWNjZXB0ZWQ7XG4gIH1cbiAgcmV0dXJuIHdpbGRjYXJkID8/IGZhbHNlO1xufVxuXG5mdW5jdGlvbiB3aXRoR3ppcEhlYWRlcnMoaGVhZDogUmVzcG9uc2VIZWFkKTogUmVzcG9uc2VIZWFkIHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAuLi5oZWFkLmhlYWRlcnMsXG4gICAgXCJjb250ZW50LWVuY29kaW5nXCI6IFwiZ3ppcFwiLFxuICB9O1xuICAvLyBUaGUgbGVuZ3RoIHdlIHdlcmUgdG9sZCBpcyB0aGUgdW5jb21wcmVzc2VkIG9uZSwgYW5kIHdlIGRvIG5vdCBrbm93IHRoZVxuICAvLyBjb21wcmVzc2VkIG9uZSB1bnRpbCB0aGUgc3RyZWFtIGVuZHMuXG4gIGRlbGV0ZSBoZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl07XG4gIGNvbnN0IHZhcnkgPSBoZWFkZXJzLnZhcnk7XG4gIGlmICghdmFyeSkge1xuICAgIGhlYWRlcnMudmFyeSA9IFwiQWNjZXB0LUVuY29kaW5nXCI7XG4gIH0gZWxzZSBpZiAoIS9cXGJhY2NlcHQtZW5jb2RpbmdcXGIvaS50ZXN0KHZhcnkpKSB7XG4gICAgaGVhZGVycy52YXJ5ID0gYCR7dmFyeX0sIEFjY2VwdC1FbmNvZGluZ2A7XG4gIH1cbiAgcmV0dXJuIHsgLi4uaGVhZCwgaGVhZGVycyB9O1xufVxuXG4vKiogU2VlIHtAbGluayBSZXNwb25zZVNpbmsucGFkRW1wdHlCb2R5fS4gKi9cbmZ1bmN0aW9uIHBhZEVtcHR5Qm9keSgpOiBUcmFuc2Zvcm0ge1xuICBsZXQgd3JvdGVTb21ldGhpbmcgPSBmYWxzZTtcbiAgcmV0dXJuIG5ldyBUcmFuc2Zvcm0oe1xuICAgIHRyYW5zZm9ybShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICAgIH0sXG4gICAgZmx1c2goY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHdyb3RlU29tZXRoaW5nID8gdW5kZWZpbmVkIDogXCIgXCIpO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_crypto_1 = require("node:crypto");
3
4
  const node_stream_1 = require("node:stream");
4
5
  const node_zlib_1 = require("node:zlib");
5
6
  const request_1 = require("./request");
@@ -63,18 +64,49 @@ describe("pipeToSink compression", () => {
63
64
  });
64
65
  expect(sink.head?.headers.vary).toBe("Cookie, Accept-Encoding");
65
66
  });
66
- it("forwards res.flush() to the compressor so streamed HTML is not buffered", async () => {
67
- const seen = [];
68
- const sink = await run((res) => {
69
- res.setHeader("Content-Type", "text/html");
70
- res.write("<html>");
71
- // Next.js does exactly this after every chunk (`pipe-readable.js`).
72
- res.flush?.();
73
- seen.push(1);
74
- res.end("</html>");
75
- });
76
- expect(seen).toEqual([1]);
77
- expect((0, node_zlib_1.gunzipSync)(sink.body).toString("utf-8")).toBe("<html></html>");
67
+ // Issue #321. Next.js writes each RSC/HTML chunk and then waits for `drain`
68
+ // (`pipe-readable.js`). Under backpressure a chunk sits in `res`'s buffer
69
+ // while earlier ones compress, and a flush issued at write time ran ahead of
70
+ // it, so the last chunk before a pause - a `<Suspense>` fallback - stayed in
71
+ // zlib until the slow boundary resolved.
72
+ it("delivers every written chunk before a pause, even under backpressure", async () => {
73
+ const chunks = [];
74
+ const slowSink = {
75
+ begin: () => new node_stream_1.Writable({
76
+ write(chunk, _encoding, callback) {
77
+ chunks.push(Buffer.from(chunk));
78
+ setImmediate(callback);
79
+ },
80
+ }),
81
+ };
82
+ const res = new response_1.ShimServerResponse();
83
+ const done = (0, sink_1.pipeToSink)(requestWith({ "accept-encoding": "gzip" }), res, slowSink, { compress: true });
84
+ res.setHeader("Content-Type", "text/x-component");
85
+ // Barely compressible, so each chunk outgrows every stream's buffer.
86
+ const body = (0, node_crypto_1.randomBytes)(50_000).toString("hex");
87
+ let written = 0;
88
+ for (const size of [40_000, 30_000, 30_000]) {
89
+ // `pipe-readable.js`, verbatim apart from the types.
90
+ const ok = res.write(body.slice(written, written + size));
91
+ const flushable = res;
92
+ if ("flush" in flushable && typeof flushable.flush === "function") {
93
+ flushable.flush();
94
+ }
95
+ if (!ok) {
96
+ await new Promise((resolve) => res.once("drain", resolve));
97
+ }
98
+ written += size;
99
+ }
100
+ const soFar = () => (0, node_zlib_1.gunzipSync)(Buffer.concat(chunks), {
101
+ finishFlush: node_zlib_1.constants.Z_SYNC_FLUSH,
102
+ }).toString("utf-8");
103
+ for (let i = 0; i < 50 && soFar().length < body.length; i++) {
104
+ await new Promise((resolve) => setTimeout(resolve, 10));
105
+ }
106
+ expect(soFar()).toBe(body);
107
+ res.end();
108
+ await done;
109
+ expect((0, node_zlib_1.gunzipSync)(Buffer.concat(chunks)).toString("utf-8")).toBe(body);
78
110
  });
79
111
  it.each([
80
112
  ["an incompressible content type", { "content-type": "image/avif" }],
@@ -254,4 +286,4 @@ describe("acceptsGzip", () => {
254
286
  expect((0, sink_1.acceptsGzip)(["br", "gzip"])).toBe(true);
255
287
  });
256
288
  });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bnRpbWUvaHR0cC9zaW5rLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBdUM7QUFDdkMseUNBQXVDO0FBQ3ZDLHVDQUFnRDtBQUNoRCx5Q0FBOEQ7QUFDOUQsaUNBQStEO0FBRS9ELE1BQU0sY0FBYztJQUlpQjtJQUg1QixJQUFJLENBQWdCO0lBQ1gsTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUV0QyxZQUFtQyxlQUFlLEtBQUs7UUFBcEIsaUJBQVksR0FBWixZQUFZLENBQVE7SUFBRyxDQUFDO0lBRXBELEtBQUssQ0FBQyxJQUFrQjtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxzQkFBUSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVE7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsT0FBK0IsRUFDL0IsTUFBTSxHQUFHLEtBQUs7SUFFZCxPQUFPLElBQUksNkJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFRRCxpRkFBaUY7QUFDakYsS0FBSyxVQUFVLEdBQUcsQ0FDaEIsS0FBd0MsRUFDeEMsVUFBb0IsRUFBRTtJQUV0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QUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLGtCQUFXLEVBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tIFwibm9kZTp6bGliXCI7XG5pbXBvcnQgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkLCBTaGltU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgYWNjZXB0c0d6aXAsIHBpcGVUb1NpbmssIFJlc3BvbnNlU2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuY2xhc3MgQ29sbGVjdGluZ1NpbmsgaW1wbGVtZW50cyBSZXNwb25zZVNpbmsge1xuICBwdWJsaWMgaGVhZD86IFJlc3BvbnNlSGVhZDtcbiAgcHVibGljIHJlYWRvbmx5IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHBhZEVtcHR5Qm9keSA9IGZhbHNlKSB7fVxuXG4gIHB1YmxpYyBiZWdpbihoZWFkOiBSZXNwb25zZUhlYWQpOiBXcml0YWJsZSB7XG4gICAgdGhpcy5oZWFkID0gaGVhZDtcbiAgICBjb25zdCBjaHVua3MgPSB0aGlzLmNodW5rcztcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKHtcbiAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBib2R5KCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5jaHVua3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RXaXRoKFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBtZXRob2QgPSBcIkdFVFwiLFxuKTogU2hpbUluY29taW5nTWVzc2FnZSB7XG4gIHJldHVybiBuZXcgU2hpbUluY29taW5nTWVzc2FnZSh7IG1ldGhvZCwgdXJsOiBcIi9cIiwgaGVhZGVycyB9KTtcbn1cblxuaW50ZXJmYWNlIFBpcGVDYXNlIHtcbiAgcmVhZG9ubHkgcmVxPzogU2hpbUluY29taW5nTWVzc2FnZTtcbiAgcmVhZG9ubHkgY29tcHJlc3M/OiBib29sZWFuO1xuICByZWFkb25seSBwYWRFbXB0eUJvZHk/OiBib29sZWFuO1xufVxuXG4vKiogUnVucyBvbmUgcmVzcG9uc2UgdGhyb3VnaCB0aGUgc2luayBhbmQgcmVzb2x2ZXMgb25jZSB0aGUgc2luayBpcyBmaW5pc2hlZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bihcbiAgd3JpdGU6IChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gdm9pZCxcbiAgb3B0aW9uczogUGlwZUNhc2UgPSB7fSxcbik6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgY29uc3QgcmVxID0gb3B0aW9ucy5yZXEgPz8gcmVxdWVzdFdpdGgoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcbiAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKG9wdGlvbnMucGFkRW1wdHlCb2R5KTtcbiAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsocmVxLCByZXMsIHNpbmssIHtcbiAgICBjb21wcmVzczogb3B0aW9ucy5jb21wcmVzcyA/PyB0cnVlLFxuICB9KTtcbiAgd3JpdGUocmVzKTtcbiAgYXdhaXQgZG9uZTtcbiAgcmV0dXJuIHNpbms7XG59XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBjb21wcmVzc2lvblwiLCAoKSA9PiB7XG4gIGl0KFwiZ3ppcHMgY29tcHJlc3NpYmxlIGNvbnRlbnQgd2hlbiB0aGUgY2xpZW50IGFjY2VwdHMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4ge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLCBcIjEzXCIpO1xuICAgICAgcmVzLmVuZChcIjxwPmhlbGxvPC9wPlwiKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZShcImd6aXBcIik7XG4gICAgLy8gVGhlIGxlbmd0aCB3ZSB3ZXJlIHRvbGQgaXMgdGhlIHVuY29tcHJlc3NlZCBvbmUgYW5kIHRoZSBjb21wcmVzc2VkIG9uZSBpc1xuICAgIC8vIG5vdCBrbm93biB1bnRpbCB0aGUgc3RyZWFtIGVuZHMuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy52YXJ5KS50b0JlKFwiQWNjZXB0LUVuY29kaW5nXCIpO1xuICAgIGV4cGVjdChndW56aXBTeW5jKHNpbmsuYm9keSkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIjxwPmhlbGxvPC9wPlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBlbmRzIHRvIGFuIGV4aXN0aW5nIHZhcnkgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiVmFyeVwiLCBcIkNvb2tpZVwiKTtcbiAgICAgIHJlcy5lbmQoXCJ4XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMudmFyeSkudG9CZShcIkNvb2tpZSwgQWNjZXB0LUVuY29kaW5nXCIpO1xuICB9KTtcblxuICBpdChcImZvcndhcmRzIHJlcy5mbHVzaCgpIHRvIHRoZSBjb21wcmVzc29yIHNvIHN0cmVhbWVkIEhUTUwgaXMgbm90IGJ1ZmZlcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZWVuOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4ge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICAgIHJlcy53cml0ZShcIjxodG1sPlwiKTtcbiAgICAgIC8vIE5leHQuanMgZG9lcyBleGFjdGx5IHRoaXMgYWZ0ZXIgZXZlcnkgY2h1bmsgKGBwaXBlLXJlYWRhYmxlLmpzYCkuXG4gICAgICByZXMuZmx1c2g/LigpO1xuICAgICAgc2Vlbi5wdXNoKDEpO1xuICAgICAgcmVzLmVuZChcIjwvaHRtbD5cIik7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNlZW4pLnRvRXF1YWwoWzFdKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCI8aHRtbD48L2h0bWw+XCIpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJhbiBpbmNvbXByZXNzaWJsZSBjb250ZW50IHR5cGVcIiwgeyBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL2F2aWZcIiB9XSxcbiAgICBbXCJhbiBhbHJlYWR5LWVuY29kZWQgYm9keVwiLCB7IFwiY29udGVudC1lbmNvZGluZ1wiOiBcImJyXCIgfV0sXG4gICAgW1xuICAgICAgXCJhIHJlc3BvbnNlIHRoYXQgb3B0cyBvdXQgd2l0aCBuby10cmFuc2Zvcm1cIixcbiAgICAgIHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1jYWNoZSwgbm8tdHJhbnNmb3JtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pKFwiZG9lcyBub3QgZ3ppcCAlc1wiLCBhc3luYyAoX25hbWUsIGhlYWRlcnMpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgICAgICByZXMuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS5ub3QudG9CZShcImd6aXBcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIGEgMjA2LCB3aG9zZSBib2R5IGlzIGEgcmFuZ2Ugb2YgdGhlIHN0b3JlZCBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gVGhlIG9uZSB1bmNvbXByZXNzYWJsZSBzdGF0dXMgdGhhdCBjYXJyaWVzIGEgYm9keS4gYGNvbnRlbnQtcmFuZ2VgIGNvdW50c1xuICAgIC8vIGJ5dGVzIG9mIHRoZSByZXByZXNlbnRhdGlvbiB0aGUgY2xpZW50IGFza2VkIGZvciwgc28gZ3ppcHBpbmcgdGhlIHNsaWNlXG4gICAgLy8gbWFrZXMgdGhlIHJhbmdlIG1lYW5pbmdsZXNzIC0gYW5kIGEgY2xpZW50IHN0aXRjaGluZyByYW5nZXMgdG9nZXRoZXJcbiAgICAvLyAodmlkZW8sIGEgcmVzdW1lZCBkb3dubG9hZCkgY2Fubm90IHVzZSBpdC5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gMjA2O1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW5cIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1SYW5nZVwiLCBcImJ5dGVzIDAtMy8xMDAwXCIpO1xuICAgICAgcmVzLmVuZChcImJvZHlcIik7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJib2R5XCIpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGd6aXAgd2hlbiB0aGUgY2xpZW50IGRpZCBub3Qgb2ZmZXIgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgcmVxOiByZXF1ZXN0V2l0aCh7fSkgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIHdoZW4gbmV4dC5jb25maWcgc2V0cyBjb21wcmVzczogZmFsc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgY29tcHJlc3M6IGZhbHNlIH0sXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJhIEhFQUQgcmVxdWVzdFwiLCB7IG1ldGhvZDogXCJIRUFEXCIsIHN0YXR1czogMjAwIH1dLFxuICAgIFtcImEgMjA0XCIsIHsgbWV0aG9kOiBcIkdFVFwiLCBzdGF0dXM6IDIwNCB9XSxcbiAgICBbXCJhIDMwNFwiLCB7IG1ldGhvZDogXCJHRVRcIiwgc3RhdHVzOiAzMDQgfV0sXG4gIF0pKFwiZG9lcyBub3QgZ3ppcCAlc1wiLCBhc3luYyAoX25hbWUsIHsgbWV0aG9kLCBzdGF0dXMgfSkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9LFxuICAgICAgeyByZXE6IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSwgbWV0aG9kKSB9LFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwaXBlVG9TaW5rIGVtcHR5LWJvZHkgcGFkZGluZ1wiLCAoKSA9PiB7XG4gIGl0KFwid3JpdGVzIGEgc2luZ2xlIHNwYWNlIHdoZW4gdGhlIHNpbmsgYXNrcyBmb3IgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gMzA0O1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9LFxuICAgICAgeyBwYWRFbXB0eUJvZHk6IHRydWUgfSxcbiAgICApO1xuICAgIC8vIFplcm8gcGF5bG9hZCBieXRlcyBhZnRlciB0aGUgcHJlbHVkZSBtYWtlcyBBUEkgR2F0ZXdheSBhbnN3ZXIgNTAyLCBhbmRcbiAgICAvLyBtYWtlcyBhIEZ1bmN0aW9uIFVSTCBkcm9wIHRoZSBwcmVsdWRlIGFuZCBhbnN3ZXIgYSBiYXJlXG4gICAgLy8gYDIwMCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gLlxuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIiBcIik7XG4gIH0pO1xuXG4gIGl0KFwicGFkcyBhIEhFQUQgcmVzcG9uc2UsIHdob3NlIGJvZHkgaXMgZW1wdHkgYnkgZGVmaW5pdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bihcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtbGVuZ3RoXCIsIFwiNTc5OFwiKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFkRW1wdHlCb2R5OiB0cnVlLFxuICAgICAgICByZXE6IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSwgXCJIRUFEXCIpLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIiBcIik7XG4gICAgLy8gVGhlIGhlYWQgc3RpbGwgZGVzY3JpYmVzIHdoYXQgYSBHRVQgd291bGQgcmV0dXJuOyB0aGUgcGFkZGluZyBieXRlIGlzIG5vdFxuICAgIC8vIGEgYm9keSBhbmQgdGhlIGludGVncmF0aW9uIG92ZXJ3cml0ZXMgYGNvbnRlbnQtbGVuZ3RoYCB3aXRoIDAuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlKFwiNTc5OFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSBub24tZW1wdHkgYm9keSBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiByZXMuZW5kKFwicmVhbFwiKSwge1xuICAgICAgcGFkRW1wdHlCb2R5OiB0cnVlLFxuICAgICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcInJlYWxcIik7XG4gIH0pO1xuXG4gIGl0KFwic2VuZHMgbm90aGluZyBmb3IgYW4gZW1wdHkgYm9keSB3aGVuIHRoZSBzaW5rIGRvZXMgbm90IGFza1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiB7XG4gICAgICByZXMuc3RhdHVzQ29kZSA9IDMwNDtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5ib2R5KS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBsaWZlY3ljbGVcIiwgKCkgPT4ge1xuICAvKipcbiAgICogYGhhbmRsZSgpYCBhd2FpdHMgdGhpcyBwcm9taXNlIGJlZm9yZSBpdCBmbHVzaGVzIGB3YWl0VW50aWxgIHdvcmsg4oCUIElTUlxuICAgKiByZXZhbGlkYXRpb24sIGNhY2hlIHdyaXRlcyDigJQgYW5kIGJlZm9yZSB0aGUgcmVxdWVzdCdzIGNsb3N1cmVzIGNhbiBiZVxuICAgKiBjb2xsZWN0ZWQuIEEgY2xpZW50IHRoYXQgZGlzY29ubmVjdHMgYmVmb3JlIHRoZSBmaXJzdCBieXRlIGRlc3Ryb3lzIHRoZVxuICAgKiByZXNwb25zZSB3aXRob3V0IGFuIGVycm9yLCB3aGljaCBlbWl0cyBvbmx5IGBcImNsb3NlXCJgOiB0aGUgcGlwZWxpbmUgbmV2ZXJcbiAgICogc3RhcnRlZCwgc28gbm90aGluZyBlbHNlIGNhbiBzZXR0bGUgdGhlIHByb21pc2UgYW5kIHRoZSBhd2FpdCBuZXZlciByZXR1cm5lZC5cbiAgICovXG4gIGl0KFwic2V0dGxlcyB3aGVuIHRoZSByZXNwb25zZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBoZWFkIGdvZXMgb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXEgPSByZXF1ZXN0V2l0aCh7fSk7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKHJlcSwgcmVzLCBuZXcgQ29sbGVjdGluZ1NpbmsoKSwge1xuICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXMuZGVzdHJveSgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgLy8gVGhlIG5vcm1hbCBwYXRoIGhhcyB0byBrZWVwIHNldHRsaW5nIG9uIHRoZSBwaXBlbGluZSwgbm90IG9uIGBcImNsb3NlXCJgOiB0aGVcbiAgLy8gYm9keSBtdXN0IGJlIGZ1bGx5IGZsdXNoZWQgaW50byB0aGUgc2luayBieSB0aGUgdGltZSB0aGlzIHJlc29sdmVzLlxuICBpdChcInN0aWxsIHNldHRsZXMgb24gdGhlIHBpcGVsaW5lIG9uY2UgdGhlIGhlYWQgaGFzIGdvbmUgb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgICAgICAgcmVzLmVuZChcImJvZHlcIik7XG4gICAgICB9LFxuICAgICAgeyBjb21wcmVzczogZmFsc2UgfSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZygpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHdoZW4gdGhlIHJlc3BvbnNlIGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBkb25lID0gcGlwZVRvU2luayhyZXEsIHJlcywgbmV3IENvbGxlY3RpbmdTaW5rKCksIHtcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmVzLmRlc3Ryb3kobmV3IEVycm9yKFwiYm9vbVwiKSk7XG5cbiAgICBhd2FpdCBleHBlY3QoZG9uZSkucmVqZWN0cy50b1Rocm93KFwiYm9vbVwiKTtcbiAgfSk7XG5cbiAgLy8gQSBzaW5rIHRoYXQgY2Fubm90IHRha2UgdGhlIGhlYWQg4oCUIGB3cml0ZUhlYWRgIHJlamVjdGluZyBhIGhlYWRlciB2YWx1ZSBpc1xuICAvLyB0aGUgcmVhbCBjYXNlIOKAlCB0aHJvd3MgZnJvbSBpbnNpZGUgdGhlIGBcImhlYWRcImAgbGlzdGVuZXIsIHdoZXJlIG5vdGhpbmdcbiAgLy8gZWxzZSB3b3VsZCBjYXRjaCBpdCBhbmQgdGhlIHBpcGVsaW5lIG5ldmVyIHN0YXJ0cy5cbiAgaXQuZWFjaChbXG4gICAgW1wid3JpdGVzIGEgYm9keVwiLCAocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpID0+IHJlcy5lbmQoXCJib2R5XCIpXSxcbiAgICBbXCJlbmRzIGVtcHR5XCIsIChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gcmVzLmVuZCgpXSxcbiAgICBbXCJmbHVzaGVzIGl0cyBoZWFkIGZpcnN0XCIsIChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gcmVzLndyaXRlSGVhZCgyMDApXSxcbiAgXSkoXG4gICAgXCJyZWplY3RzIGFuZCBkZXN0cm95cyB0aGUgcmVzcG9uc2Ugd2hlbiBiZWdpbigpIHRocm93cyBhbmQgdGhlIHJlc3BvbnNlICVzXCIsXG4gICAgYXN5bmMgKF9uYW1lLCB3cml0ZSkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgICAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsoXG4gICAgICAgIHJlcSxcbiAgICAgICAgcmVzLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW4oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgaGVhZFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IGNvbXByZXNzOiBmYWxzZSB9LFxuICAgICAgKTtcblxuICAgICAgd3JpdGUocmVzKTtcblxuICAgICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlamVjdHMudG9UaHJvdyhcImJhZCBoZWFkXCIpO1xuICAgICAgZXhwZWN0KHJlcy5kZXN0cm95ZWQpLnRvQmUodHJ1ZSk7XG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZShcImFjY2VwdHNHemlwXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wiZ3ppcFwiLCB0cnVlXSxcbiAgICBbXCJnemlwLCBkZWZsYXRlLCBiclwiLCB0cnVlXSxcbiAgICBbXCJHWklQO3E9MC41XCIsIHRydWVdLFxuICAgIFtcImd6aXA7cT0wXCIsIGZhbHNlXSxcbiAgICBbXCIqXCIsIHRydWVdLFxuICAgIFtcIio7cT0wXCIsIGZhbHNlXSxcbiAgICAvLyBBbiBleHBsaWNpdCBnemlwIHByZWZlcmVuY2Ugd2lucyBvdmVyIHRoZSB3aWxkY2FyZCwgaW4gZWl0aGVyIG9yZGVyLlxuICAgIFtcIio7cT0wLCBnemlwXCIsIHRydWVdLFxuICAgIFtcImd6aXA7cT0wLCAqXCIsIGZhbHNlXSxcbiAgICBbXCJiciwgZGVmbGF0ZVwiLCBmYWxzZV0sXG4gICAgW1wiXCIsIGZhbHNlXSxcbiAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gIF0pKFwiJXMg4oaSICVzXCIsIChoZWFkZXIsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGFjY2VwdHNHemlwKGhlYWRlcikpLnRvQmUoZXhwZWN0ZWQpO1xuICB9KTtcblxuICBpdChcImpvaW5zIGEgcmVwZWF0ZWQgaGVhZGVyIGJlZm9yZSBwYXJzaW5nXCIsICgpID0+IHtcbiAgICBleHBlY3QoYWNjZXB0c0d6aXAoW1wiYnJcIiwgXCJnemlwXCJdKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcbiJdfQ==
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bnRpbWUvaHR0cC9zaW5rLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBMEM7QUFDMUMsNkNBQXVDO0FBQ3ZDLHlDQUFtRTtBQUNuRSx1Q0FBZ0Q7QUFDaEQseUNBQThEO0FBQzlELGlDQUErRDtBQUUvRCxNQUFNLGNBQWM7SUFJaUI7SUFINUIsSUFBSSxDQUFnQjtJQUNYLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFFdEMsWUFBbUMsZUFBZSxLQUFLO1FBQXBCLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBQUcsQ0FBQztJQUVwRCxLQUFLLENBQUMsSUFBa0I7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixPQUFPLElBQUksc0JBQVEsQ0FBQztZQUNsQixLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRO2dCQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsUUFBUSxFQUFFLENBQUM7WUFDYixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBRUQsU0FBUyxXQUFXLENBQ2xCLE9BQStCLEVBQy9CLE1BQU0sR0FBRyxLQUFLO0lBRWQsT0FBTyxJQUFJLDZCQUFtQixDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBUUQsaUZBQWlGO0FBQ2pGLEtBQUssVUFBVSxHQUFHLENBQ2hCLEtBQXdDLEVBQ3hDLFVBQW9CLEVBQUU7SUFFdEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBQSxpQkFBVSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO1FBQ3RDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUk7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxJQUFJLENBQUM7SUFDWCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUM7WUFDMUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsNEVBQTRFO1FBQzVFLG1DQUFtQztRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsSUFBQSxzQkFBVSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDcEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UseUNBQXlDO0lBQ3pDLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQWlCO1lBQzdCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FDVixJQUFJLHNCQUFRLENBQUM7Z0JBQ1gsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekIsQ0FBQzthQUNGLENBQUM7U0FDTCxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFDckIsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFDMUMsR0FBRyxFQUNILFFBQVEsRUFDUixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkIsQ0FBQztRQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbEQscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUEseUJBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUMscURBQXFEO1lBQ3JELE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxTQUFTLEdBQUcsR0FBcUMsQ0FBQztZQUN4RCxJQUFJLE9BQU8sSUFBSSxTQUFTLElBQUksT0FBTyxTQUFTLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDUixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxHQUFXLEVBQUUsQ0FDekIsSUFBQSxzQkFBVSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsV0FBVyxFQUFFLHFCQUFhLENBQUMsWUFBWTtTQUN4QyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksQ0FBQztRQUNYLE1BQU0sQ0FBQyxJQUFBLHNCQUFVLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixDQUFDLGdDQUFnQyxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxDQUFDO1FBQ3BFLENBQUMseUJBQXlCLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6RDtZQUNFLDRDQUE0QztZQUM1QztnQkFDRSxjQUFjLEVBQUUsbUJBQW1CO2dCQUNuQyxlQUFlLEVBQUUsd0JBQXdCO2FBQzFDO1NBQ0Y7S0FDRixDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM5RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUN2RSw2Q0FBNkM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNyQixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1QyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pELEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM5RCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxFQUNELEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUN6QixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQ3BCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25ELENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDekMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUMxQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ3pELE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDeEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0MsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1osQ0FBQyxFQUNELEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQzVELENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO0lBQzdDLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNaLENBQUMsRUFDRCxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FDdkIsQ0FBQztRQUNGLHlFQUF5RTtRQUN6RSwwREFBMEQ7UUFDMUQsa0NBQWtDO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUM7WUFDMUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixDQUFDLEVBQ0Q7WUFDRSxZQUFZLEVBQUUsSUFBSTtZQUNsQixHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDO1NBQ3hELENBQ0YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5Qyw0RUFBNEU7UUFDNUUsaUVBQWlFO1FBQ2pFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9DLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEM7Ozs7OztPQU1HO0lBQ0gsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9FLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBQSxpQkFBVSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxjQUFjLEVBQUUsRUFBRTtZQUN0RCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVkLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILDhFQUE4RTtJQUM5RSxzRUFBc0U7SUFDdEUsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQixDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQ3BCLENBQUM7UUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRCxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksY0FBYyxFQUFFLEVBQUU7WUFDdEQsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFL0IsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUscURBQXFEO0lBQ3JELEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixDQUFDLGVBQWUsRUFBRSxDQUFDLEdBQXVCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUF1QixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEQsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLEdBQXVCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDNUUsQ0FBQyxDQUNBLDJFQUEyRSxFQUMzRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBQSxpQkFBVSxFQUNyQixHQUFHLEVBQ0gsR0FBRyxFQUNIO1lBQ0UsS0FBSztnQkFDSCxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7U0FDRixFQUNELEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUNwQixDQUFDO1FBRUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVgsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUNkLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDO1FBQzNCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztRQUNwQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7UUFDbkIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1FBQ2hCLHVFQUF1RTtRQUN2RSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7UUFDckIsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO1FBQ3RCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUN0QixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7UUFDWCxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7S0FDbkIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUNqQyxNQUFNLENBQUMsSUFBQSxrQkFBVyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLENBQUMsSUFBQSxrQkFBVyxFQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgY29uc3RhbnRzIGFzIHpsaWJDb25zdGFudHMsIGd1bnppcFN5bmMgfSBmcm9tIFwibm9kZTp6bGliXCI7XG5pbXBvcnQgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkLCBTaGltU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgYWNjZXB0c0d6aXAsIHBpcGVUb1NpbmssIFJlc3BvbnNlU2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuY2xhc3MgQ29sbGVjdGluZ1NpbmsgaW1wbGVtZW50cyBSZXNwb25zZVNpbmsge1xuICBwdWJsaWMgaGVhZD86IFJlc3BvbnNlSGVhZDtcbiAgcHVibGljIHJlYWRvbmx5IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHBhZEVtcHR5Qm9keSA9IGZhbHNlKSB7fVxuXG4gIHB1YmxpYyBiZWdpbihoZWFkOiBSZXNwb25zZUhlYWQpOiBXcml0YWJsZSB7XG4gICAgdGhpcy5oZWFkID0gaGVhZDtcbiAgICBjb25zdCBjaHVua3MgPSB0aGlzLmNodW5rcztcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKHtcbiAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBib2R5KCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5jaHVua3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RXaXRoKFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBtZXRob2QgPSBcIkdFVFwiLFxuKTogU2hpbUluY29taW5nTWVzc2FnZSB7XG4gIHJldHVybiBuZXcgU2hpbUluY29taW5nTWVzc2FnZSh7IG1ldGhvZCwgdXJsOiBcIi9cIiwgaGVhZGVycyB9KTtcbn1cblxuaW50ZXJmYWNlIFBpcGVDYXNlIHtcbiAgcmVhZG9ubHkgcmVxPzogU2hpbUluY29taW5nTWVzc2FnZTtcbiAgcmVhZG9ubHkgY29tcHJlc3M/OiBib29sZWFuO1xuICByZWFkb25seSBwYWRFbXB0eUJvZHk/OiBib29sZWFuO1xufVxuXG4vKiogUnVucyBvbmUgcmVzcG9uc2UgdGhyb3VnaCB0aGUgc2luayBhbmQgcmVzb2x2ZXMgb25jZSB0aGUgc2luayBpcyBmaW5pc2hlZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bihcbiAgd3JpdGU6IChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gdm9pZCxcbiAgb3B0aW9uczogUGlwZUNhc2UgPSB7fSxcbik6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgY29uc3QgcmVxID0gb3B0aW9ucy5yZXEgPz8gcmVxdWVzdFdpdGgoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcbiAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKG9wdGlvbnMucGFkRW1wdHlCb2R5KTtcbiAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsocmVxLCByZXMsIHNpbmssIHtcbiAgICBjb21wcmVzczogb3B0aW9ucy5jb21wcmVzcyA/PyB0cnVlLFxuICB9KTtcbiAgd3JpdGUocmVzKTtcbiAgYXdhaXQgZG9uZTtcbiAgcmV0dXJuIHNpbms7XG59XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBjb21wcmVzc2lvblwiLCAoKSA9PiB7XG4gIGl0KFwiZ3ppcHMgY29tcHJlc3NpYmxlIGNvbnRlbnQgd2hlbiB0aGUgY2xpZW50IGFjY2VwdHMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4ge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLCBcIjEzXCIpO1xuICAgICAgcmVzLmVuZChcIjxwPmhlbGxvPC9wPlwiKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZShcImd6aXBcIik7XG4gICAgLy8gVGhlIGxlbmd0aCB3ZSB3ZXJlIHRvbGQgaXMgdGhlIHVuY29tcHJlc3NlZCBvbmUgYW5kIHRoZSBjb21wcmVzc2VkIG9uZSBpc1xuICAgIC8vIG5vdCBrbm93biB1bnRpbCB0aGUgc3RyZWFtIGVuZHMuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy52YXJ5KS50b0JlKFwiQWNjZXB0LUVuY29kaW5nXCIpO1xuICAgIGV4cGVjdChndW56aXBTeW5jKHNpbmsuYm9keSkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIjxwPmhlbGxvPC9wPlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBlbmRzIHRvIGFuIGV4aXN0aW5nIHZhcnkgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiVmFyeVwiLCBcIkNvb2tpZVwiKTtcbiAgICAgIHJlcy5lbmQoXCJ4XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMudmFyeSkudG9CZShcIkNvb2tpZSwgQWNjZXB0LUVuY29kaW5nXCIpO1xuICB9KTtcblxuICAvLyBJc3N1ZSAjMzIxLiBOZXh0LmpzIHdyaXRlcyBlYWNoIFJTQy9IVE1MIGNodW5rIGFuZCB0aGVuIHdhaXRzIGZvciBgZHJhaW5gXG4gIC8vIChgcGlwZS1yZWFkYWJsZS5qc2ApLiBVbmRlciBiYWNrcHJlc3N1cmUgYSBjaHVuayBzaXRzIGluIGByZXNgJ3MgYnVmZmVyXG4gIC8vIHdoaWxlIGVhcmxpZXIgb25lcyBjb21wcmVzcywgYW5kIGEgZmx1c2ggaXNzdWVkIGF0IHdyaXRlIHRpbWUgcmFuIGFoZWFkIG9mXG4gIC8vIGl0LCBzbyB0aGUgbGFzdCBjaHVuayBiZWZvcmUgYSBwYXVzZSAtIGEgYDxTdXNwZW5zZT5gIGZhbGxiYWNrIC0gc3RheWVkIGluXG4gIC8vIHpsaWIgdW50aWwgdGhlIHNsb3cgYm91bmRhcnkgcmVzb2x2ZWQuXG4gIGl0KFwiZGVsaXZlcnMgZXZlcnkgd3JpdHRlbiBjaHVuayBiZWZvcmUgYSBwYXVzZSwgZXZlbiB1bmRlciBiYWNrcHJlc3N1cmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICBjb25zdCBzbG93U2luazogUmVzcG9uc2VTaW5rID0ge1xuICAgICAgYmVnaW46ICgpID0+XG4gICAgICAgIG5ldyBXcml0YWJsZSh7XG4gICAgICAgICAgd3JpdGUoY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKFxuICAgICAgcmVxdWVzdFdpdGgoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KSxcbiAgICAgIHJlcyxcbiAgICAgIHNsb3dTaW5rLFxuICAgICAgeyBjb21wcmVzczogdHJ1ZSB9LFxuICAgICk7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQveC1jb21wb25lbnRcIik7XG4gICAgLy8gQmFyZWx5IGNvbXByZXNzaWJsZSwgc28gZWFjaCBjaHVuayBvdXRncm93cyBldmVyeSBzdHJlYW0ncyBidWZmZXIuXG4gICAgY29uc3QgYm9keSA9IHJhbmRvbUJ5dGVzKDUwXzAwMCkudG9TdHJpbmcoXCJoZXhcIik7XG4gICAgbGV0IHdyaXR0ZW4gPSAwO1xuICAgIGZvciAoY29uc3Qgc2l6ZSBvZiBbNDBfMDAwLCAzMF8wMDAsIDMwXzAwMF0pIHtcbiAgICAgIC8vIGBwaXBlLXJlYWRhYmxlLmpzYCwgdmVyYmF0aW0gYXBhcnQgZnJvbSB0aGUgdHlwZXMuXG4gICAgICBjb25zdCBvayA9IHJlcy53cml0ZShib2R5LnNsaWNlKHdyaXR0ZW4sIHdyaXR0ZW4gKyBzaXplKSk7XG4gICAgICBjb25zdCBmbHVzaGFibGUgPSByZXMgYXMgdW5rbm93biBhcyB7IGZsdXNoPzogdW5rbm93biB9O1xuICAgICAgaWYgKFwiZmx1c2hcIiBpbiBmbHVzaGFibGUgJiYgdHlwZW9mIGZsdXNoYWJsZS5mbHVzaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGZsdXNoYWJsZS5mbHVzaCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFvaykge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gcmVzLm9uY2UoXCJkcmFpblwiLCByZXNvbHZlKSk7XG4gICAgICB9XG4gICAgICB3cml0dGVuICs9IHNpemU7XG4gICAgfVxuICAgIGNvbnN0IHNvRmFyID0gKCk6IHN0cmluZyA9PlxuICAgICAgZ3VuemlwU3luYyhCdWZmZXIuY29uY2F0KGNodW5rcyksIHtcbiAgICAgICAgZmluaXNoRmx1c2g6IHpsaWJDb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgfSkudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwICYmIHNvRmFyKCkubGVuZ3RoIDwgYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKTtcbiAgICB9XG4gICAgZXhwZWN0KHNvRmFyKCkpLnRvQmUoYm9keSk7XG4gICAgcmVzLmVuZCgpO1xuICAgIGF3YWl0IGRvbmU7XG4gICAgZXhwZWN0KGd1bnppcFN5bmMoQnVmZmVyLmNvbmNhdChjaHVua3MpKS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKGJvZHkpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJhbiBpbmNvbXByZXNzaWJsZSBjb250ZW50IHR5cGVcIiwgeyBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL2F2aWZcIiB9XSxcbiAgICBbXCJhbiBhbHJlYWR5LWVuY29kZWQgYm9keVwiLCB7IFwiY29udGVudC1lbmNvZGluZ1wiOiBcImJyXCIgfV0sXG4gICAgW1xuICAgICAgXCJhIHJlc3BvbnNlIHRoYXQgb3B0cyBvdXQgd2l0aCBuby10cmFuc2Zvcm1cIixcbiAgICAgIHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1jYWNoZSwgbm8tdHJhbnNmb3JtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pKFwiZG9lcyBub3QgZ3ppcCAlc1wiLCBhc3luYyAoX25hbWUsIGhlYWRlcnMpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgICAgICByZXMuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS5ub3QudG9CZShcImd6aXBcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIGEgMjA2LCB3aG9zZSBib2R5IGlzIGEgcmFuZ2Ugb2YgdGhlIHN0b3JlZCBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gVGhlIG9uZSB1bmNvbXByZXNzYWJsZSBzdGF0dXMgdGhhdCBjYXJyaWVzIGEgYm9keS4gYGNvbnRlbnQtcmFuZ2VgIGNvdW50c1xuICAgIC8vIGJ5dGVzIG9mIHRoZSByZXByZXNlbnRhdGlvbiB0aGUgY2xpZW50IGFza2VkIGZvciwgc28gZ3ppcHBpbmcgdGhlIHNsaWNlXG4gICAgLy8gbWFrZXMgdGhlIHJhbmdlIG1lYW5pbmdsZXNzIC0gYW5kIGEgY2xpZW50IHN0aXRjaGluZyByYW5nZXMgdG9nZXRoZXJcbiAgICAvLyAodmlkZW8sIGEgcmVzdW1lZCBkb3dubG9hZCkgY2Fubm90IHVzZSBpdC5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gMjA2O1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW5cIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1SYW5nZVwiLCBcImJ5dGVzIDAtMy8xMDAwXCIpO1xuICAgICAgcmVzLmVuZChcImJvZHlcIik7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJib2R5XCIpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGd6aXAgd2hlbiB0aGUgY2xpZW50IGRpZCBub3Qgb2ZmZXIgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgcmVxOiByZXF1ZXN0V2l0aCh7fSkgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIHdoZW4gbmV4dC5jb25maWcgc2V0cyBjb21wcmVzczogZmFsc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgY29tcHJlc3M6IGZhbHNlIH0sXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJhIEhFQUQgcmVxdWVzdFwiLCB7IG1ldGhvZDogXCJIRUFEXCIsIHN0YXR1czogMjAwIH1dLFxuICAgIFtcImEgMjA0XCIsIHsgbWV0aG9kOiBcIkdFVFwiLCBzdGF0dXM6IDIwNCB9XSxcbiAgICBbXCJhIDMwNFwiLCB7IG1ldGhvZDogXCJHRVRcIiwgc3RhdHVzOiAzMDQgfV0sXG4gIF0pKFwiZG9lcyBub3QgZ3ppcCAlc1wiLCBhc3luYyAoX25hbWUsIHsgbWV0aG9kLCBzdGF0dXMgfSkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9LFxuICAgICAgeyByZXE6IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSwgbWV0aG9kKSB9LFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwaXBlVG9TaW5rIGVtcHR5LWJvZHkgcGFkZGluZ1wiLCAoKSA9PiB7XG4gIGl0KFwid3JpdGVzIGEgc2luZ2xlIHNwYWNlIHdoZW4gdGhlIHNpbmsgYXNrcyBmb3IgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gMzA0O1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9LFxuICAgICAgeyBwYWRFbXB0eUJvZHk6IHRydWUgfSxcbiAgICApO1xuICAgIC8vIFplcm8gcGF5bG9hZCBieXRlcyBhZnRlciB0aGUgcHJlbHVkZSBtYWtlcyBBUEkgR2F0ZXdheSBhbnN3ZXIgNTAyLCBhbmRcbiAgICAvLyBtYWtlcyBhIEZ1bmN0aW9uIFVSTCBkcm9wIHRoZSBwcmVsdWRlIGFuZCBhbnN3ZXIgYSBiYXJlXG4gICAgLy8gYDIwMCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gLlxuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIiBcIik7XG4gIH0pO1xuXG4gIGl0KFwicGFkcyBhIEhFQUQgcmVzcG9uc2UsIHdob3NlIGJvZHkgaXMgZW1wdHkgYnkgZGVmaW5pdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bihcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtbGVuZ3RoXCIsIFwiNTc5OFwiKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFkRW1wdHlCb2R5OiB0cnVlLFxuICAgICAgICByZXE6IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSwgXCJIRUFEXCIpLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIiBcIik7XG4gICAgLy8gVGhlIGhlYWQgc3RpbGwgZGVzY3JpYmVzIHdoYXQgYSBHRVQgd291bGQgcmV0dXJuOyB0aGUgcGFkZGluZyBieXRlIGlzIG5vdFxuICAgIC8vIGEgYm9keSBhbmQgdGhlIGludGVncmF0aW9uIG92ZXJ3cml0ZXMgYGNvbnRlbnQtbGVuZ3RoYCB3aXRoIDAuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlKFwiNTc5OFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSBub24tZW1wdHkgYm9keSBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiByZXMuZW5kKFwicmVhbFwiKSwge1xuICAgICAgcGFkRW1wdHlCb2R5OiB0cnVlLFxuICAgICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcInJlYWxcIik7XG4gIH0pO1xuXG4gIGl0KFwic2VuZHMgbm90aGluZyBmb3IgYW4gZW1wdHkgYm9keSB3aGVuIHRoZSBzaW5rIGRvZXMgbm90IGFza1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiB7XG4gICAgICByZXMuc3RhdHVzQ29kZSA9IDMwNDtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5ib2R5KS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBsaWZlY3ljbGVcIiwgKCkgPT4ge1xuICAvKipcbiAgICogYGhhbmRsZSgpYCBhd2FpdHMgdGhpcyBwcm9taXNlIGJlZm9yZSBpdCBmbHVzaGVzIGB3YWl0VW50aWxgIHdvcmsg4oCUIElTUlxuICAgKiByZXZhbGlkYXRpb24sIGNhY2hlIHdyaXRlcyDigJQgYW5kIGJlZm9yZSB0aGUgcmVxdWVzdCdzIGNsb3N1cmVzIGNhbiBiZVxuICAgKiBjb2xsZWN0ZWQuIEEgY2xpZW50IHRoYXQgZGlzY29ubmVjdHMgYmVmb3JlIHRoZSBmaXJzdCBieXRlIGRlc3Ryb3lzIHRoZVxuICAgKiByZXNwb25zZSB3aXRob3V0IGFuIGVycm9yLCB3aGljaCBlbWl0cyBvbmx5IGBcImNsb3NlXCJgOiB0aGUgcGlwZWxpbmUgbmV2ZXJcbiAgICogc3RhcnRlZCwgc28gbm90aGluZyBlbHNlIGNhbiBzZXR0bGUgdGhlIHByb21pc2UgYW5kIHRoZSBhd2FpdCBuZXZlciByZXR1cm5lZC5cbiAgICovXG4gIGl0KFwic2V0dGxlcyB3aGVuIHRoZSByZXNwb25zZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBoZWFkIGdvZXMgb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXEgPSByZXF1ZXN0V2l0aCh7fSk7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKHJlcSwgcmVzLCBuZXcgQ29sbGVjdGluZ1NpbmsoKSwge1xuICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXMuZGVzdHJveSgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgLy8gVGhlIG5vcm1hbCBwYXRoIGhhcyB0byBrZWVwIHNldHRsaW5nIG9uIHRoZSBwaXBlbGluZSwgbm90IG9uIGBcImNsb3NlXCJgOiB0aGVcbiAgLy8gYm9keSBtdXN0IGJlIGZ1bGx5IGZsdXNoZWQgaW50byB0aGUgc2luayBieSB0aGUgdGltZSB0aGlzIHJlc29sdmVzLlxuICBpdChcInN0aWxsIHNldHRsZXMgb24gdGhlIHBpcGVsaW5lIG9uY2UgdGhlIGhlYWQgaGFzIGdvbmUgb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgICAgICAgcmVzLmVuZChcImJvZHlcIik7XG4gICAgICB9LFxuICAgICAgeyBjb21wcmVzczogZmFsc2UgfSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZygpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHdoZW4gdGhlIHJlc3BvbnNlIGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBkb25lID0gcGlwZVRvU2luayhyZXEsIHJlcywgbmV3IENvbGxlY3RpbmdTaW5rKCksIHtcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmVzLmRlc3Ryb3kobmV3IEVycm9yKFwiYm9vbVwiKSk7XG5cbiAgICBhd2FpdCBleHBlY3QoZG9uZSkucmVqZWN0cy50b1Rocm93KFwiYm9vbVwiKTtcbiAgfSk7XG5cbiAgLy8gQSBzaW5rIHRoYXQgY2Fubm90IHRha2UgdGhlIGhlYWQg4oCUIGB3cml0ZUhlYWRgIHJlamVjdGluZyBhIGhlYWRlciB2YWx1ZSBpc1xuICAvLyB0aGUgcmVhbCBjYXNlIOKAlCB0aHJvd3MgZnJvbSBpbnNpZGUgdGhlIGBcImhlYWRcImAgbGlzdGVuZXIsIHdoZXJlIG5vdGhpbmdcbiAgLy8gZWxzZSB3b3VsZCBjYXRjaCBpdCBhbmQgdGhlIHBpcGVsaW5lIG5ldmVyIHN0YXJ0cy5cbiAgaXQuZWFjaChbXG4gICAgW1wid3JpdGVzIGEgYm9keVwiLCAocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpID0+IHJlcy5lbmQoXCJib2R5XCIpXSxcbiAgICBbXCJlbmRzIGVtcHR5XCIsIChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gcmVzLmVuZCgpXSxcbiAgICBbXCJmbHVzaGVzIGl0cyBoZWFkIGZpcnN0XCIsIChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gcmVzLndyaXRlSGVhZCgyMDApXSxcbiAgXSkoXG4gICAgXCJyZWplY3RzIGFuZCBkZXN0cm95cyB0aGUgcmVzcG9uc2Ugd2hlbiBiZWdpbigpIHRocm93cyBhbmQgdGhlIHJlc3BvbnNlICVzXCIsXG4gICAgYXN5bmMgKF9uYW1lLCB3cml0ZSkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgICAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsoXG4gICAgICAgIHJlcSxcbiAgICAgICAgcmVzLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW4oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgaGVhZFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IGNvbXByZXNzOiBmYWxzZSB9LFxuICAgICAgKTtcblxuICAgICAgd3JpdGUocmVzKTtcblxuICAgICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlamVjdHMudG9UaHJvdyhcImJhZCBoZWFkXCIpO1xuICAgICAgZXhwZWN0KHJlcy5kZXN0cm95ZWQpLnRvQmUodHJ1ZSk7XG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZShcImFjY2VwdHNHemlwXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wiZ3ppcFwiLCB0cnVlXSxcbiAgICBbXCJnemlwLCBkZWZsYXRlLCBiclwiLCB0cnVlXSxcbiAgICBbXCJHWklQO3E9MC41XCIsIHRydWVdLFxuICAgIFtcImd6aXA7cT0wXCIsIGZhbHNlXSxcbiAgICBbXCIqXCIsIHRydWVdLFxuICAgIFtcIio7cT0wXCIsIGZhbHNlXSxcbiAgICAvLyBBbiBleHBsaWNpdCBnemlwIHByZWZlcmVuY2Ugd2lucyBvdmVyIHRoZSB3aWxkY2FyZCwgaW4gZWl0aGVyIG9yZGVyLlxuICAgIFtcIio7cT0wLCBnemlwXCIsIHRydWVdLFxuICAgIFtcImd6aXA7cT0wLCAqXCIsIGZhbHNlXSxcbiAgICBbXCJiciwgZGVmbGF0ZVwiLCBmYWxzZV0sXG4gICAgW1wiXCIsIGZhbHNlXSxcbiAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gIF0pKFwiJXMg4oaSICVzXCIsIChoZWFkZXIsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGFjY2VwdHNHemlwKGhlYWRlcikpLnRvQmUoZXhwZWN0ZWQpO1xuICB9KTtcblxuICBpdChcImpvaW5zIGEgcmVwZWF0ZWQgaGVhZGVyIGJlZm9yZSBwYXJzaW5nXCIsICgpID0+IHtcbiAgICBleHBlY3QoYWNjZXB0c0d6aXAoW1wiYnJcIiwgXCJnemlwXCJdKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -37036,7 +37036,7 @@ var require_package = __commonJS({
37036
37036
  publishConfig: {
37037
37037
  access: "public"
37038
37038
  },
37039
- version: "0.7.13",
37039
+ version: "0.7.15",
37040
37040
  packageManager: "pnpm@10.32.1",
37041
37041
  jest: {
37042
37042
  coverageProvider: "v8",
@@ -38009,12 +38009,6 @@ var ShimServerResponse = class extends Transform {
38009
38009
  useChunkedEncodingByDefault = false;
38010
38010
  /** Set by Next.js in a few places; never read by us. */
38011
38011
  req;
38012
- /**
38013
- * Installed by the runtime core when it inserts gzip, so that Next.js's
38014
- * per-chunk `if ("flush" in res) res.flush()` actually reaches the
38015
- * compressor. Without it, streamed HTML sits in zlib's buffer.
38016
- */
38017
- flush;
38018
38012
  /** Lowercased name → original casing + value, mirroring Node's own store. */
38019
38013
  headerStore = /* @__PURE__ */ new Map();
38020
38014
  constructor() {
@@ -38186,8 +38180,7 @@ function pipeToSink(req, res, sink, options) {
38186
38180
  const stages = [];
38187
38181
  const gzip = shouldGzip(req, res, head, options);
38188
38182
  if (gzip) {
38189
- const compressor = createGzip();
38190
- res.flush = () => compressor.flush(constants.Z_SYNC_FLUSH);
38183
+ const compressor = createGzip({ flush: constants.Z_SYNC_FLUSH });
38191
38184
  stages.push(compressor);
38192
38185
  }
38193
38186
  if (sink.padEmptyBody) {
@@ -39821,7 +39814,6 @@ async function sendWebResponse(res, response) {
39821
39814
  return;
39822
39815
  }
39823
39816
  const accepted = res.write(chunk);
39824
- res.flush?.();
39825
39817
  if (!accepted && !await drained(res)) {
39826
39818
  return;
39827
39819
  }
@@ -37036,7 +37036,7 @@ var require_package = __commonJS({
37036
37036
  publishConfig: {
37037
37037
  access: "public"
37038
37038
  },
37039
- version: "0.7.13",
37039
+ version: "0.7.15",
37040
37040
  packageManager: "pnpm@10.32.1",
37041
37041
  jest: {
37042
37042
  coverageProvider: "v8",
@@ -38009,12 +38009,6 @@ var ShimServerResponse = class extends Transform {
38009
38009
  useChunkedEncodingByDefault = false;
38010
38010
  /** Set by Next.js in a few places; never read by us. */
38011
38011
  req;
38012
- /**
38013
- * Installed by the runtime core when it inserts gzip, so that Next.js's
38014
- * per-chunk `if ("flush" in res) res.flush()` actually reaches the
38015
- * compressor. Without it, streamed HTML sits in zlib's buffer.
38016
- */
38017
- flush;
38018
38012
  /** Lowercased name → original casing + value, mirroring Node's own store. */
38019
38013
  headerStore = /* @__PURE__ */ new Map();
38020
38014
  constructor() {
@@ -38186,8 +38180,7 @@ function pipeToSink(req, res, sink, options) {
38186
38180
  const stages = [];
38187
38181
  const gzip = shouldGzip(req, res, head, options);
38188
38182
  if (gzip) {
38189
- const compressor = createGzip();
38190
- res.flush = () => compressor.flush(constants.Z_SYNC_FLUSH);
38183
+ const compressor = createGzip({ flush: constants.Z_SYNC_FLUSH });
38191
38184
  stages.push(compressor);
38192
38185
  }
38193
38186
  if (sink.padEmptyBody) {
@@ -39821,7 +39814,6 @@ async function sendWebResponse(res, response) {
39821
39814
  return;
39822
39815
  }
39823
39816
  const accepted = res.write(chunk);
39824
- res.flush?.();
39825
39817
  if (!accepted && !await drained(res)) {
39826
39818
  return;
39827
39819
  }
package/package.json CHANGED
@@ -85,7 +85,7 @@
85
85
  "publishConfig": {
86
86
  "access": "public"
87
87
  },
88
- "version": "0.7.13",
88
+ "version": "0.7.15",
89
89
  "jest": {
90
90
  "coverageProvider": "v8",
91
91
  "testPathIgnorePatterns": [
@@ -150,19 +150,21 @@ with a shared stack named `hrns-shard-<n>` (with the type's infix) and each
150
150
  running its own slice of that type's file list.
151
151
 
152
152
  A run of one type starts all its shards at once. A run of `all` (the schedule)
153
- lists 45 jobs, Global Functions first, then Regional Functions, Regional
154
- Containers and Global Containers, and runs at most 10 at a time, which is about 11
155
- hours end to end (about 95 shard-hours: Global Containers' 15 shards take about
156
- 2.5 hours each, the others about 2; the shards of one type end together, so the
157
- last five Global Containers shards run with half the slots idle). Ten is the peak
158
- a single-type run of the other three already reaches: no more CloudFront
153
+ lists 45 jobs, Global Functions first, then Regional Containers, Global
154
+ Containers and Regional Functions, and runs at most 10 at a time, which is about
155
+ 9.6 hours end to end (about 90 shard-hours: the Containers types' shards take
156
+ about 2.3 hours each, Global Functions' about 1.7 and Regional Functions' about
157
+ 1.5). Regional Functions goes last because its shards are the shortest, so they
158
+ fill the slots the others free at the end. Listing Global Containers last, as
159
+ the workflow once did, left its last five shards running with half the slots
160
+ idle, for about 10.2 hours. Ten is the peak a single-type run of the other three already reaches: no more CloudFront
159
161
  distributions at once than a Global Functions run, under the CloudFront
160
162
  response-headers-policy quota (3 per distribution), no more ECR pulls than a
161
163
  Regional Containers run, and no more of the org's concurrent jobs than the
162
164
  schedule has always taken. A slot goes to the next job as soon as one frees, so
163
165
  types overlap where one ends and the next begins; that is safe, because no two
164
166
  entries share a stack name. Results arrive in that order: a Global Functions
165
- regression shows up first, about 2 hours in.
167
+ regression shows up first, about 2 hours in, and Regional Functions' last.
166
168
 
167
169
  To check the workflow itself rather than compatibility, dispatch `all` with
168
170
  `shard_total: 1` and `test_filters: ../test/harness-smoke-manifest.json`: one
@@ -205,7 +207,7 @@ cancels. It is one group for every type, not one per type: each run's
205
207
  account-wide sweep could otherwise delete another type's idle-looking shard stack
206
208
  as that run warms into it. GitHub keeps only one _pending_ run per group, so
207
209
  dispatch a second type once the first has started, not while one is queued, or
208
- dispatch `all`. A dispatch on a schedule day waits behind the schedule's ~11
210
+ dispatch `all`. A dispatch on a schedule day waits behind the schedule's ~10
209
211
  hours. A pending run that gets cancelled that way, the scheduled one included,
210
212
  loses no sweep: every run sweeps, not just the scheduled one.
211
213