@getopenpay/openpay-js-react 0.5.0-alpha.62d9c95 → 0.5.1-alpha.4c51460

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 (23) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-Su-gYqm3-CRW7Sp8i.js → Resource-iHZxynG6-B8KcSuDp.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-CZLX8DcG-CCDi8IAG.js → SimpleSpanProcessor-CgVHDuhQ-tZM-vkp4.js} +7 -7
  4. package/dist/detect-resources-n5911S7d-CvQOJxQQ.js +854 -0
  5. package/dist/{diag-api-But7SLH3-BsQGKMsM.js → diag-api-CqmAGuUM-B-fI-Itq.js} +2 -2
  6. package/dist/{index-5kJbCI0E-DgamVTBl.js → index-AzQT8pb7-BO8FM5tU.js} +6 -6
  7. package/dist/{index-CaFKkZZZ-EVUZJWN6.js → index-BLmQ25Rt-B79mXZyK.js} +5 -5
  8. package/dist/{index-D549KVYX-DaNJwPG9.js → index-B_vQqwJj-C6mtKw-I.js} +2 -2
  9. package/dist/{index-BelLoP51-D8pENTcy.js → index-C5DrhlPT-CzOW4Pbv.js} +5 -5
  10. package/dist/{index-BMONkcbS-BOn4l524.js → index-CS2m48bw-zi1zqTOx.js} +6 -6
  11. package/dist/{index-HuSyNzcT-VbpXy8eJ.js → index-CeSU-cvA-BQ8ifwt-.js} +2 -2
  12. package/dist/{index-BevYpDuf-DVAeIRwO.js → index-D6zeX1Hj-CMhAyna0.js} +2 -2
  13. package/dist/{index-ClY7EupZ-XYaLGcah.js → index-DE4VPylf-fm4ZbKg2.js} +5 -5
  14. package/dist/{index-zmE9BDN0.js → index-DPAHLmz7.js} +4 -4
  15. package/dist/{index-DfKlxnme-5sMHSn6_.js → index-Dt2bjfnE-Db6sVSe9.js} +2 -2
  16. package/dist/index.js +1 -1
  17. package/dist/{metrics-api-jkWVWqH3-CTT7PgZS.js → metrics-api-CsWTr4jw-By0HDLr6.js} +2 -2
  18. package/dist/{sdk-info-Dndpdc-v-BOfC12e5.js → sdk-info-BHmXvDUi-C5GbV0ET.js} +2 -2
  19. package/dist/{url-BiLGOrVd-DY-x5ttm.js → url-BODr3mH0-D2P4-99L.js} +2 -2
  20. package/dist/{utils-BETSHAZr-NCCAatVd.js → utils-DQxKyFlH-zx7ZPIkJ.js} +2 -2
  21. package/dist/{utils-D7aJq4_J-6Fk7ACSV.js → utils-DwSdqbL_-Cf3OFd2D.js} +4 -4
  22. package/package.json +1 -1
  23. package/dist/detect-resources-tCEQLc4c-D59VMEZa.js +0 -854
@@ -4737,7 +4737,7 @@ const Z = async (e, t, r, o) => Nu(e, t, async () => {
4737
4737
  if (r)
4738
4738
  return { amountAtom: 0, currency: "usd" };
4739
4739
  {
4740
- o = o || void 0;
4740
+ o = o || void 0, sessionStorage.getItem("promoCode") && !o && (o = sessionStorage.getItem("promoCode"));
4741
4741
  const i = await Du(e, t, o);
4742
4742
  return { amountAtom: i.amountAtom, currency: i.currency };
4743
4743
  }
@@ -7683,7 +7683,7 @@ let Rn;
7683
7683
  const Vp = async (e, t) => {
7684
7684
  if (typeof window > "u")
7685
7685
  return;
7686
- const r = await import("./index-BelLoP51-D8pENTcy.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-5kJbCI0E-DgamVTBl.js"), { FetchInstrumentation: c } = s, l = await import("./index-BevYpDuf-DVAeIRwO.js"), { ZoneContextManager: u } = l, d = await import("./index-BMONkcbS-BOn4l524.js"), { registerInstrumentations: y } = d, _ = await import("./index-ClY7EupZ-XYaLGcah.js"), { Resource: p } = _, h = await import("./detect-resources-tCEQLc4c-D59VMEZa.js").then((se) => se.d), { detectResourcesSync: f } = h, v = await import("./index-D549KVYX-DaNJwPG9.js"), { OTLPTraceExporter: E } = v, b = await import("./index-HuSyNzcT-VbpXy8eJ.js"), { B3Propagator: S, B3InjectEncoding: L } = b, C = await import("./index-DfKlxnme-5sMHSn6_.js"), { BatchSpanProcessor: N } = C;
7686
+ const r = await import("./index-C5DrhlPT-CzOW4Pbv.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-AzQT8pb7-BO8FM5tU.js"), { FetchInstrumentation: c } = s, l = await import("./index-D6zeX1Hj-CMhAyna0.js"), { ZoneContextManager: u } = l, d = await import("./index-CS2m48bw-zi1zqTOx.js"), { registerInstrumentations: y } = d, _ = await import("./index-DE4VPylf-fm4ZbKg2.js"), { Resource: p } = _, h = await import("./detect-resources-n5911S7d-CvQOJxQQ.js").then((se) => se.d), { detectResourcesSync: f } = h, v = await import("./index-B_vQqwJj-C6mtKw-I.js"), { OTLPTraceExporter: E } = v, b = await import("./index-CeSU-cvA-BQ8ifwt-.js"), { B3Propagator: S, B3InjectEncoding: L } = b, C = await import("./index-Dt2bjfnE-Db6sVSe9.js"), { BatchSpanProcessor: N } = C;
7687
7687
  _r(`Initializing tracer with version ${e} and baseUrl ${t}`);
7688
7688
  const K = $p(t);
7689
7689
  _r(`Using collector URL ${K}`);
@@ -8247,7 +8247,7 @@ const Kp = (e, t, r) => {
8247
8247
  (a = V()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Gl(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
8248
8248
  }, this.updateCallbacks = (a) => {
8249
8249
  this.formCallbacks.setCallbacks(a);
8250
- }, Dt.assignAsSingleton(this), this.ojsVersion = "0.5.0", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = jp.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Zp(), this.deviceToken = Vo(), Fl();
8250
+ }, Dt.assignAsSingleton(this), this.ojsVersion = "0.5.1", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = jp.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Zp(), this.deviceToken = Vo(), Fl();
8251
8251
  const { framework: o, version: i } = Up();
8252
8252
  Co(this.baseUrl).then((a) => {
8253
8253
  if (!Sr.current.isSuccess) {
@@ -8444,4 +8444,4 @@ export {
8444
8444
  om as v,
8445
8445
  wu as z
8446
8446
  };
8447
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyQxID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcbnoub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBtZXNzYWdlOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe30pO1xuei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyQxKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kMShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyhjb25kaXRpb25hbEZpZWxkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcztcbiAgfVxuICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzLmV4dGVuZChjb25kaXRpb25hbEZpZWxkcyk7XG59O1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMgPSB7fSkgPT4ge1xuICBpZiAoZGVmYXVsdEZpZWxkVmFsdWVzKSB7XG4gICAgbG9nX18oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuXG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBFbnZpcm9ubWVudCA9IC8qIEBfX1BVUkVfXyAqLyAoKEVudmlyb25tZW50MikgPT4ge1xuICBFbnZpcm9ubWVudDJbXCJMb2NhbFwiXSA9IFwibG9jYWxcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGV2ZWxvcG1lbnRcIl0gPSBcImRldmVsb3BtZW50XCI7XG4gIEVudmlyb25tZW50MltcIlN0YWdpbmdcIl0gPSBcInN0YWdpbmdcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGVtb1wiXSA9IFwiZGVtb1wiO1xuICBFbnZpcm9ubWVudDJbXCJQcm9kdWN0aW9uXCJdID0gXCJwcm9kdWN0aW9uXCI7XG4gIHJldHVybiBFbnZpcm9ubWVudDI7XG59KShFbnZpcm9ubWVudCB8fCB7fSk7XG52YXIgUGF5SW5GYWlsZWQgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJbkZhaWxlZDIpID0+IHtcbiAgUGF5SW5GYWlsZWQyW1wiTUVUSE9EX0NSRUFUSU9OX0ZBSUxFRFwiXSA9IFwibWV0aG9kQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0JBTEFOQ0VcIl0gPSBcImluc3VmZmljaWVudEJhbGFuY2VcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0FVVEhPUklaQVRJT05cIl0gPSBcImluc3VmZmljaWVudEF1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5GYWlsZWQyW1wiU0lHTkVEX01FU1NBR0VfUkVRVUlSRURcIl0gPSBcInNpZ25lZE1lc3NhZ2VSZXF1aXJlZFwiO1xuICBQYXlJbkZhaWxlZDJbXCJDVVNUT01FUl9DUkVBVElPTl9GQUlMRURcIl0gPSBcImN1c3RvbWVyQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiUEFZTUVOVF9GQUlMRURcIl0gPSBcInBheW1lbnRGYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiVFJBTlNBQ1RJT05fRkFJTEVEXCJdID0gXCJ0cmFuc2FjdGlvbkZhaWxlZFwiO1xuICByZXR1cm4gUGF5SW5GYWlsZWQyO1xufSkoUGF5SW5GYWlsZWQgfHwge30pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRfTUVUSE9EXCJdID0gXCJjcmVhdGluZ1BheW1lbnRNZXRob2RcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgcHJvY2Vzc29yczogW10sXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5mdW5jdGlvbiBYbihlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIGVvKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB0byA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IGE7XG4gICAgfSB8fCBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBmb3IgKHZhciBzIGluIGEpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBzKSAmJiAob1tzXSA9IGFbc10pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHJvID0gZnVuY3Rpb24oZSkge1xuICB0byh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLmNvbnN0cnVjdG9yLCBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IG8ubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBYbihhLCBvLnByb3RvdHlwZSksIGVvKGEpLCBhO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCBDID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkXCIgfSksIGIgPSB6LnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBNID0gKGUpID0+IHoubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBkID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLkxJTkUxID0gXCJsaW5lMVwiLCBlLkxJTkUyID0gXCJsaW5lMlwiLCBlLkxJTkUzID0gXCJsaW5lM1wiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5TSElQUElOR19MSU5FMSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIiwgZS5TSElQUElOR19MSU5FMiA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIiwgZS5TSElQUElOR19MSU5FMyA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTNcIiwgZS5TSElQUElOR19DSVRZID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIsIGUuU0hJUFBJTkdfU1RBVEUgPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIsIGUuU0hJUFBJTkdfQ09VTlRSWSA9IFwic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiLCBlLlNISVBQSU5HX1pJUF9DT0RFID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIsIGUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShkIHx8IHt9KTtcbmNvbnN0IE9yID0gei5uYXRpdmVFbnVtKGQpO1xudmFyIFVyID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShVciB8fCB7fSk7XG5jb25zdCBqciA9IHoubmF0aXZlRW51bShVciksIHhyID0gei51bmlvbihbT3IsIGpyXSk7XG52YXIgdWUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkodWUgfHwge30pO1xuY29uc3Qgbm8gPSB6Lm5hdGl2ZUVudW0odWUpLCB3dCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBNKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogTSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBvbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBiLFxuICBleHBpcnk6IGIsXG4gIGN2YzogYlxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogYixcbiAgY29sb3I6IGIsXG4gIGZvbnRGYW1pbHk6IGIsXG4gIGZvbnRTaXplOiBiLFxuICBmb250V2VpZ2h0OiBiLFxuICBtYXJnaW46IGIsXG4gIHBhZGRpbmc6IGIsXG4gIGxldHRlclNwYWNpbmc6IGIsXG4gIGxpbmVIZWlnaHQ6IGIsXG4gIGhpZGVJY29uOiBiXG59KTtcbmNvbnN0IGllID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBhbyA9IGllLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBpbyA9IHoub2JqZWN0KHsgdHlwZTogYW8gfSksIHNvID0gaWUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBjbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogc28sXG4gIGVsZW1lbnRUeXBlOiBqcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgbG8gPSBpZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgdW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGxvLFxuICBtZXNzYWdlOiBDLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgcG8gPSBpZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBfbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogcG8sXG4gIGVsZW1lbnRUeXBlOiB4cixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgbW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogQ1xufSksIHlvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBiLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KHd0KVxufSksIGZvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIGhvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KSwgRGUgPSB6Lm9iamVjdCh7XG4gIGVtYWlsOiBDLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogQyxcbiAgbGFzdE5hbWU6IEMsXG4gIHByb21vdGlvbkNvZGU6IGIsXG4gIGxpbmUxOiBiLFxuICBsaW5lMjogYixcbiAgbGluZTM6IGIsXG4gIGNpdHk6IGIsXG4gIHN0YXRlOiBiLFxuICBjb3VudHJ5OiBDLFxuICB6aXBDb2RlOiBiLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQoITApLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogYixcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBiLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogYixcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogYlxufSksIGdvID0gei5vYmplY3Qoe1xuICBlbWFpbDogQy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBmaXJzdE5hbWU6IGIsXG4gIGxhc3ROYW1lOiBiLFxuICBwcm9tb3Rpb25Db2RlOiBiLFxuICBsaW5lMTogYixcbiAgbGluZTI6IGIsXG4gIGxpbmUzOiBiLFxuICBjaXR5OiBiLFxuICBzdGF0ZTogYixcbiAgY291bnRyeTogQyxcbiAgemlwQ29kZTogYixcbiAgaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmc6IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogYixcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IGJcbn0pO1xuei5vYmplY3Qoe1xuICBsaW5lMTogQyxcbiAgY2l0eTogQyxcbiAgc3RhdGU6IEMsXG4gIGNvdW50cnk6IENcbn0pO1xuei5vYmplY3Qoe1xuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbnoub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBDLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbmNvbnN0IHdvID0gaWUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgdm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBzZXNzaW9uSWQ6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogd3QsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBiLFxuICBwYXltZW50Um91dGVJZDogYlxufSkuZXh0ZW5kKERlLnNoYXBlKSwgYm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KSwgRW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KSwgUG8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBpbyxcbiAgY28sXG4gIHVvLFxuICBfbyxcbiAgbW8sXG4gIHlvLFxuICB2byxcbiAgYm8sXG4gIEVvLFxuICBmbyxcbiAgaG9cbl0pLCBTbyA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogUG8sXG4gIG5vbmNlOiBDLFxuICBmb3JtSWQ6IEMsXG4gIGVsZW1lbnRJZDogQ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IENcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBNKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBNKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBRZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBNKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KSwgQ28gPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IGtvID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoQ28pXG59KSwgQW8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCghMCkgfSksXG4gIGtvXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHd0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE0oei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE0oei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogd3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IERlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE0oei5zdHJpbmcoKSlcbn0pO1xudmFyIEQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShEIHx8IHt9KTtcbmNvbnN0IElvID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBUbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksICRyID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE0oei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBNKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBNKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBNKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIFJvID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITApLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCghMSkgfSlcbl0pLCBObyA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KG9vKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE0oUWUpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE0oei5hcnJheSgkcikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBNKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBNKFFlKVxufSksIHcgPSAoZSkgPT4gei5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEZvID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBHciA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoei5udW1iZXIoKSlcbn0pLCBWciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIE1vID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIExvID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogdyhNbylcbn0pLCAkZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBEbyA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBPbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShEbyksXG4gIHRyaWFsX3N0YXJ0OiB3KHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoei5zdHJpbmcoKSlcbn0pLCBxciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBVbyA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIGpvID0gei5vYmplY3Qoe1xuICBjb3Vwb246IEdyXG59KSwgeG8gPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoam8pLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KFVvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpXG59KSwgaXIgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoT28pLFxuICBpbnZvaWNlczogei5hcnJheSh4byksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6LmFycmF5KHouc3RyaW5nKCkpKVxufSksIHpyID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBpcixcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KGlyKSxcbiAgY291cG9uczogei5hcnJheShHcilcbn0pLCBzciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFZyKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogTG8sXG4gIHN1YnNfcHJldmlldzogdyh6ciksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheSgkZSksXG4gIHJldHVybl91cmw6IHcoei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiB3KHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KSwgSHIgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHNyLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoc3Iuc2hhcGUpXG5dKSwgJG8gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBHbyA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW0hyLCAkbywgR29dKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBtdCA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogbXQsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IG10Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoVnIpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiAkZSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBWbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFZvKTtcbmNvbnN0IHFvID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogbXQsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBtdC5vcHRpb25hbCgpXG59KSwgem8gPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIFlyID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KHpvKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KSwgSG8gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogJGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQocW8uc2hhcGUpLmV4dGVuZChIby5zaGFwZSk7XG5jb25zdCBKciA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogdyh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIGZpZWxkczogZ28sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJGUsXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6ICRlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiB3KHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCbyA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IHcoUWUpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHouc3RyaW5nKCkpLFxuICBsaW5lMjogdyh6LnN0cmluZygpKSxcbiAgbGluZTM6IHcoei5zdHJpbmcoKSksXG4gIGNpdHk6IHcoei5zdHJpbmcoKSksXG4gIHN0YXRlOiB3KHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiB3KHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6LnN0cmluZygpKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogdyh6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgWW8gPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogJGUsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBKbyA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBabyA9IHoub2JqZWN0KHt9KSwgS28gPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKSwgV28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pLCBRbyA9IHouYXJyYXkoV28pLCBYbyA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSksIGVhID0gei5hcnJheShYbyksIHRhID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBcIkNvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpblwiXG59LCBMdCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gdGFbdF0gPz8gZTtcbn0sIHJhID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIEpTT04ucGFyc2UoZSkgPT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBuYSA9IChlKSA9PiBlLmxlbmd0aCA9PT0gMSA/IEx0KGVbMF0ubXNnKSA6IGBQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYOKAoiAke0x0KHIubXNnKX1gKS5qb2luKGBcbmApfWAsIG9hID0gKGUpID0+IGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGAtICR7ci5wYXRoLmpvaW4oXCIvXCIpfTogJHtyLm1lc3NhZ2V9YCkuam9pbihgXG5gKX1gLCBYID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICBpZiAocmEoZS5tZXNzYWdlKSkge1xuICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBRby5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IG5hKHQpIDogZWEuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBvYSh0KSA6IChjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIHVua25vd24gc3RyaW5naWZpZWQgSlNPTiBvYmplY3Q6XG4ke2UubWVzc2FnZX1gKSwgZS5tZXNzYWdlKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBMdChlLm1lc3NhZ2UpO1xuICBpZiAodHlwZW9mIGUgPT0gXCJvYmplY3RcIilcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB0ICsgXCJcIjtcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gZSArIFwiXCI7XG59LCBhYSA9IChlLCB0LCByKSA9PiAoLi4ubikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0KC4uLm4pO1xuICB9IGNhdGNoIChvKSB7XG4gICAgcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7ZX0pOmAsIG8pO1xuICAgIHJldHVybjtcbiAgfVxufSwgaWEgPSAoZSkgPT4gZS5yZWR1Y2UoKHQsIHIpID0+IHQgKyByLCAwKSwgWnIgPSAoZSkgPT4ge1xuICBlLnByZXZlbnREZWZhdWx0KCksIGUucmV0dXJuVmFsdWUgPSAhMDtcbn0sIHNhID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBacik7XG59LCBjYSA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgWnIpO1xufSwgZWUgPSAoZSkgPT4ge1xuICBsZXQgdCA9ICExO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICB2YXIgbiwgbztcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSAhMDtcbiAgICB0cnkge1xuICAgICAgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiBzYSgpLCAobyA9IChuID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgby5jYWxsKG4pLCBnKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYSA9IGF3YWl0IGUocik7XG4gICAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5hXG4gICAgICB9KSwgc2koKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGEucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKGEubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGEucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBhLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGEucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2F9YCk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdCA9ICExO1xuICAgICAgY29uc3QgcyA9IFgoYSksIGMgPSBhd2FpdCBobihyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgcyk7XG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihzLCBjKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlOiBzLCBlcnJvckNvZGU6IGMsIGVycm9yOiBhIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ID0gITEsIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgY2EoKTtcbiAgICB9XG4gIH07XG59LCB5ZSA9IChlKSA9PiBhc3luYyAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gQShcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgbyA9IFgociksIGEgPSBhd2FpdCBobih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgbyk7XG4gICAgcmV0dXJuIG4oYSwgbywgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IG8sIGVycm9yQ29kZTogYSwgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IG8sIGVycm9yQ29kZTogYSwgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBBID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgRHQgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBEdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIG8gaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIG8pICYmIChyW29dID0gbltvXSk7XG4gIH0sIER0KGUsIHQpO1xufTtcbmZ1bmN0aW9uIGdlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgRHQoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIGxhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gbyhhKSB7XG4gICAgcmV0dXJuIGEgaW5zdGFuY2VvZiByID8gYSA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMoYSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihhLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIHMoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgcyh5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICBwLmRvbmUgPyBhKHAudmFsdWUpIDogbyhwLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gS3IoZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChhWzBdICYgMSkgdGhyb3cgYVsxXTtcbiAgICByZXR1cm4gYVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgYSwgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gbChbdSwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBvICYmIChhID0gdVswXSAmIDIgPyBvLnJldHVybiA6IHVbMF0gPyBvLnRocm93IHx8ICgoYSA9IG8ucmV0dXJuKSAmJiBhLmNhbGwobyksIDApIDogby5uZXh0KSAmJiAhKGEgPSBhLmNhbGwobywgdVsxXSkpLmRvbmUpIHJldHVybiBhO1xuICAgICAgc3dpdGNoIChvID0gMCwgYSAmJiAodSA9IFt1WzBdICYgMiwgYS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgbyA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoYSA9IHIudHJ5cywgIShhID0gYS5sZW5ndGggPiAwICYmIGFbYS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghYSB8fCB1WzFdID4gYVswXSAmJiB1WzFdIDwgYVszXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBhWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gYVsxXSwgYSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEgJiYgci5sYWJlbCA8IGFbMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBhWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFbMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgdSA9IFs2LCBwXSwgbyA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBhID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gT2UoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHl0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufVxuZnVuY3Rpb24gZnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBNZShlKTtcbn1cbmZ1bmN0aW9uIHVhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBvLCBhID0gW107XG4gIHJldHVybiBvID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbztcbiAgZnVuY3Rpb24gcyhtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZikudGhlbihtLCB5KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgZikge1xuICAgIG5bbV0gJiYgKG9bbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odiwgRSkge1xuICAgICAgICBhLnB1c2goW20sIGgsIHYsIEVdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIGYgJiYgKG9bbV0gPSBmKG9bbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCBmKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXShmKSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhhWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIE1lID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLCB5KSA6IF8oYVswXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gcChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24geShtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgZikge1xuICAgIG0oZiksIGEuc2hpZnQoKSwgYS5sZW5ndGggJiYgbChhWzBdWzBdLCBhWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gZGEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIE9lID09IFwiZnVuY3Rpb25cIiA/IE9lKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4oYSkge1xuICAgIHJbYV0gPSBlW2FdICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW2FdKHMpLCBvKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG8oYSwgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGEoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gJChlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiB2dChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIGt0ID0gdnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBvKSB7XG4gICAgICByZXR1cm4gbyArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gaHQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIG90ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIG8sIGE7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gT2UocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIHAgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmICgkKHApKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHAoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIGEgPSBoIGluc3RhbmNlb2Yga3QgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIHkgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKHkpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IE9lKHkpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGYgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY3IoZik7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIGEgPSBhID8/IFtdLCBoIGluc3RhbmNlb2Yga3QgPyBhID0gZnQoZnQoW10sIHl0KGEpKSwgeXQoaC5lcnJvcnMpKSA6IGEucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKG8gPSBfLnJldHVybikgJiYgby5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhKVxuICAgICAgICB0aHJvdyBuZXcga3QoYSk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgY3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGh0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgaHQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBXciA9IG90LkVNUFRZO1xuZnVuY3Rpb24gUXIoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIG90IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmICQoZS5yZW1vdmUpICYmICQoZS5hZGQpICYmICQoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBjcihlKSB7XG4gICQoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgWHIgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgZW4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBmdChbZSwgdF0sIHl0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIHRuKGUpIHtcbiAgZW4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxyKCkge1xufVxuZnVuY3Rpb24gZHQoZSkge1xuICBlKCk7XG59XG52YXIgVnQgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBRcihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0geWEsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIHJldHVybiBuZXcgT3Qociwgbiwgbyk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KG90KSwgcGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEF0KGUsIHQpIHtcbiAgcmV0dXJuIHBhLmNhbGwoZSwgdCk7XG59XG52YXIgX2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgY3Qobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBjdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBjdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBjdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgT3QgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIG8pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmICgkKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IG8gPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBhICYmIFhyLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIEF0KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIEF0KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBBdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSBuZXcgX2EocyksIGE7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFZ0KTtcbmZ1bmN0aW9uIGN0KGUpIHtcbiAgdG4oZSk7XG59XG5mdW5jdGlvbiBtYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIgeWEgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGxyLFxuICBlcnJvcjogbWEsXG4gIGNvbXBsZXRlOiBsclxufSwgcXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBmYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gaGEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBmYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgbykge1xuICAgICAgcmV0dXJuIG8obik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgbWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLCBhID0gd2EodCkgPyB0IDogbmV3IE90KHQsIHIsIG4pO1xuICAgIHJldHVybiBkdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbywgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIGEuYWRkKGMgPyBjLmNhbGwoYSwgbCkgOiBsID8gby5fc3Vic2NyaWJlKGEpIDogby5fdHJ5U3Vic2NyaWJlKGEpKTtcbiAgICB9KSwgYTtcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSB1cihyKSwgbmV3IHIoZnVuY3Rpb24obywgYSkge1xuICAgICAgdmFyIHMgPSBuZXcgT3Qoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgYShsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGEsXG4gICAgICAgIGNvbXBsZXRlOiBvXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbcXRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gaGEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSB1cih0KSwgbmV3IHQoZnVuY3Rpb24obiwgbykge1xuICAgICAgdmFyIGE7XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBhID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIG8ocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4oYSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gdXIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBYci5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgJChlLm5leHQpICYmICQoZS5lcnJvcikgJiYgJChlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIHdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFZ0IHx8IGdhKGUpICYmIFFyKGUpO1xufVxuZnVuY3Rpb24gdmEoZSkge1xuICByZXR1cm4gJChlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gYmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmICh2YSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gRWEoZSwgdCwgciwgbiwgbykge1xuICByZXR1cm4gbmV3IFBhKGUsIHQsIHIsIG4sIG8pO1xufVxudmFyIFBhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBvLCBhLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgci5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gYSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEodSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHIuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBvID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFZ0KSwgU2EgPSB2dChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHJuID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IGRyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgU2EoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbywgYTtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gT2Uobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBvID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKGEgPSBzLnJldHVybikgJiYgYS5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGR0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgbyA9IG4ub2JzZXJ2ZXJzOyBvLmxlbmd0aDsgKVxuICAgICAgICAgIG8uc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gdGhpcywgYSA9IG8uaGFzRXJyb3IsIHMgPSBvLmlzU3RvcHBlZCwgYyA9IG8ub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBhIHx8IHMgPyBXciA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBvdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGh0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gbi5oYXNFcnJvciwgYSA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBvID8gci5lcnJvcihhKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBtZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgZHIociwgbik7XG4gIH0sIHQ7XG59KG1lKSwgZHIgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLmRlc3RpbmF0aW9uID0gciwgby5zb3VyY2UgPSBuLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCB8fCBvLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgfHwgby5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIHJldHVybiAobyA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogV3I7XG4gIH0sIHQ7XG59KHJuKSwgQ2EgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIGthID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0ob3QpLCBwciA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgZnQoW2UsIHRdLCB5dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIEFhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gby5zY2hlZHVsZXIgPSByLCBvLndvcmsgPSBuLCBvLnBlbmRpbmcgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG87XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBhID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBhICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIGEsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKG8gPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgcmV0dXJuIG8gPT09IHZvaWQgMCAmJiAobyA9IDApLCBwci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIG8pO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0gMCksIG8gIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBvICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgcHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgbyA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gbztcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG8gPSAhMSwgYTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIG8gPSAhMCwgYSA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBhO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIG8gPSByLnNjaGVkdWxlciwgYSA9IG8uYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBodChhLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChvLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oa2EpLCBfciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IENhLm5vdywgZTtcbn0oKSwgSWEgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBfci5ub3cpO1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uYWN0aW9ucyA9IFtdLCBvLl9hY3RpdmUgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbztcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKG8gPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIG8pIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IG87XG4gICAgfVxuICB9LCB0O1xufShfciksIFRhID0gbmV3IElhKEFhKSwgUmEgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBOYShlKSB7XG4gIHJldHVybiAkKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBGYShlKSB7XG4gIHJldHVybiAkKGVbcXRdKTtcbn1cbmZ1bmN0aW9uIE1hKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmICQoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gTGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIERhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIE9hID0gRGEoKTtcbmZ1bmN0aW9uIFVhKGUpIHtcbiAgcmV0dXJuICQoZSA9PSBudWxsID8gdm9pZCAwIDogZVtPYV0pO1xufVxuZnVuY3Rpb24gamEoZSkge1xuICByZXR1cm4gdWEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgbywgYTtcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgTWUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIG8gPSBuLnZhbHVlLCBhID0gbi5kb25lLCBhID8gWzQsIE1lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIE1lKG8pXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHhhKGUpIHtcbiAgcmV0dXJuICQoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gJGEoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIG1lKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKEZhKGUpKVxuICAgICAgcmV0dXJuIEdhKGUpO1xuICAgIGlmIChSYShlKSlcbiAgICAgIHJldHVybiBWYShlKTtcbiAgICBpZiAoTmEoZSkpXG4gICAgICByZXR1cm4gcWEoZSk7XG4gICAgaWYgKE1hKGUpKVxuICAgICAgcmV0dXJuIG5uKGUpO1xuICAgIGlmIChVYShlKSlcbiAgICAgIHJldHVybiB6YShlKTtcbiAgICBpZiAoeGEoZSkpXG4gICAgICByZXR1cm4gSGEoZSk7XG4gIH1cbiAgdGhyb3cgTGEoZSk7XG59XG5mdW5jdGlvbiBHYShlKSB7XG4gIHJldHVybiBuZXcgbWUoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtxdF0oKTtcbiAgICBpZiAoJChyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFZhKGUpIHtcbiAgcmV0dXJuIG5ldyBtZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcWEoZSkge1xuICByZXR1cm4gbmV3IG1lKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIHRuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6YShlKSB7XG4gIHJldHVybiBuZXcgbWUoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBvID0gT2UoZSksIGEgPSBvLm5leHQoKTsgIWEuZG9uZTsgYSA9IG8ubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gYS52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5uKGUpIHtcbiAgcmV0dXJuIG5ldyBtZShmdW5jdGlvbih0KSB7XG4gICAgQmEoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbm4oamEoZSkpO1xufVxuZnVuY3Rpb24gQmEoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYTtcbiAgcmV0dXJuIGxhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IGRhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIG8gPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChhID0gci5yZXR1cm4pID8gWzQsIGEuY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWWEoZSwgdCwgciwgbiwgbykge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgbyA9PT0gdm9pZCAwICYmIChvID0gITEpO1xuICB2YXIgYSA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBvID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQoYSksICFvKVxuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gSmEoZSwgdCkge1xuICB2YXIgciA9ICQoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIG8uZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBtZShuKTtcbn1cbnZhciBaYSA9IHZ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIEthKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbyA9ICExLCBhO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgYSA9IHMsIG8gPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbyA/IHIoYSkgOiBuKG5ldyBaYSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBXYShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgUWEgPSB2dChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWGEoZSwgdCkge1xuICB2YXIgciA9IFdhKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIG8gPSByLmVhY2gsIGEgPSByLndpdGgsIHMgPSBhID09PSB2b2lkIDAgPyBlaSA6IGEsIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IFRhIDogYywgdSA9IHIubWV0YSwgcCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIG8gPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBiYShmdW5jdGlvbih5LCBfKSB7XG4gICAgdmFyIG0sIGYsIGggPSBudWxsLCB2ID0gMCwgRSA9IGZ1bmN0aW9uKFApIHtcbiAgICAgIGYgPSBZYShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksICRhKHMoe1xuICAgICAgICAgICAgbWV0YTogcCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IHZcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgXy5lcnJvcihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgUCk7XG4gICAgfTtcbiAgICBtID0geS5zdWJzY3JpYmUoRWEoXywgZnVuY3Rpb24oUCkge1xuICAgICAgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgdisrLCBfLm5leHQoaCA9IFApLCBvID4gMCAmJiBFKG8pO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIGYgIT0gbnVsbCAmJiBmLmNsb3NlZCB8fCBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICF2ICYmIEUobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBvKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlaShlKSB7XG4gIHRocm93IG5ldyBRYShlKTtcbn1cbmNsYXNzIFplIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGJ0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gSmEoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEthKHRoaXMuX3N1YmplY3QucGlwZShYYShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBybigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBtciA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKSwgdGkgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn0sIHJpID0gKGUpID0+IHRpW2VdLCBJdCA9IHt9LCBvbiA9IGFzeW5jIChlKSA9PiB7XG4gIGlmIChJdFtlXSlcbiAgICByZXR1cm4gSXRbZV07XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGUpKS50aGVuKChuKSA9PiBuLmpzb24oKSksIHIgPSBtci5wYXJzZSh0LmVudmlyb25tZW50KTtcbiAgICByZXR1cm4gSXRbZV0gPSByLCByO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbXIuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5mdW5jdGlvbiBidChlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7ZX1gKTtcbn1cbmNvbnN0IEV0ID0gKGUsIHQpID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFtyXSkgPT4gIXQuaW5jbHVkZXMocikpKSwgaiA9ICgpID0+IHtcbiAgaWYgKCEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSlcbiAgICByZXR1cm4gd2luZG93O1xufSwgVXQgPSBuZXcgWmUoKSwgeXIgPSBcIm9wX21ldHJpY3NfcXVldWVcIiwgbmkgPSAzLCBvaSA9IDMsIGFpID0gMWUzLCB7IGxvZ19fOiBsdCB9ID0gQShcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBpaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDAsIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbHQoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIiksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSwgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGx0KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKSwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCksICh0ID0gaigpKSA9PSBudWxsIHx8IHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQodCwgciwgbikge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBldmVudE5hbWU6IHQsXG4gICAgICBwcm9wZXJ0aWVzOiByIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IG4gfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gby50aW1lc3RhbXAsIHRoaXMucXVldWUucHVzaChvKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSwgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0gKHIgPSAodCA9IGooKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHQubG9jYWxTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogci5nZXRJdGVtKHlyKTtcbiAgICAgIG4gJiYgKHRoaXMucXVldWUgPSBKU09OLnBhcnNlKG4pKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHZhciB0O1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQubG9jYWxTdG9yYWdlLnNldEl0ZW0oeXIsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCB0ID0gaigpO1xuICAgIHQgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSB0LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIGFpKSk7XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIHZhciB0O1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ICYmICgodCA9IGooKSkgPT0gbnVsbCB8fCB0LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCksIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCksIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITE7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgICFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwIHx8ICh0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICEwLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHQgPSBVdC5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghdCkge1xuICAgICAgbHQoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMucXVldWUuc2xpY2UoMCwgb2kpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0ge1xuICAgICAgICBldmVudHM6IHIubWFwKChjKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGMuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogdC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAuLi5jLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogYy5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBjLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBjLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBjLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmMucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBvID0gcmkodC5lbnZpcm9ubWVudCksIGEgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgbyk7XG4gICAgICAoYXdhaXQgZmV0Y2goYS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuKVxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHIubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgIGx0KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBuKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2godCkge1xuICAgIHQuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCByID0gdC5maWx0ZXIoKG4pID0+IG4uYXR0ZW1wdENvdW50IDwgbmkpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi5yLCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciB0LCByO1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHp0ID0gbmV3IGlpKCksIGcgPSAoZSwgdCwgcikgPT4ge1xuICB6dC5hZGRFdmVudChlLCB0LCByKTtcbn0sIHNpID0gKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0sIGFuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFgoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHNuID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBYKGUuZXJyb3IpO1xuICBnKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogKHIgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogci5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAobiA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBuLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIGNpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBqKCkpID09IG51bGwgfHwgZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc24pLCAodCA9IGooKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgYW4pO1xufSwgbGkgPSAoKSA9PiB7XG4gIHZhciBlLCB0O1xuICAoZSA9IGooKSkgPT0gbnVsbCB8fCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzbiksICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBhbik7XG59O1xudmFyIExyO1xuKExyID0gaigpKSA9PSBudWxsIHx8IExyLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY29uc3QgdWkgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KSwgZGkgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSksIHBpID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgUHQgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCByID0gMDsgciA8IDEwOyByKyspXG4gICAgZnIoKSB8fCBhd2FpdCBTdCg1MDApO1xuICBpZiAoIWZyKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgX2kgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgUHQoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHIuZWxlbWVudHModCksXG4gICAgc3RyaXBlOiByXG4gIH07XG59LCBtaSA9IGFzeW5jIChlLCB0LCByLCBuLCBvKSA9PiB7XG4gIGNvbnN0IGEgPSBhd2FpdCBQdChlKSwgcyA9IHBpW3IudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gYS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHQsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIFN0ID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIHNldFRpbWVvdXQodCwgZSk7XG59KSwgZnIgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgeWkgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgdChuKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICByKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByKG4pO1xuICB9XG59KSwgZmkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBQdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgdC5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gdC5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBoaSA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBvLCBhLCBzLCBjO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IFB0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAobyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBvLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHIuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKGEgPSByLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXNzYWdlKSA/PyAoKGMgPSAocyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBzLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn07XG52YXIgZ2kgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PSBcIm9iamVjdFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmID09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiID8gZ2xvYmFsIDoge30sIFNlID0gXCIxLjkuMFwiLCBociA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbmZ1bmN0aW9uIHdpKGUpIHtcbiAgdmFyIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbZV0pLCByID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbiA9IGUubWF0Y2goaHIpO1xuICBpZiAoIW4pXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH07XG4gIHZhciBvID0ge1xuICAgIG1ham9yOiArblsxXSxcbiAgICBtaW5vcjogK25bMl0sXG4gICAgcGF0Y2g6ICtuWzNdLFxuICAgIHByZXJlbGVhc2U6IG5bNF1cbiAgfTtcbiAgaWYgKG8ucHJlcmVsZWFzZSAhPSBudWxsKVxuICAgIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gbCA9PT0gZTtcbiAgICB9O1xuICBmdW5jdGlvbiBhKGMpIHtcbiAgICByZXR1cm4gci5hZGQoYyksICExO1xuICB9XG4gIGZ1bmN0aW9uIHMoYykge1xuICAgIHJldHVybiB0LmFkZChjKSwgITA7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICBpZiAodC5oYXMobCkpXG4gICAgICByZXR1cm4gITA7XG4gICAgaWYgKHIuaGFzKGwpKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciB1ID0gbC5tYXRjaChocik7XG4gICAgaWYgKCF1KVxuICAgICAgcmV0dXJuIGEobCk7XG4gICAgdmFyIHAgPSB7XG4gICAgICBtYWpvcjogK3VbMV0sXG4gICAgICBtaW5vcjogK3VbMl0sXG4gICAgICBwYXRjaDogK3VbM10sXG4gICAgICBwcmVyZWxlYXNlOiB1WzRdXG4gICAgfTtcbiAgICByZXR1cm4gcC5wcmVyZWxlYXNlICE9IG51bGwgfHwgby5tYWpvciAhPT0gcC5tYWpvciA/IGEobCkgOiBvLm1ham9yID09PSAwID8gby5taW5vciA9PT0gcC5taW5vciAmJiBvLnBhdGNoIDw9IHAucGF0Y2ggPyBzKGwpIDogYShsKSA6IG8ubWlub3IgPD0gcC5taW5vciA/IHMobCkgOiBhKGwpO1xuICB9O1xufVxudmFyIHZpID0gd2koU2UpLCBiaSA9IFNlLnNwbGl0KFwiLlwiKVswXSwgWGUgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBiaSksIGV0ID0gZ2k7XG5mdW5jdGlvbiBIdChlLCB0LCByLCBuKSB7XG4gIHZhciBvO1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMSk7XG4gIHZhciBhID0gZXRbWGVdID0gKG8gPSBldFtYZV0pICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB7XG4gICAgdmVyc2lvbjogU2VcbiAgfTtcbiAgaWYgKCFuICYmIGFbZV0pIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIGUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgaWYgKGEudmVyc2lvbiAhPT0gU2UpIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYS52ZXJzaW9uICsgXCIgZm9yIFwiICsgZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgU2UpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgcmV0dXJuIGFbZV0gPSB0LCByLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBTZSArIFwiLlwiKSwgITA7XG59XG5mdW5jdGlvbiB0dChlKSB7XG4gIHZhciB0LCByLCBuID0gKHQgPSBldFtYZV0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmVyc2lvbjtcbiAgaWYgKCEoIW4gfHwgIXZpKG4pKSlcbiAgICByZXR1cm4gKHIgPSBldFtYZV0pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJbZV07XG59XG5mdW5jdGlvbiBCdChlLCB0KSB7XG4gIHQuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFNlICsgXCIuXCIpO1xuICB2YXIgciA9IGV0W1hlXTtcbiAgciAmJiBkZWxldGUgcltlXTtcbn1cbnZhciBFaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgUGkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgU2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2UgPSB0Lm5hbWVzcGFjZSB8fCBcIkRpYWdDb21wb25lbnRMb2dnZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwiZGVidWdcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImVycm9yXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImluZm9cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwid2FyblwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gemUoXCJ2ZXJib3NlXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gemUoZSwgdCwgcikge1xuICB2YXIgbiA9IHR0KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBQaShbXSwgRWkociksICExKSk7XG59XG52YXIgWjtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLkVSUk9SID0gMzBdID0gXCJFUlJPUlwiLCBlW2UuV0FSTiA9IDUwXSA9IFwiV0FSTlwiLCBlW2UuSU5GTyA9IDYwXSA9IFwiSU5GT1wiLCBlW2UuREVCVUcgPSA3MF0gPSBcIkRFQlVHXCIsIGVbZS5WRVJCT1NFID0gODBdID0gXCJWRVJCT1NFXCIsIGVbZS5BTEwgPSA5OTk5XSA9IFwiQUxMXCI7XG59KShaIHx8IChaID0ge30pKTtcbmZ1bmN0aW9uIENpKGUsIHQpIHtcbiAgZSA8IFouTk9ORSA/IGUgPSBaLk5PTkUgOiBlID4gWi5BTEwgJiYgKGUgPSBaLkFMTCksIHQgPSB0IHx8IHt9O1xuICBmdW5jdGlvbiByKG4sIG8pIHtcbiAgICB2YXIgYSA9IHRbbl07XG4gICAgcmV0dXJuIHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIiAmJiBlID49IG8gPyBhLmJpbmQodCkgOiBmdW5jdGlvbigpIHtcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHIoXCJlcnJvclwiLCBaLkVSUk9SKSxcbiAgICB3YXJuOiByKFwid2FyblwiLCBaLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIFouSU5GTyksXG4gICAgZGVidWc6IHIoXCJkZWJ1Z1wiLCBaLkRFQlVHKSxcbiAgICB2ZXJib3NlOiByKFwidmVyYm9zZVwiLCBaLlZFUkJPU0UpXG4gIH07XG59XG52YXIga2kgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgYSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGEucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn0sIEFpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIElpID0gXCJkaWFnXCIsIGd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICBmdW5jdGlvbiB0KG8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBhW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBjID0gdHQoXCJkaWFnXCIpO1xuICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgcmV0dXJuIGNbb10uYXBwbHkoYywgQWkoW10sIGtpKGEpLCAhMSkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gZnVuY3Rpb24obywgYSkge1xuICAgICAgICB2YXIgcywgYywgbDtcbiAgICAgICAgaWYgKGEgPT09IHZvaWQgMCAmJiAoYSA9IHsgbG9nTGV2ZWw6IFouSU5GTyB9KSwgbyA9PT0gcikge1xuICAgICAgICAgIHZhciB1ID0gbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gci5lcnJvcigocyA9IHUuc3RhY2spICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiB1Lm1lc3NhZ2UpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgYSA9PSBcIm51bWJlclwiICYmIChhID0ge1xuICAgICAgICAgIGxvZ0xldmVsOiBhXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcCA9IHR0KFwiZGlhZ1wiKSwgeSA9IENpKChjID0gYS5sb2dMZXZlbCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IFouSU5GTywgbyk7XG4gICAgICAgIGlmIChwICYmICFhLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIF8gPSAobCA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgcC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgXyksIHkud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIF8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBIdChcImRpYWdcIiwgeSwgciwgITApO1xuICAgICAgfTtcbiAgICAgIHIuc2V0TG9nZ2VyID0gbiwgci5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIEJ0KElpLCByKTtcbiAgICAgIH0sIHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24obykge1xuICAgICAgICByZXR1cm4gbmV3IFNpKG8pO1xuICAgICAgfSwgci52ZXJib3NlID0gdChcInZlcmJvc2VcIiksIHIuZGVidWcgPSB0KFwiZGVidWdcIiksIHIuaW5mbyA9IHQoXCJpbmZvXCIpLCByLndhcm4gPSB0KFwid2FyblwiKSwgci5lcnJvciA9IHQoXCJlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuaW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gVGkoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBSaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICByLl9jdXJyZW50Q29udGV4dCA9IHQgPyBuZXcgTWFwKHQpIDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgci5nZXRWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHIuX2N1cnJlbnRDb250ZXh0LmdldChuKTtcbiAgICAgIH0sIHIuc2V0VmFsdWUgPSBmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIHZhciBhID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gYS5fY3VycmVudENvbnRleHQuc2V0KG4sIG8pLCBhO1xuICAgICAgfSwgci5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5kZWxldGUobiksIG87XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCBOaSA9IG5ldyBSaSgpLCBGaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgTWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgTGkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE5pO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBvID0gW10sIGEgPSAzOyBhIDwgYXJndW1lbnRzLmxlbmd0aDsgYSsrKVxuICAgICAgICBvW2EgLSAzXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgTWkoW25dLCBGaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KClcbiksIERpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGEgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBhLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59LCBPaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGE7IG4gPCBvOyBuKyspXG4gICAgKGEgfHwgIShuIGluIHQpKSAmJiAoYSB8fCAoYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgYVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoYSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBUdCA9IFwiY29udGV4dFwiLCBVaSA9IG5ldyBMaSgpLCBZdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBIdChUdCwgdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbywgYSA9IFtdLCBzID0gMzsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgYVtzIC0gM10gPSBhcmd1bWVudHNbc107XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KG8sIE9pKFt0LCByLCBuXSwgRGkoYSksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdHQoVHQpIHx8IFVpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpLCBCdChUdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBqdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoanQgfHwgKGp0ID0ge30pKTtcbnZhciBjbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBsbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgamkgPSB7XG4gIHRyYWNlSWQ6IGxuLFxuICBzcGFuSWQ6IGNuLFxuICB0cmFjZUZsYWdzOiBqdC5OT05FXG59LCBLZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGppKSwgdGhpcy5fc3BhbkNvbnRleHQgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgSnQgPSBUaShcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtcbmZ1bmN0aW9uIFp0KGUpIHtcbiAgcmV0dXJuIGUuZ2V0VmFsdWUoSnQpIHx8IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHhpKCkge1xuICByZXR1cm4gWnQoWXQuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5mdW5jdGlvbiBLdChlLCB0KSB7XG4gIHJldHVybiBlLnNldFZhbHVlKEp0LCB0KTtcbn1cbmZ1bmN0aW9uICRpKGUpIHtcbiAgcmV0dXJuIGUuZGVsZXRlVmFsdWUoSnQpO1xufVxuZnVuY3Rpb24gR2koZSwgdCkge1xuICByZXR1cm4gS3QoZSwgbmV3IEtlKHQpKTtcbn1cbmZ1bmN0aW9uIHVuKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IFp0KGUpKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnNwYW5Db250ZXh0KCk7XG59XG52YXIgVmkgPSAvXihbMC05YS1mXXszMn0pJC9pLCBxaSA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gemkoZSkge1xuICByZXR1cm4gVmkudGVzdChlKSAmJiBlICE9PSBsbjtcbn1cbmZ1bmN0aW9uIEhpKGUpIHtcbiAgcmV0dXJuIHFpLnRlc3QoZSkgJiYgZSAhPT0gY247XG59XG5mdW5jdGlvbiBkbihlKSB7XG4gIHJldHVybiB6aShlLnRyYWNlSWQpICYmIEhpKGUuc3BhbklkKTtcbn1cbmZ1bmN0aW9uIEJpKGUpIHtcbiAgcmV0dXJuIG5ldyBLZShlKTtcbn1cbnZhciBSdCA9IFl0LmdldEluc3RhbmNlKCksIHBuID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBSdC5hY3RpdmUoKSk7XG4gICAgICB2YXIgbyA9ICEhKHIgIT0gbnVsbCAmJiByLnJvb3QpO1xuICAgICAgaWYgKG8pXG4gICAgICAgIHJldHVybiBuZXcgS2UoKTtcbiAgICAgIHZhciBhID0gbiAmJiB1bihuKTtcbiAgICAgIHJldHVybiBZaShhKSAmJiBkbihhKSA/IG5ldyBLZShhKSA6IG5ldyBLZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhLCBzLCBjO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBjID0gciA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAoYSA9IHIsIGMgPSBuKSA6IChhID0gciwgcyA9IG4sIGMgPSBvKTtcbiAgICAgICAgdmFyIGwgPSBzID8/IFJ0LmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgYSwgbCksIHAgPSBLdChsLCB1KTtcbiAgICAgICAgcmV0dXJuIFJ0LndpdGgocCwgYywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZaShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUZsYWdzID09IFwibnVtYmVyXCI7XG59XG52YXIgSmkgPSBuZXcgcG4oKSwgWmkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBvKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IG87XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhLnN0YXJ0QWN0aXZlU3BhbiwgYSwgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IEppO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgS2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiBuZXcgcG4oKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFdpID0gbmV3IEtpKCksIGdyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIodCwgciwgbikpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBuZXcgWmkodGhpcywgdCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICh0ID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBXaTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRlID0gdDtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG8uZ2V0VHJhY2VyKHQsIHIsIG4pO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgcnQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuSU5URVJOQUwgPSAwXSA9IFwiSU5URVJOQUxcIiwgZVtlLlNFUlZFUiA9IDFdID0gXCJTRVJWRVJcIiwgZVtlLkNMSUVOVCA9IDJdID0gXCJDTElFTlRcIiwgZVtlLlBST0RVQ0VSID0gM10gPSBcIlBST0RVQ0VSXCIsIGVbZS5DT05TVU1FUiA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkocnQgfHwgKHJ0ID0ge30pKTtcbnZhciBoZTtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5VTlNFVCA9IDBdID0gXCJVTlNFVFwiLCBlW2UuT0sgPSAxXSA9IFwiT0tcIiwgZVtlLkVSUk9SID0gMl0gPSBcIkVSUk9SXCI7XG59KShoZSB8fCAoaGUgPSB7fSkpO1xudmFyIExlID0gWXQuZ2V0SW5zdGFuY2UoKSwgTnQgPSBcInRyYWNlXCIsIFFpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IGdyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gQmksIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gZG4sIHRoaXMuZGVsZXRlU3BhbiA9ICRpLCB0aGlzLmdldFNwYW4gPSBadCwgdGhpcy5nZXRBY3RpdmVTcGFuID0geGksIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSB1biwgdGhpcy5zZXRTcGFuID0gS3QsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBHaTtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IEh0KE50LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBndC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0dChOdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBCdChOdCwgZ3QuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgZ3IoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFVlID0gUWkuZ2V0SW5zdGFuY2UoKTtcbmNvbnN0IFhpID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG8gPSBMZS5hY3RpdmUoKSwgYSA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9cbiAgKTtcbiAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihvLCBhKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIGEuc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgYS5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBoZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCB1dCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gTGUuYWN0aXZlKCksIG8gPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIGE7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBzID0gYSBpbnN0YW5jZW9mIEVycm9yID8gYS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIGE7XG4gIH0gZmluYWxseSB7XG4gICAgby5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIF9uIGV4dGVuZHMgcm8ge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBYaShlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgbyA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKHRzKG8pKVxuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgLi4ub1xuICAgIH0pLCBuZXcgX24obyk7XG4gIGlmICghZXMobywgcikpIHtcbiAgICBjb25zdCBhID0gci5zYWZlUGFyc2Uobyk7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgbyksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLm9cbiAgfSksIG87XG59KSwgZXMgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgdHMgPSAoZSkgPT4gRm8uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIHJzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgenIpLCBOID0gYXN5bmMgKGUpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEhyKSwgd2UgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIEpyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBtbiA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIEJvLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgbnMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IHEoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBKcik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCBWID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIE5vLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIG9zID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIEJyLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIGFzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBSbyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgaXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgcnMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgbyA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoby5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke28uc2l6ZX1gKTtcbiAgY29uc3QgYSA9IG8udmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBpYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBhLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGZlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBvID0gYXdhaXQgaXMoZSwgdCwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogby5hbW91bnRBdG9tLCBjdXJyZW5jeTogby5jdXJyZW5jeSB9O1xuICB9XG59LCB5biA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gcShuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiB0IH0sIEFvKVxuICAgIClcbiAgKTtcbn0sIHdyID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHQgfSxcbiAgUWUsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCBzcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sIEJyLCBcInNldHVwX2NoZWNrb3V0XCIpLCBXdCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiB0IH0sIFFlLCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIGZuID0gMWUzLCBjcyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnNvbGUubG9nKHQpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogZm4sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIG8gPSBhd2FpdCBxKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBJbyk7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIG8pLCBvO1xufSwgQ3QgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgSm8sXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgaG4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgcShcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBZb1xuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBYKHIpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIGxzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IHQgfSB9LFxuICBab1xuKSwgdXMgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCAhZSkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSB7IHR5cGU6IFwicGluZ1wiIH0sIHIgPSBhd2FpdCBlLnNlbmQodCk7XG4gICAgaWYgKHIgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoICh0KSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCB0KSwgITE7XG4gIH1cbn0sIGRzID0gKGUsIHQpID0+ICEhZSAmJiB0LCBnbiA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgd24gPSBcIjAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaXCIsIFdlID0gMzIsIHBzID0gMTYsIHZuID0gMTAsIHZyID0gMjgxNDc0OTc2NzEwNjU1O1xudmFyIENlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZS5CYXNlMzJJbmNvcnJlY3RFbmNvZGluZyA9IFwiQjMyX0VOQ19JTlZBTElEXCIsIGUuRGVjb2RlVGltZUludmFsaWRDaGFyYWN0ZXIgPSBcIkRFQ19USU1FX0NIQVJcIiwgZS5EZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWQgPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiLCBlLkVuY29kZVRpbWVOZWdhdGl2ZSA9IFwiRU5DX1RJTUVfTkVHXCIsIGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCA9IFwiRU5DX1RJTUVfU0laRV9FWENFRURcIiwgZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQgPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiLCBlLlBSTkdEZXRlY3RGYWlsdXJlID0gXCJQUk5HX0RFVEVDVFwiLCBlLlVMSURJbnZhbGlkID0gXCJVTElEX0lOVkFMSURcIiwgZS5VbmV4cGVjdGVkID0gXCJVTkVYUEVDVEVEXCIsIGUuVVVJREludmFsaWQgPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoQ2UgfHwgKENlID0ge30pKTtcbmNsYXNzIEhlIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0LCByKSB7XG4gICAgc3VwZXIoYCR7cn0gKCR7dH0pYCksIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCIsIHRoaXMuY29kZSA9IHQ7XG4gIH1cbn1cbmZ1bmN0aW9uIF9zKGUpIHtcbiAgbGV0IHQgPSBNYXRoLmZsb29yKGUoKSAqIFdlKTtcbiAgcmV0dXJuIHQgPT09IFdlICYmICh0ID0gV2UgLSAxKSwgd24uY2hhckF0KHQpO1xufVxuZnVuY3Rpb24gbXMoZSkge1xuICBjb25zdCB0ID0geXMoKSwgciA9IHQgJiYgKHQuY3J5cHRvIHx8IHQubXNDcnlwdG8pIHx8IG51bGw7XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0UmFuZG9tVmFsdWVzKSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgIHJldHVybiByLmdldFJhbmRvbVZhbHVlcyhuKSwgblswXSAvIDI1NTtcbiAgICB9O1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLnJhbmRvbUJ5dGVzKSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuICgpID0+IHIucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAyNTU7XG4gIHRocm93IG5ldyBIZShDZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiB5cygpIHtcbiAgcmV0dXJuIGdzKCkgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA8IFwidVwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA8IFwidVwiID8gZ2xvYmFsIDogdHlwZW9mIGdsb2JhbFRoaXMgPCBcInVcIiA/IGdsb2JhbFRoaXMgOiBudWxsO1xufVxuZnVuY3Rpb24gZnMoZSwgdCkge1xuICBsZXQgciA9IFwiXCI7XG4gIGZvciAoOyBlID4gMDsgZS0tKVxuICAgIHIgPSBfcyh0KSArIHI7XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gaHMoZSwgdCA9IHZuKSB7XG4gIGlmIChpc05hTihlKSlcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke2V9YCk7XG4gIGlmIChlID4gdnIpXG4gICAgdGhyb3cgbmV3IEhlKENlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke3ZyfTogJHtlfWApO1xuICBpZiAoZSA8IDApXG4gICAgdGhyb3cgbmV3IEhlKENlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtlfWApO1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihlKSA9PT0gITEpXG4gICAgdGhyb3cgbmV3IEhlKENlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke2V9YCk7XG4gIGxldCByLCBuID0gXCJcIjtcbiAgZm9yIChsZXQgbyA9IHQ7IG8gPiAwOyBvLS0pXG4gICAgciA9IGUgJSBXZSwgbiA9IHduLmNoYXJBdChyKSArIG4sIGUgPSAoZSAtIHIpIC8gV2U7XG4gIHJldHVybiBuO1xufVxuZnVuY3Rpb24gZ3MoKSB7XG4gIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgPCBcInVcIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7XG59XG5mdW5jdGlvbiB3cyhlLCB0KSB7XG4gIGNvbnN0IHIgPSBtcygpLCBuID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuIGhzKG4sIHZuKSArIGZzKHBzLCByKTtcbn1cbmNvbnN0IGJuID0gXCJvcF9hbmFseXRpY3NfZGV2aWNlX3Rva2VuXCIsIEVuID0gKCkgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChyKSA9PiByLmluY2x1ZGVzKGJuKSk7XG4gIGlmIChlKVxuICAgIHJldHVybiBlLnNwbGl0KFwiPVwiKVsxXTtcbiAgY29uc3QgdCA9IHdzKCk7XG4gIHJldHVybiB2cyh0KSwgdDtcbn0sIHZzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICB0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSArIDEpLCBkb2N1bWVudC5jb29raWUgPSBgJHtibn09JHtlfTsgcGF0aD0vOyBleHBpcmVzPSR7dC50b1VUQ1N0cmluZygpfWA7XG59LCBicyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFtyLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvID0gT3IucGFyc2Uocik7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gdFtvXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHRbb10gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHQ7XG59LCBZID0gKGUsIHQpID0+IEFycmF5LmZyb20oZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgobywgYSkgPT4ge1xuICBjb25zdCBzID0gYS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIGlmICghcykgcmV0dXJuIG87XG4gIGNvbnN0IGMgPSBhLnR5cGUgPT09IFwiY2hlY2tib3hcIiA/IGEuY2hlY2tlZCA6IGEudmFsdWU7XG4gIHJldHVybiB7IC4uLm8sIFtzXTogYyB9O1xufSwge30pLCBFcyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFNvLnBhcnNlKGUpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZSwgdCksIHQ7XG4gIH1cbn0sIFBzID0gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDUwMHB4O1xuICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6IDUwMHB4O1xuICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmAsIFBuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdC5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtQc31cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gci5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZCh0LmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IG8gPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBhID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLCB7IGhvc3Q6IHIsIGlmcmFtZTogbywgY2FuY2VsQnV0dG9uOiBhIH07XG59O1xuZnVuY3Rpb24gU3MoZSwgdCwgcikge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhID0gYXdhaXQgY3MoZSwgcik7XG4gICAgICBhICYmIChjbGVhckludGVydmFsKG8pLCB0KGEpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgbyA9IHNldEludGVydmFsKG4sIGZuKTtcbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiBDcyh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEQuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gYXQoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciB9ID0gZSwgbiA9IFBuKHQpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKG8pID0+IHtcbiAgICBjb25zdCBhID0gKGwpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBvKGwpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIHMgPSBTcyhuLmlmcmFtZSwgYSwgbmV3IFVSTChyKS5vcmlnaW4pLCBjID0gQ3Moe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IHMsXG4gICAgICByZXNvbHZlOiBvXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgU24gPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB0ID0gYXdhaXQgYXQoZSk7XG4gIGlmICh0LnN0YXR1cyA9PT0gRC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmICh0LnN0YXR1cyA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gdC5zdGF0dXMgIT09IEQuU1VDQ0VTUyAmJiBidCh0LnN0YXR1cyksIHtcbiAgICBocmVmOiB0LmhyZWZcbiAgfTtcbn0sIGtzID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHdpbmRvdy5vcGVuKHQsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiByO1xufSwgQ24gPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBvIH0gPSBBKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGEsIHMpID0+IHtcbiAgICBjb25zdCBjID0ga3MoZSwgbiksIGwgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1ID0gYXdhaXQgYXModCwgcik7XG4gICAgICAgIGlmICh1LnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChsKSwgYy5jbG9zZSgpLCBhKHsgaHJlZjogdS5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgbyhYKHUpKSwgY2xlYXJJbnRlcnZhbChsKSwgcyhYKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IEFzLCBlcnJfXzogUXQgfSA9IEEoXCJhaXJ3YWxsZXgtY2NcIiksIElzID0gei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSksIFRzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IElzLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgUXQobiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwga24gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgUnMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInBheW1lbnRfaW50ZW50X2lkXCIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGludGVudCBJRCBmb3VuZCBpbiBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIEFzKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBRdChyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke1godCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgQW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gVHModCksIG4gPSBhd2FpdCBTbih7IHVybDogcltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pLCBvID0gUnMobi5ocmVmID8/IFwiXCIpLCBhID0gcltcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGEgIT09IG8pIHtcbiAgICBjb25zdCBjID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBsID0gYEludGVudCBJRCBmcm9tIGNhbGxiYWNrICgke299KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7YX0pLmA7XG4gICAgdGhyb3cgUXQobCksIG5ldyBFcnJvcihjKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICBpbml0aWFsX2ludGVudF9pZDogbyxcbiAgICAgIGNvbnNlbnRfaWQ6IHJbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbn0sIEluID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBUbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIE8gPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5PLkVudW0uc3RyaXBlO1xuY29uc3QgUm4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgYSkgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gITA7XG4gICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHIoKSA/IG8oKSA6IGMgPyBzID0gYyA6IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIG8oKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBhKFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufSwgWHQgPSAoKSA9PiBSbih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4gISF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uXG59KSwgZXIgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gdC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0LCBuID0gdC5iaWxsaW5nQ29udGFjdCwgbyA9IHQuc2hpcHBpbmdDb250YWN0LCBhID0geyAuLi5lIH07XG4gIGlmIChyIHx8IG4gfHwgbykge1xuICAgIGFbZC5FTUFJTF0gPSBhW2QuRU1BSUxdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmVtYWlsQWRkcmVzcykgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZW1haWxBZGRyZXNzKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIGFbZC5DT1VOVFJZXSA9IGFbZC5DT1VOVFJZXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5jb3VudHJ5Q29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uY291bnRyeUNvZGUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIGFbZC5aSVBfQ09ERV0gPSBhW2QuWklQX0NPREVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLnBvc3RhbENvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLnBvc3RhbENvZGUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBzID0gYVtkLkZJUlNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmdpdmVuTmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZ2l2ZW5OYW1lKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5naXZlbk5hbWUpIHx8IFwiXCIsIGMgPSBhW2QuTEFTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5mYW1pbHlOYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5mYW1pbHlOYW1lKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5mYW1pbHlOYW1lKSB8fCBcIlwiO1xuICAgIHMgfHwgYyA/IChhW2QuRklSU1RfTkFNRV0gPSBzLCBhW2QuTEFTVF9OQU1FXSA9IGMpIDogKGFbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgYVtkLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gYTtcbn07XG56Lm9iamVjdCh7XG4gIGRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gICAgZXJyb3JzOiB6LmFycmF5KHouYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6LnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6LmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3QgTnMgPSAoe1xuICB0b3RhbDogZSxcbiAgcHJlZmlsbDogdFxufSkgPT4ge1xuICB2YXIgbjtcbiAgaWYgKHQubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGJpbGxpbmcgcG9ydGFsIHVybFxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vcGFzc2tpdC9wa3JlY3VycmluZ3BheW1lbnRyZXF1ZXN0L21hbmFnZW1lbnR1cmwjRGlzY3Vzc2lvblxuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB1c2VkIHdoZW4gdXNlciByZW1vdmUgYSBjYXJkIGZyb20gdGhlaXIgQXBwbGVQYXkgd2FsbGV0LlxuICAgICAgLy8gQ3VycmVudHkgc2V0IHRvIGNoZWNrb3V0IHNlc3Npb24gdXJsIHRvIHNhdGlzZnkgQXBwbGVQYXkgdHlwZXNcbiAgICAgIG1hbmFnZW1lbnRVUkw6IG5ldyBVUkwoYC9wYXkvJHt0LnRva2VufWAsIGduKS50b1N0cmluZygpXG4gICAgfTtcbiAgY29uc3QgciA9IChuID0gdC5saW5lX2l0ZW1zKSA9PSBudWxsID8gdm9pZCAwIDogblswXTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZGVzY3JpcHRpb24pID8/IFwiXCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZGVzY3JpcHRpb24pID8/IFwiXCIsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWxfY291bnQpID8/IHZvaWQgMCxcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke3QudG9rZW59YFxuICAgIH07XG59LCBGcyA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG4gPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgdmFyIGMsIGw7XG4gIGNvbnN0IG8gPSAoKChjID0gZSA9PSBudWxsID8gdm9pZCAwIDogZS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBjLmN1cnJlbmN5KSA/PyAociA9PSBudWxsID8gdm9pZCAwIDogci5jdXJyZW5jeSkgPz8gdC5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcyA9ICgoKChsID0gZSA9PSBudWxsID8gdm9pZCAwIDogZS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudEF0b20pID8/ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudEF0b20pID8/IDApIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZTogbyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmxhYmVsKSA/PyBuID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IGUgIT0gbnVsbCAmJiBlLnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudDogc1xuICAgIH1cbiAgfTtcbn0sIHRyID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogblxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbmN5Q29kZTogbywgdG90YWw6IGEgfSA9IEZzKHtcbiAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICAgIGluaXRpYWxQcmV2aWV3OiB0LFxuICAgIHByZWZpbGw6IHIsXG4gICAgZGVmYXVsdExhYmVsOiBuXG4gIH0pO1xuICBsZXQgcyA9IHtcbiAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgIGN1cnJlbmN5Q29kZTogbyxcbiAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXG4gICAgICBcImVtYWlsXCIsXG4gICAgICAuLi5yLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzID8gW1wicG9zdGFsQWRkcmVzc1wiXSA6IFtdXG4gICAgXSxcbiAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgXSxcbiAgICB0b3RhbDogYSxcbiAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogTnMoe1xuICAgICAgdG90YWw6IGEsXG4gICAgICBwcmVmaWxsOiByXG4gICAgfSlcbiAgfTtcbiAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgJiYgKHR5cGVvZiBlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8gcyA9IHtcbiAgICAuLi5zLFxuICAgIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdChzKVxuICB9IDogcyA9IHsgLi4ucywgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0IH0pLCBzO1xufSwgTXMgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGVtYWlsOiBgeHhfJHtlfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2V9YCxcbiAgICBjb3VudHJ5OiBcIlVTXCJcbiAgfTtcbn0sIG9lID0gKGUpID0+ICh7XG4gIGxpbmUxOiBlW2QuTElORTFdLFxuICBsaW5lMjogZVtkLkxJTkUyXSxcbiAgbGluZTM6IGVbZC5MSU5FM10sXG4gIGNpdHk6IGVbZC5DSVRZXSxcbiAgc3RhdGU6IGVbZC5TVEFURV0sXG4gIGNvdW50cnk6IGVbZC5DT1VOVFJZXSxcbiAgemlwX2NvZGU6IGVbZC5aSVBfQ09ERV1cbn0pLCBhZSA9IChlLCB0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKVxuICAgIHJldHVybiB7XG4gICAgICBsaW5lMTogZVtkLlNISVBQSU5HX0xJTkUxXSxcbiAgICAgIGxpbmUyOiBlW2QuU0hJUFBJTkdfTElORTJdLFxuICAgICAgbGluZTM6IGVbZC5TSElQUElOR19MSU5FM10sXG4gICAgICBjaXR5OiBlW2QuU0hJUFBJTkdfQ0lUWV0sXG4gICAgICBzdGF0ZTogZVtkLlNISVBQSU5HX1NUQVRFXSxcbiAgICAgIGNvdW50cnk6IGVbZC5TSElQUElOR19DT1VOVFJZXSxcbiAgICAgIHppcF9jb2RlOiBlW2QuU0hJUFBJTkdfWklQX0NPREVdXG4gICAgfTtcbn0sIHsgbG9nX186IEVsLCBlcnJfXzogTm4gfSA9IEEoXCJjb21tb25cIiksIGl0ID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgRyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IHQuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgTm4oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gdC5wYXJzZShyKTtcbn0sIHJyID0gKGUsIHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZS5sYXN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGUuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UoZSksXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShlLCB0KVxufSksIEFlID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogdCB9ID0gQShlLmxvZ1ByZWZpeCksIHIgPSBhd2FpdCBOKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSBpdChlLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAoci5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHQoXCJTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uXCIpLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhd2FpdCBvcyhlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBtX2lkOiBuLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSkgfTtcbiAge1xuICAgIGlmIChlLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgaWYgKHQoXCJVc2luZyBwYXktZmlyc3QgZmxvdy4uLlwiKSwgIWUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgTm4oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBlLmNvbmZpcm1SZXN1bHQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIHQoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcGF5bWVudF9pbnB1dDogeyBwcm92aWRlcl90eXBlOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGUucmVxdWlyZWRGb3JtRmllbGRzW2QuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfYWRkcmVzczogb2UoZS5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoZS5yZXF1aXJlZEZvcm1GaWVsZHMsIHIuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZS5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXdChlLmFueUNkZUNvbm5lY3Rpb24sIG8pIH07XG4gIH1cbn0sIExzID0gei5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgRHMgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IGplLCBlcnJfXzogbnQgfSA9IEEoXCJhZHllbi1jY1wiKSwgT3MgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBMcyxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSksIEZuID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBVcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBPcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG50KGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoRm4pO1xuICByZXR1cm4gdC5kYXRhO1xufSwganMgPSAoZSkgPT4gSlNPTi5wYXJzZShlKSwgYnIgPSAoKSA9PiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvdy5BZHllbldlYiwgeHMgPSBhc3luYyAoKSA9PiB7XG4gIGplKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBicigpIHx8IGF3YWl0IFN0KDUwMCk7XG4gIGlmICghYnIoKSlcbiAgICB0aHJvdyBudChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBuZXcgRXJyb3IoRm4pO1xuICByZXR1cm4gamUoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKSwgd2luZG93LkFkeWVuV2ViLkFkeWVuQ2hlY2tvdXQ7XG59LCAkcyA9IChlKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVyczogdCwgbG9jYWxlOiByLCBjb3VudHJ5Q29kZTogbiwgY29tcG9uZW50OiBvLCBob3N0OiBhLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGMgPSBqcyh0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgcmV0dXJuIGplKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHtjLnR5cGV9YCksIG5ldyBQcm9taXNlKChsKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIGplKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pLCBhLnJlbW92ZSgpO1xuICAgIH0sIHAgPSAoZikgPT4ge1xuICAgICAgbnQoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgZiksIGwoeyBzdGF0dXM6IEQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCB5ID0gKGYpID0+IHtcbiAgICAgIG50KFwiQWR5ZW4gZXJyb3I6XCIsIGYpLCBsKHsgc3RhdHVzOiBELkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGwoeyBzdGF0dXM6IEQuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgXyk7XG4gICAgY29uc3QgbSA9IChmLCBoLCB2KSA9PiB7XG4gICAgICBhLnJlbW92ZSgpLCBsKHsgc3RhdHVzOiBELlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiBmLCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgeHMoKS50aGVuKFxuICAgICAgKGYpID0+IGYoe1xuICAgICAgICBjbGllbnRLZXk6IHRbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogdFtcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGU6IHIsXG4gICAgICAgIGNvdW50cnlDb2RlOiBuLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzOiBtLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQ6IHAsXG4gICAgICAgIG9uRXJyb3I6IHlcbiAgICAgIH0pXG4gICAgKS50aGVuKChmKSA9PiB7XG4gICAgICBmLmNyZWF0ZUZyb21BY3Rpb24oYywgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQobyk7XG4gICAgfSk7XG4gIH0pO1xufSwgR3MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2UsIHIgPSBlID8/IHQsIG4gPSBEcy5zYWZlUGFyc2Uocik7XG4gIHJldHVybiBuLnN1Y2Nlc3MgPyAoamUoYFJlc29sdmVkIGxvY2FsZTogJHtuLmRhdGF9YCksIG4uZGF0YSkgOiAobnQoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke3J9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApLCBcImVuLVVTXCIpO1xufSwgTW4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1hZHllbi1hY3Rpb25cIl0pICE9PSB2b2lkIDAsIExuID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFVzKHQpLCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgby5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdDogYSwgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGMgfSA9IFBuKFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBzLnJlcGxhY2VXaXRoKG8pO1xuICBjb25zdCBsID0gYXdhaXQgJHMoe1xuICAgIGhlYWRlcnM6IG4sXG4gICAgbG9jYWxlOiBHcyhyKSxcbiAgICBjb3VudHJ5Q29kZTogZSxcbiAgICBjb21wb25lbnQ6IG8sXG4gICAgaG9zdDogYSxcbiAgICBjYW5jZWxCdXR0b246IGNcbiAgfSk7XG4gIGlmIChsLmNsZWFudXAoKSwgbC5zdGF0dXMgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGwuc3RhdHVzID09PSBELlNVQ0NFU1MpIHtcbiAgICBpZiAoIWwuYWRkaXRpb25hbERldGFpbHMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgcmV0dXJuIGplKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIiksIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogbC5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlXG4gICAgYnQobC5zdGF0dXMpO1xufSwgRG4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpXG4gIH0pXG59KSwgT24gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IFZzLCBlcnJfXzogcXMgfSA9IEEoXCJjb21tb24tY2NcIiksIHpzID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZTogZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzczogdCxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3M6IHIsXG4gIHBheW1lbnRfbWV0aG9kOiBuXG59KSA9PiB7XG4gIGNvbnN0IG8gPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKG9bZC5GSVJTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSksIG9bZC5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSksIGUgJiYgKG9bZC5aSVBfQ09ERV0gPSBDKSwgdCAmJiAob1tkLkxJTkUxXSA9IEMsIG9bZC5DSVRZXSA9IEMsIG9bZC5TVEFURV0gPSBDLCBvW2QuQ09VTlRSWV0gPSBDLCBvW2QuWklQX0NPREVdID0gQyksIHIgJiYgKG9bZC5TSElQUElOR19MSU5FMV0gPSBDLCBvW2QuU0hJUFBJTkdfQ0lUWV0gPSBDLCBvW2QuU0hJUFBJTkdfU1RBVEVdID0gQywgb1tkLlNISVBQSU5HX0NPVU5UUlldID0gQywgb1tkLlNISVBQSU5HX1pJUF9DT0RFXSA9IEMpLCBPYmplY3Qua2V5cyhvKS5sZW5ndGggPT09IDAgPyBEZSA6IERlLmV4dGVuZChvKTtcbn0sIEhzID0gKGUsIHQsIHIgPSB7fSkgPT4ge1xuICBpZiAocikge1xuICAgIFZzKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICBjb25zdCBhID0gT2JqZWN0LmtleXMocik7XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBhLmxlbmd0aDsgcysrKSB7XG4gICAgICBjb25zdCBjID0gYVtzXSwgbCA9IHJbY107XG4gICAgICBlW2NdIHx8IChlW2NdID0gbCk7XG4gICAgfVxuICB9XG4gIGVbZC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFlW2QuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSwgZVtkLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gJiYgKGVbZC5TSElQUElOR19MSU5FMV0gPSBlW2QuTElORTFdLCBlW2QuU0hJUFBJTkdfTElORTJdID0gZVtkLkxJTkUyXSwgZVtkLlNISVBQSU5HX0xJTkUzXSA9IGVbZC5MSU5FM10sIGVbZC5TSElQUElOR19DSVRZXSA9IGVbZC5DSVRZXSwgZVtkLlNISVBQSU5HX1NUQVRFXSA9IGVbZC5TVEFURV0sIGVbZC5TSElQUElOR19DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSwgZVtkLlNISVBQSU5HX1pJUF9DT0RFXSA9IGVbZC5aSVBfQ09ERV0pO1xuICBjb25zdCBvID0genMocikuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW8uc3VjY2Vzcykge1xuICAgIGNvbnN0IGEgPSBvLmVycm9yLmZvcm1hdCgpLCBzID0gYnMoYSksIGMgPSBPYmplY3Qua2V5cyhzKTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IGMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGNvbnN0IHUgPSBjW2xdLCBwID0gc1t1XTtcbiAgICAgIHQodSwgcCwgdSk7XG4gICAgfVxuICAgIHRocm93IHFzKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkFsbW9zdCB0aGVyZSEgSnVzdCBhIGZldyB0aGluZ3MgaGlnaGxpZ2h0ZWQgYWJvdmUgdG8gZml4IGJlZm9yZSB5b3UgY2FuIHN1Ym1pdC5cIik7XG4gIH1cbiAgcmV0dXJuIG8uZGF0YTtcbn0sIHsgbG9nX186IEJzLCBlcnJfXzogWXMgfSA9IEEoXCJjb21tb24tY2NcIiksIEsgPSBIcywgVW4gPSAoZSwgdCkgPT4ge1xuICBmb3IgKGNvbnN0IHIgb2YgZSlcbiAgICBpZiAoci5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IHIuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IHhyLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFvLnN1Y2Nlc3MpXG4gICAgICAgICAgWXMoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhID0gby5kYXRhO1xuICAgICAgICAgIHQoYSwgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgQnMoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHIuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgbG9nX186IEpzIH0gPSBBKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIFpzKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IEN0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBLcyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSBlLnBheW1lbnQsIGEgPSBlcih0Lm5vbkNkZUZvcm1JbnB1dHMsIG8pLCBzID0gSyhcbiAgICAgIGEsXG4gICAgICB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCB3ZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbZC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKFxuICAgICAgICBzLFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIClcbiAgICB9KTtcbiAgICBjb25zdCBjID0gYXdhaXQgVih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IFFuKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KG8udG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoSnMoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjKSwgISgobiA9IChyID0gYy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHUpLCBBZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICBjb25maXJtUmVzdWx0OiBjLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChvKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGEpLCBvO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBCZSwgZXJyX186IGpuIH0gPSBBKFwiYWR5ZW4tYXBwbGUtcGF5XCIpLCBXcyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBEbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKEJlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBYdCgpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEJlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoQmUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEJlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIHAgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgam4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBRcyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IGEgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRG4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihsKSwgcCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gdHIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGEubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogRXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgdikgPT4ge1xuICAgICAgY29uc3QgRSA9ICgpID0+IHtcbiAgICAgICAgQmUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKFApID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBacyhQLCBtKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIHYoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFAgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ueS50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKFApO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKFApID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgUyA9IGF3YWl0IEtzKFAsIG0pO1xuICAgICAgICAgIGgoUyk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICB2KFMpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9uY2FuY2VsID0gRSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBqbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIEdlID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHQsXG4gIG1lcmNoYW50TmFtZTogcixcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IG8sXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEsXG4gIHByZWZpbGw6IHNcbn0pID0+IHtcbiAgdmFyIHksIF87XG4gIGNvbnN0IGMgPSAoKHkgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuYW1vdW50QXRvbSkgPz8gKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgoXyA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5jdXJyZW5jeSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY3VycmVuY3kpID8/IG8uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHAgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIHNoaXBwaW5nQWRkcmVzc1JlcXVpcmVkOiBzLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGEgIT0gbnVsbCAmJiBhLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gYSAhPSBudWxsICYmIGEuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2YgYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLnAsIC4uLmEuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QocCkgfSA6IHsgLi4ucCwgLi4uYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogcDtcbn0sIG5yID0gKCkgPT4gUm4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgdDtcbiAgICByZXR1cm4gISEoKHQgPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIHQuYXBpKTtcbiAgfVxufSk7XG5sZXQgRnQgPSBudWxsO1xuY29uc3Qgb3IgPSBhc3luYyAoZSkgPT4gYXdhaXQgb24oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgVmUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgb3IoZSk7XG4gIHJldHVybiBGdCA9PT0gbnVsbCAmJiAoRnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBGdDtcbn0sIHhuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/ICRyLnBhcnNlKHQpIDogbnVsbDtcbn0sIGFyID0gKGUsIHQpID0+IHtcbiAgdmFyIGEsIHMsIGMsIGw7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgbiA9IChzID0gKGEgPSB0LnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogYS5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcywgbyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5wXSA9ICgobCA9IChjID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYy50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBsLnNwbGl0KC9cXHMrLykpID8/IFtdLCB5ID0gcC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgcltkLkVNQUlMXSA9IHJbZC5FTUFJTF0gfHwgdC5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbZC5MSU5FMV0gPSByW2QuTElORTFdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgcltkLkxJTkUyXSA9IHJbZC5MSU5FMl0gfHwgbi5hZGRyZXNzMiB8fCBcIlwiLCByW2QuTElORTNdID0gcltkLkxJTkUzXSB8fCBuLmFkZHJlc3MzIHx8IFwiXCIsIHJbZC5DSVRZXSA9IHJbZC5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIHJbZC5TVEFURV0gPSByW2QuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIHJbZC5DT1VOVFJZXSA9IHJbZC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgcltkLlpJUF9DT0RFXSA9IHJbZC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBfID0gcltkLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJcIiwgbSA9IHJbZC5MQVNUX05BTUVdIHx8IHkgfHwgXCJcIjtcbiAgICBfIHx8IG0gPyAocltkLkZJUlNUX05BTUVdID0gXywgcltkLkxBU1RfTkFNRV0gPSBtKSA6IChyW2QuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbZC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIG8gJiYgKHJbZC5TSElQUElOR19MSU5FMV0gPSByW2QuU0hJUFBJTkdfTElORTFdIHx8IG8uYWRkcmVzczEgfHwgXCJcIiwgcltkLlNISVBQSU5HX0xJTkUyXSA9IHJbZC5TSElQUElOR19MSU5FMl0gfHwgby5hZGRyZXNzMiB8fCBcIlwiLCByW2QuU0hJUFBJTkdfTElORTNdID0gcltkLlNISVBQSU5HX0xJTkUzXSB8fCBvLmFkZHJlc3MzIHx8IFwiXCIsIHJbZC5TSElQUElOR19DSVRZXSA9IHJbZC5TSElQUElOR19DSVRZXSB8fCBvLmxvY2FsaXR5IHx8IFwiXCIsIHJbZC5TSElQUElOR19aSVBfQ09ERV0gPSByW2QuU0hJUFBJTkdfWklQX0NPREVdIHx8IG8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHJbZC5TSElQUElOR19TVEFURV0gPSByW2QuU0hJUFBJTkdfU1RBVEVdIHx8IG8uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIHJbZC5TSElQUElOR19DT1VOVFJZXSA9IHJbZC5TSElQUElOR19DT1VOVFJZXSB8fCBvLmNvdW50cnlDb2RlIHx8IFwiVVNcIiksIHI7XG59LCB7IGxvZ19fOiBuZSwgZXJyX186IFJlIH0gPSBBKFwiYWR5ZW4tZ29vZ2xlLXBheVwiKSwgWHMgPSB5ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIHksIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgT24pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIG5lKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIFJlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAobmUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBucigpLCAhKChfID0gKHkgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogeS5wYXltZW50cykgIT0gbnVsbCAmJiBfLmFwaSkpXG4gICAgICByZXR1cm4gUmUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCByO1xuICAgIGlmIChhd2FpdCBvcihlLmJhc2VVcmwpID09PSBcIlBST0RVQ1RJT05cIiAmJiAhby5nb29nbGVfcGF5X21lcmNoYW50X2lkKVxuICAgICAgcmV0dXJuIFJlKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKSwgcjtcbiAgICBuZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTihzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbSA9IEdlKHtcbiAgICAgICAgcHJlZmlsbDogYyxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG8ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogby5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBmID0gYXdhaXQgVmUoZS5iYXNlVXJsLCBtKSwgeyByZXN1bHQ6IGggfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KG0pO1xuICAgICAgaWYgKCFoKVxuICAgICAgICByZXR1cm4gbmUoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgcjtcbiAgICB9IGNhdGNoIChtKSB7XG4gICAgICByZXR1cm4gUmUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBtKSwgcjtcbiAgICB9XG4gICAgY29uc3QgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgUmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBwXG4gICAgfTtcbiAgfVxuKSwgZWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgbSwgZiwgaCwgdiwgRSwgUCwgUywgVCwgTDtcbiAgICBuZShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIE9uKSwgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gbywgbCA9IGEubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgTih1KSwgeSA9IEdlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGEucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBFdChwLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IFZlKGUuYmFzZVVybCwgeSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGsgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YSh5KTtcbiAgICAgIG5lKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgayk7XG4gICAgICBjb25zdCBGID0gYXIociwgayksIEogPSBLKFxuICAgICAgICBGLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAoZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkpcbiAgICAgIH0pLCAhKChmID0gKG0gPSBrLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3Qgc2UgPSBhd2FpdCB3ZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEpbZC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBKW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEpbZC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UoSiksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShKLCBwLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSksIGJlID0geG4oc2UpO1xuICAgICAgbmUoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBiZSk7XG4gICAgICBsZXQgeiA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBRbigpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogKHYgPSAoaCA9IGsucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBoLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB2LnRva2VuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG5lKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeik7XG4gICAgICBsZXQgX2UgPSAoUCA9IChFID0gei5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBFWzBdKSA9PSBudWxsID8gdm9pZCAwIDogUC5pZDtcbiAgICAgIGNvbnN0IFRlID0gKFMgPSB6LnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IFMuZmluZCgocWUpID0+IHFlLnR5cGUgPT09IFwiYWR5ZW4tM2RzXCIpO1xuICAgICAgaWYgKFRlICYmIFRlLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBuZShcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIFRlKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IHFlIH0gPSBhd2FpdCBhdCh7XG4gICAgICAgICAgdXJsOiBUZS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobmUoYOKVsCBBZHllbiAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3FlfV1gKSwgcWUgPT09IEQuQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAocWUgPT09IEQuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChUZSAmJiAhX2UgJiYgKHogPSBhd2FpdCBWKHUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogVGUudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXJcbiAgICAgICAgfVxuICAgICAgfSksIG5lKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2UgYWZ0ZXIgM0RTXCIsIHopLCBfZSA9IChMID0gKFQgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IFRbMF0pID09IG51bGwgPyB2b2lkIDAgOiBMLmlkKSwgIV9lKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IG1ldGhvZCBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IEosXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHosXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgIHRocm93IFJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGspLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGtcbiAgICAgIH0pLCBuZXcgRXJyb3IoKGsgPT0gbnVsbCA/IHZvaWQgMCA6IGsubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgSWUgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgdCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbMF07XG4gIHJldHVybiB0ICYmICh0ID0gdC5zcGxpdChcIi1cIilbMF0pLCB0O1xufSwgeyBsb2dfXzogcHQgfSA9IEEoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gdGMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgQ3QodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIG8gPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghbylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24obyksIGcoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5vXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmMoZSwgdCkge1xuICBpZiAoIWUucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgcHQoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBlKTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IGF0KHtcbiAgICB1cmw6IGUucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHQuYmFzZVVybFxuICB9KTtcbiAgaWYgKHB0KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtyfV1gKSwgciA9PT0gRC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IGUudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHQoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgbjtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5jKGUsIHQpIHtcbiAgdmFyIHIsIG4sIG8sIGEsIHM7XG4gIHRyeSB7XG4gICAgY29uc3QgYyA9IGUucGF5bWVudCwgbCA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgYyksIHUgPSBLKFxuICAgICAgbCxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi51XG4gICAgfSk7XG4gICAgY29uc3QgXyA9IChhd2FpdCB3ZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB1W2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHVbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHVbZC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKHUpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBtID0gYXdhaXQgVih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBwdChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG0pO1xuICAgIGxldCBmID0gKG4gPSAociA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChvID0gbS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBvLmZpbmQoXG4gICAgICAoRSkgPT4gRS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAobSA9IGF3YWl0IHJjKGgsIHQpLCBmID0gKHMgPSAoYSA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogYVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAhZilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodiksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBtLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBZZSwgZXJyX186ICRuIH0gPSBBKFwiYXd4LWFwcGxlLXBheVwiKSwgb2MgPSB5ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEluKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoWWUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gWWUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChZZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gWWUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTihzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgJG4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBwXG4gICAgfTtcbiAgfVxuKSwgYWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgZjtcbiAgICBjb25zdCBhID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEluKSwgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLCBpbml0aWFsUHJldmlldzogYyB9ID0gbiwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE4obCksIHAgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgeSA9IHRyKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4udVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKGYgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIF8gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBtID0ge1xuICAgICAgc2Vzc2lvbjogXyxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBwLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogbyxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogbiA9PSBudWxsID8gdm9pZCAwIDogbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEV0KHUsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIGNvbnN0IEUgPSAoKSA9PiB7XG4gICAgICAgIFllKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBfLm9uY2FuY2VsID0gRSwgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRjKFAsIG0pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgdihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgUCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi55LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oUCk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgbmMoUCwgbSk7XG4gICAgICAgICAgaChTKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIHYoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgJG4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBRLCBlcnJfXzogTmUgfSA9IEEoXCJhd3gtZ29vZ2xlLXBheVwiKSwgaWMgPSB5ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIHksIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBRKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIE5lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoUShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKF8gPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBOZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IG9yKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIFEoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBHZSh7XG4gICAgICAgIHByZWZpbGw6IGMsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgZiA9IGF3YWl0IFZlKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCBmLmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIFEoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgcjtcbiAgICB9IGNhdGNoIChtKSB7XG4gICAgICByZXR1cm4gTmUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBtKSwgcjtcbiAgICB9XG4gICAgY29uc3QgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIE5lKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBzYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCB2LCBFLCBQLCBTO1xuICAgIFEoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBUbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IG8sIGwgPSBhLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcCA9IGF3YWl0IE4odSksIHkgPSBHZSh7XG4gICAgICBwcmVmaWxsOiBwLFxuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogYS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEV0KHAsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBfID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgVCA9IGF3YWl0IF8ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgUShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIFQpO1xuICAgICAgY29uc3QgTCA9IGFyKHIsIFQpLCBrID0gSyhcbiAgICAgICAgTCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgUShcIl9fX1wiLCBrKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLmtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRiA9IChmID0gKG0gPSBULnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBKID0gYXdhaXQgd2UodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBrW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZToga1tkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBrW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKGspLFxuICAgICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoaywgcC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgICB9KSwgdmUgPSB4bihKKTtcbiAgICAgIFEoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCB2ZSk7XG4gICAgICBsZXQgc2UgPSBhd2FpdCBWKHUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB2ZSA9PSBudWxsID8gdm9pZCAwIDogdmUuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogRlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBRKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc2UpO1xuICAgICAgbGV0IGJlID0gKHYgPSAoaCA9IHNlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkO1xuICAgICAgY29uc3QgeiA9IChFID0gc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogRS5maW5kKFxuICAgICAgICAoX2UpID0+IF9lLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKHogJiYgei5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgUShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHopO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogX2UgfSA9IGF3YWl0IGF0KHtcbiAgICAgICAgICB1cmw6IHoucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKFEoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke19lfV1gKSwgX2UgPT09IEQuQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoX2UgPT09IEQuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh6ICYmICFiZSAmJiAoc2UgPSBhd2FpdCBWKHUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogei50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogei5jb25zZW50X2lkXG4gICAgICAgIH1cbiAgICAgIH0pLCBRKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc2UpLCBiZSA9IChTID0gKFAgPSBzZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBQWzBdKSA9PSBudWxsID8gdm9pZCAwIDogUy5pZCksICFiZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gQWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogayxcbiAgICAgICAgY29uZmlybVJlc3VsdDogc2UsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKFQpIHtcbiAgICAgIHRocm93IE5lKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIFQpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IFRcbiAgICAgIH0pLCBuZXcgRXJyb3IoKFQgPT0gbnVsbCA/IHZvaWQgMCA6IFQubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgR24gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBWbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuYXN5bmMgZnVuY3Rpb24gY2MoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgQ3QodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBsYyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSBlLnBheW1lbnQsIGEgPSBlcih0Lm5vbkNkZUZvcm1JbnB1dHMsIG8pLCBzID0gSyhhLCB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnNcbiAgICB9KSwgYXdhaXQgd2UodC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogc1tkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBzW2QuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBzW2QuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEllKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoby50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IFYodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBwID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHApLCBBZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IF90LCBlcnJfXzogcW4gfSA9IEEoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCB1YyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEduKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoX3QoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gX3QoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIF90KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIHAgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHFuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBkYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG4sIGMgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR24pLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihsKSwgcCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gdHIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKGYgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBtID0ge1xuICAgICAgc2Vzc2lvbjogXyxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiB0Lm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBwLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogb1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBfLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBfdChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChFKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgY2MoRSwgbSk7XG4gICAgICAgIH0gY2F0Y2ggKFApIHtcbiAgICAgICAgICB2KFApO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBFID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB5LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEUpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgUCA9IGF3YWl0IGxjKEUsIG0pO1xuICAgICAgICAgIGgoUCk7XG4gICAgICAgIH0gY2F0Y2ggKFApIHtcbiAgICAgICAgICB2KFApO1xuICAgICAgICB9XG4gICAgICB9LCBfLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IHFuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogUGUsIGVycl9fOiBKZSB9ID0gQShcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBwYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgcCwgeTtcbiAgICBQZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVm4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIFBlKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIEplKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoUGUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBucigpLCAhKCh5ID0gKHAgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogcC5wYXltZW50cykgIT0gbnVsbCAmJiB5LmFwaSkpXG4gICAgICByZXR1cm4gSmUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCByO1xuICAgIFBlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBOKGEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBfID0gR2Uoe1xuICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIG0gPSBhd2FpdCBWZShlLmJhc2VVcmwsIF8pLCB7IHJlc3VsdDogZiB9ID0gYXdhaXQgbS5pc1JlYWR5VG9QYXkoXyk7XG4gICAgICBpZiAoIWYpXG4gICAgICAgIHJldHVybiBQZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBKZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIF8pLCByO1xuICAgIH1cbiAgICBjb25zdCBjID0gcy5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCBmZShhLCBzLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgSmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBtXG4gICAgICAgIH0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgX2MgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgbSwgZiwgaCwgdjtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBhLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzIH0gPSBvLCBsID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFZuKS5tZXRhZGF0YSwgdSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcCA9IGF3YWl0IE4odSksIHkgPSBHZSh7XG4gICAgICBwcmVmaWxsOiBwLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogci5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IFZlKGUuYmFzZVVybCwgeSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEUgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YSh5KTtcbiAgICAgIFBlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgRSk7XG4gICAgICBjb25zdCBQID0gYXIodCwgRSksIFMgPSBLKFAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5TXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IFQgPSAoZiA9IChtID0gRS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW47XG4gICAgICBpZiAoIVQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgTCA9IGF3YWl0IHdlKHUsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogU1tkLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IFNbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogU1tkLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShTKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKFMsIHAuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgICAgfSk7XG4gICAgICBQZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBMKTtcbiAgICAgIGNvbnN0IGsgPSBhd2FpdCBWKHUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoVClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKHYgPSAoaCA9IGsucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogayxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoRSkge1xuICAgICAgdGhyb3cgSmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgRSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogRVxuICAgICAgfSksIG5ldyBFcnJvcigoRSA9PSBudWxsID8gdm9pZCAwIDogRS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBtYywgZXJyX186IHpuIH0gPSBBKFwicG9ja3l0LWNjXCIpLCB5YyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pLCBmYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSB5Yy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHpuKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIEhuID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBtYyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgem4ociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtYKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIHh0ID0gKGUsIHQpID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldCh0KSwgaGMgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgZ2MgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZmModCksIG4gPSBhd2FpdCBTbih7IHVybDogcltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogSG4obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHJbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiByW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IEVyIH0gPSBBKFwic3RyaXBlLWNjXCIpLCB3YyA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pLCBCbiA9IGFzeW5jIChlKSA9PiB7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5lXG4gIH0pLCBFcihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtlLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgaGkoZSksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBFcihcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHZjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHdjLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9yLmVycm9ycyl9YCk7XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiB0LmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogdC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufSwgYmMgPSA0LCB7IGxvZ19fOiBrZSwgZXJyX186ICR0IH0gPSBBKFwidW5pZmllZC1jY1wiKSwgRWMgPSBhc3luYyAoe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogb1xufSkgPT4ge1xuICBrZShcIuKUnCBSdW5uaW5nIHVuaWZpZWQgQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oYSk7XG4gIGtlKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gIGNvbnN0IGMgPSBLKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgbCA9IHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IEVuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICEwLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkXG4gIH07XG4gICR0KG8sIGwpLCBrZShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB1ID0gYXdhaXQgeW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICBVbih1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IHAgPSBhd2FpdCBtbihhLCBsKTtcbiAgaWYgKGtlKFwi4pScIHN0YXJ0UGYgcmVzdWx0XCIsIHApLCBwLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgcmV0dXJuIFluKHMubW9kZSwgcCk7XG4gIGlmICghcC5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIHJldHVybiBQYyh7XG4gICAgY29udGV4dDogZSxcbiAgICBwcmVmaWxsOiBzLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGwsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICBzdGFydFBmUmVzdWx0OiBwLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBwLmNoZWNrb3V0X2F0dGVtcHRfaWRcbiAgfSk7XG59LCBQYyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0OiB0LFxuICAgIHByZWZpbGw6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbyxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHMsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IGNcbiAgfSA9IGU7XG4gIGxldCBsID0gcztcbiAgZm9yIChsZXQgdSA9IDA7IHUgPCBiYzsgdSsrKSB7XG4gICAga2UoYOKUnCBSdW5uaW5nIGNvbmZpcm0gbG9vcCBpdGVyYXRpb24gJHt1fWApO1xuICAgIGNvbnN0IHsgdXNlckFjdGlvbjogcCB9ID0ga2MobCksIHkgPSBhd2FpdCBTYyh0LmJhc2VVcmwsIHAsIHIsIG4pO1xuICAgIGlmIChvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgLi4uby5leHRyYV9tZXRhZGF0YSxcbiAgICAgIC4uLnkubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgIH0sIGtlKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKSwgbCA9IGF3YWl0IFYoYSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogby5leHRyYV9tZXRhZGF0YVxuICAgIH0pLCBrZShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke3V9KWAsIGwpLCBsLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICByZXR1cm4gWW4oci5tb2RlLCBsKTtcbiAgfVxuICB0aHJvdyBnKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IGxcbiAgfSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGVycm9yLCBwbGVhc2UgdHJ5IGFub3RoZXIgcGF5bWVudCBtZXRob2RcIik7XG59LCBTYyA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmICh0Ll91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpXG4gICAgICByZXR1cm4gYXdhaXQgQm4odmModCkpLCB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgaWYgKGtuKHQpKVxuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGF3YWl0IEFuKGUsIHQpIH0gfTtcbiAgICBpZiAoTW4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhd2FpdCBMbihcbiAgICAgICAgbltkLkNPVU5UUlldLFxuICAgICAgICB0LFxuICAgICAgICByLmxvY2FsZVxuICAgICAgKSB9IH07XG4gICAgaWYgKENjKHQpKVxuICAgICAgcmV0dXJuIGF3YWl0IFpuKHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdF0gfSwgZSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIH0gZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbn0sIENjID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSm4oW2VdKSwgITA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwga2MgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPiAxKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbXVsdGlwbGUgcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICBjb25zdCB0ID0gS28uc2FmZVBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgJHQoXCJVc2VyIGFjdGlvbiByYXcgcGF5bG9hZFwiLCBlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSksICR0KFwiUGFyc2luZyBlcnJvclwiLCB0LmVycm9yKSwgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICByZXR1cm4ge1xuICAgIHVzZXJBY3Rpb246IHQuZGF0YVxuICB9O1xufSwgWW4gPSAoZSwgdCkgPT4ge1xuICB2YXIgcjtcbiAgaWYgKGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IG4gPSB0LmNjX3BtX2lkID8/ICgociA9IHQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXS5pZCk7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBuXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbn0sIHsgbG9nX186IEksIGVycl9fOiBQciB9ID0gQShcImNvbW1vbi1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgQWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgbSwgZjtcbiAgICBJKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oYSk7XG4gICAgZyhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4udCxcbiAgICAgIHByZWZpbGw6IHNcbiAgICB9KTtcbiAgICBjb25zdCBjID0gKChtID0gcy5maW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3MpID09IG51bGwgPyB2b2lkIDAgOiBtLnVuaWZpZWRfY2MpID8/IDA7XG4gICAgSShg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKGMgKiAxMDApfSVgKTtcbiAgICBjb25zdCBsID0gTWF0aC5yYW5kb20oKSwgdSA9IGwgPCBjLCBwID0ge1xuICAgICAgcm9sbDogbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbzogYyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3c6IHVcbiAgICB9O1xuICAgIGlmICh1KVxuICAgICAgcmV0dXJuIEkoYOKUnCBQaWNrZWQgdW5pZmllZCBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIHApLCBFYyh7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIEkoYOKUnCBQaWNrZWQgbGVnYWN5IENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCBwKSwgSShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICAgIGNvbnN0IHkgPSBLKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgcy5jaGVja291dF9zZXR0aW5nc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi55XG4gICAgfSk7XG4gICAgY29uc3QgXyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IHksXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IG8ucGF5bWVudFJvdXRlSWQsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIEkoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBoID0gYXdhaXQgeW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoVW4oaCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBJKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgc3MoYSwgXyk7XG4gICAgICAgIHJldHVybiBJKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7di5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEkoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgd3IoYSwgXyk7XG4gICAgICAgIHJldHVybiBJKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgaWYgKGggaW5zdGFuY2VvZiBfbiAmJiBoLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIEkoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBJKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGgucmVzcG9uc2UuaGVhZGVycyksIGcoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgLi4uaC5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2ID0gaC5yZXNwb25zZS5oZWFkZXJzID8/IHt9O1xuICAgICAgICBcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCIgaW4gdiAmJiAoXy5leGlzdGluZ19jY19wbV9pZCA9IHZbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXSwgSShg4pScIEV4aXN0aW5nIENDIFBNIElEOiAke18uZXhpc3RpbmdfY2NfcG1faWR9YCkpO1xuICAgICAgICBjb25zdCBFID0gaGMoaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKEUpIHtcbiAgICAgICAgICBJKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEYgPSBhd2FpdCBnYyhlLmJhc2VVcmwsIGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBGO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrbihoLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgSShcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgQW4oZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTW4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIEkoXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEYgPSBhd2FpdCBMbihcbiAgICAgICAgICAgIHJbZC5DT1VOVFJZXSxcbiAgICAgICAgICAgIGgucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHMubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gRjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBUID0gYXdhaXQgbW4oYSwgXyk7XG4gICAgICAgIEkoXCLilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpcIiwgVCk7XG4gICAgICAgIGNvbnN0IEwgPSAoKGYgPSBoLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBmW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBFID8gSShcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogTCA/IChJKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgQm4oSWMoVCkpKSA6IChJKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgWm4oVCwgZS5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IGsgPSBULmNjX3BtX2lkO1xuICAgICAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBJKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2t9XWApO1xuICAgICAgICAgIGNvbnN0IEYgPSBhd2FpdCBWKGEsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBrXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgSShcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBGKTtcbiAgICAgICAgICBjb25zdCBKID0gaXQoRik7XG4gICAgICAgICAgcmV0dXJuIEkoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtKLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogSiB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEkoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7TCA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBGID0gYXdhaXQgd3IoYSwge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBrLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogTFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBJKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBGIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IFByKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBQcihoKSwgaDtcbiAgICB9XG4gIH1cbiksIEljID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiB1aS5wYXJzZSh0KTtcbn0sIFRjID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdLCBKbiA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLmZpbmQoKHIpID0+IFRjLmluY2x1ZGVzKHIudHlwZSkpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBUby5wYXJzZSh0KTtcbn0sIFpuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IEpuKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgaWYgKHIucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgSShcIuKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpLCBnKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBJKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7ci5yZWRpcmVjdF91cmx9XWApLCBnKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5yXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1czogbiB9ID0gYXdhaXQgYXQoeyB1cmw6IHIucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiB0IH0pO1xuICBpZiAoSShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bn1dYCksIG4gPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IGcoXCIzZHNfY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBnKFwiM2RzX2ZhaWx1cmVcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBnKFwiY29tbW9uXzNkc19jb21wbGV0ZWRcIik7XG59LCBSYyA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IEgsIGVycl9fOiBOYyB9ID0gQShcImxvb3AtY3J5cHRvXCIpLCBGYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBIKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFJjKTtcbiAgICBIKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEgoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBOKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgbyA9IGF3YWl0IEN0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgYSA9IGF3YWl0IGZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIW8gfHwgIW8ubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gby5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgcDtcbiAgICBuID8gKHAgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKHAgPSAoYSA/IGEuYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIHApLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IHkgPSBwLCBfID0gdjQoKSwgbSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IHksXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGwsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgZiA9IHtcbiAgICAgIGFwaUtleTogdC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogdC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiB0Lm1ldGFkYXRhLm1lcmNoYW50X2lkLFxuICAgICAgZW52aXJvbm1lbnQ6IHQubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICB3aWRnZXRQcm9wczogbSxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzOiBmXG4gICAgfTtcbiAgfVxuKSwgTWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICBIKFwiUnVubmluZyBMb29wIGZsb3cuLi5cIiksIEgoXCJjb250ZXh0XCIsIGUpLCBIKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIHQpLCBIKFwibm9uQ2RlRm9ybUlucHV0c1wiLCByKSwgSChcImZsb3dDYWxsYmFja3NcIiwgbiksIEgoXCJjdXN0b21QYXJhbXNcIiwgbyk7XG4gICAgY29uc3QgYSA9IGF3YWl0IE4oZS5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBIKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgcyA9IEsoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBhLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKSwgYyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGEubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gcnIocywgYS5jaGVja291dF9zZXR0aW5ncyksIHAgPSBhd2FpdCB3ZShlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIC4uLnUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGwsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGwgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGEubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBhLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEllKClcbiAgICB9KTtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBWKGMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgIC8vIFRPRE86IFdlIGRvbid0IGhhdmUgYSBwYXlpbiBvbiBzZXR1cFxuICAgICAgdGhlaXJfcG1faWQ6IG8uc3VjY2VzcyAmJiBvLm1vZGUgPT0gXCJjaGVja291dFwiID8gby5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCA6IHZvaWQgMCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbCA/IHAuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBvLnN1Y2Nlc3MgPyBvLmN1c3RvbWVyIDogdm9pZCAwLFxuICAgICAgICBsb29wX3BheWluOiBvLnN1Y2Nlc3MgJiYgby5tb2RlID09IFwiY2hlY2tvdXRcIiA/IG8ucGF5aW4gOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfZmFpbHVyZV9kZXRhaWxzOiBvLnN1Y2Nlc3MgPyB2b2lkIDAgOiBvLmZhaWx1cmVEZXRhaWxzLFxuICAgICAgICBsb29wX2RlYnVnX2luZm86IG8uc3VjY2VzcyA/IHZvaWQgMCA6IG8uZGVidWdJbmZvLFxuICAgICAgICBsb29wX3N1Y2Nlc3M6IG8uc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChIKGBDb25maXJtIHJlc3VsdDogJHt5fWApLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgSChcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIiksIEgoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgeSk7XG4gICAgICBjb25zdCBfID0gaXQoeSk7XG4gICAgICByZXR1cm4gSChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke18ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBfIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChIKFwiRG9pbmcgY2hlY2tvdXQuLi5cIiksICF5LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBOYyhcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIHkpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiB5LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogRWUsIGVycl9fOiBMYyB9ID0gQShcInBheXBhbFwiKSwgS24gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSksIERjID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgS24pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFIucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBPYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBFZShcIlJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5cIik7XG4gICAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihhKSwgeyBpc0Fub255bW91czogYywgdXNlUmVkaXJlY3RGbG93OiBsIH0gPSBvLnNldHRpbmdzID8/IHt9O1xuICAgICAgRWUoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgICAgY29uc3QgdSA9IEtuLnBhcnNlKHIpO1xuICAgICAgRWUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgICAgY29uc3QgcCA9IEsodCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsIHtcbiAgICAgICAgLi4uYyA/IE1zKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pLCB5ID0gcnIocCwgcy5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBFZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgICAgY29uc3QgXyA9IHY0KCksIG0gPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgZiA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHUsXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBtID8ge1xuICAgICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IGwsXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgICAgfSxcbiAgICAgICAgLi4ueVxuICAgICAgfSwgaCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgdiA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZikpLCBFID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgICByOiB2XG4gICAgICB9KSwgUCA9IGAke2h9PyR7RS50b1N0cmluZygpfWA7XG4gICAgICBpZiAobClcbiAgICAgICAgdGhyb3cgRWUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gUCwgYXdhaXQgU3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIGNvbnN0IFMgPSBhd2FpdCBDbihcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgYSxcbiAgICAgICAgXyxcbiAgICAgICAgUFxuICAgICAgKTtcbiAgICAgIEVlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIFMpO1xuICAgICAgY29uc3QgVCA9IHh0KFMuaHJlZiwgXCJjYXR0XCIpLCBMID0geHQoUy5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIiksIGsgPSBhd2FpdCBWKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBtID8gVCA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IG0gPyBMIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBFZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBrKSwgQWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGEsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBwLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IG1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIHRocm93IExjKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgYSksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogYSB9KSwgbmV3IEVycm9yKChhID09IG51bGwgPyB2b2lkIDAgOiBhLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGNlLCBlcnJfXzogU3IgfSA9IEEoXCJwb2NreXQtcGF5cGFsXCIpLCBXbiA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IFVjID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgV24pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9ja3l0IFBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgc3RhcnRGbG93OiAoKSA9PiBSLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkoZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KVxuICB9O1xufSwgamMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgaywgRjtcbiAgICBjZShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBOKGEpO1xuICAgIGNlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gV24ucGFyc2UodCk7XG4gICAgY2UoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnNldHRpbmdzLCB1ID0gSyhcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgcCA9IHJyKHUsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGNlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgY29uc3QgeSA9IHY0KCksIF8gPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgbSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogXyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogXyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoayA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgay51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogeVxuICAgICAgfSxcbiAgICAgIC4uLnBcbiAgICB9LCBmID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBoID0gYnRvYShKU09OLnN0cmluZ2lmeShtKSksIHYgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgcjogaFxuICAgIH0pLCBFID0gYCR7Zn0/JHt2LnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKEYgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnNldHRpbmdzKSAhPSBudWxsICYmIEYudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgY2UoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gRSwgYXdhaXQgU3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBjZShcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgY2UoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgUCA9IGF3YWl0IENuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGEsXG4gICAgICB5LFxuICAgICAgRVxuICAgICk7XG4gICAgY2UoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUCk7XG4gICAgY29uc3QgUyA9IEhuKFAuaHJlZiksIFQgPSB4dChQLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIVQpXG4gICAgICB0aHJvdyBTcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgUC5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIGNlKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke1N9YCk7XG4gICAgY29uc3QgTCA9IGF3YWl0IFYoYSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IFMsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBfID8gVCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChjZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBMKSwgcy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBMLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghTC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IFNyKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgTCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IEwucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBDciA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiB4LCBlcnJfXzogeGMgfSA9IEEoXCJzdHJpcGUtbGlua1wiKSwgJGMgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBHYyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBWYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0gZS5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgeChcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCAkYyk7XG4gICAgeChcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IE4obyksIHMgPSBhLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICB4KFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBmZShvLCBhLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IF9pKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgeChcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogciA9PSBudWxsID8gdm9pZCAwIDogci5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIHkgPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtDcn1gKTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gciAhPSBudWxsICYmIHIuZG9Ob3RNb3VudE9uSW5pdCA/IHgoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKHgoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIHkoKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKHgoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgciAhPSBudWxsICYmIHIub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCByLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIHgoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgeChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCBmID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGYuZXJyb3IgPyAoeGMoXCJlcnJvclwiLCBmLmVycm9yKSwgdC5nZXQub25DaGVja291dEVycm9yKGYuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKHgoXCJwYXltZW50TWV0aG9kXCIsIGYucGF5bWVudE1ldGhvZCksIFIuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBmLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiB5LFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogXyxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IEhjKENyKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHFjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgeChcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihhKTtcbiAgICB4KFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBjID0gemMociwgby5zdHJpcGVQTSksIGwgPSBLKGMsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmxcbiAgICB9KSwgeChcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgd2UoYSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IG8uc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGxbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbFtkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbFtkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UobCksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUobCwgcy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pO1xuICAgIHgoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdSk7XG4gICAgY29uc3QgeSA9IEdjLnBhcnNlKHUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICB4KFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBWKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogeVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaXQoXykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgeChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgXyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbFtkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbFtkLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGxbZC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBvZShsKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUobCwgcy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBsW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV3QoYSwgXykgfTtcbiAgICB9XG4gIH1cbiksIHpjID0gKGUsIHQpID0+IHtcbiAgdmFyIGwsIHUsIHAsIHksIF87XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLm9dID0gKCh1ID0gKGwgPSB0LmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBhID0gby5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbZC5FTUFJTF0gPSByW2QuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgocCA9IHQubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuZW1haWwpIHx8IHQuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltkLlpJUF9DT0RFXSA9IHJbZC5aSVBfQ09ERV0gfHwgKCh5ID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHkucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgcltkLkNPVU5UUlldID0gcltkLkNPVU5UUlldIHx8ICgoXyA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGMgPSByW2QuTEFTVF9OQU1FXSB8fCBhIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGMgPyAocltkLkZJUlNUX05BTUVdID0gcywgcltkLkxBU1RfTkFNRV0gPSBjKSA6IChyW2QuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbZC5MQVNUX05BTUVdID0gXCJcIiksIHgoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBIYyA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IEIsIGVycl9fOiBCYyB9ID0gQShcInN0cmlwZS1wclwiKSwgWWMgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBKYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBCKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBZYyk7XG4gICAgQihcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gZS5hbnlDZGVDb25uZWN0aW9uLCBvID0gYXdhaXQgTihuKSwgYSA9IG8ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEIoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IGZlKG4sIG8udG9rZW4sIGEsIHZvaWQgMCksIGMgPSBhd2FpdCBtaShcbiAgICAgIHIubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIGFcbiAgICApO1xuICAgIEIoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBjLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGwgPT09IG51bGwpXG4gICAgICByZXR1cm4gQmMoXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIEIoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgbCk7XG4gICAgY29uc3QgdSA9IChwLCB5KSA9PiBSLnN0cmlwZVBSLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHApLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogcCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogeSA9PSBudWxsID8gdm9pZCAwIDogeS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgIHByb2Nlc3NvcjogTy5FbnVtLnN0cmlwZSxcbiAgICAgICAgcHI6IGMsXG4gICAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBsLmFwcGxlUGF5LCBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5IH0sXG4gICAgICAgIHN0YXJ0RmxvdzogdVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYyxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogbC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIFpjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogbyxcbiAgICBpbml0UmVzdWx0OiBhXG4gIH0pID0+IHtcbiAgICBpZiAoQihcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIG8ucHJvdmlkZXIgIT09IHQucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke28ucHJvdmlkZXJ9LCBnb3QgJHt0LnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhLnByO1xuICAgIGlmIChvICE9IG51bGwgJiYgby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBmID0gby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQihcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgZik7XG4gICAgICBjb25zdCBoID0gdHlwZW9mIGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgV2MoYywgZi5hbW91bnQsIGYucGVuZGluZywgaCwgZi5sYWJlbCk7XG4gICAgfVxuICAgIEIoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IHlpKGMpO1xuICAgIEIoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCBCKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0gS2MociwgbCksIHAgPSBLKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnBcbiAgICB9KSwgQihcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIHApO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBucyhzLCB7XG4gICAgICBmaWVsZHM6IHAsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHRcbiAgICB9KSwgXyA9IFFjKHkpO1xuICAgIEIoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBmaShfLCBsKTtcbiAgICBjb25zdCBtID0gYXdhaXQgTihzKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEIoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBmID0gYXdhaXQgVihzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaXQoZikgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgQihcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBmID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHBbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBwW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IHBbZC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IG9lKHApLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShwLCBtLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IHBbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXdChzLCBmKSB9O1xuICAgIH1cbiAgfVxuKSwgS2MgPSAoZSwgdCkgPT4ge1xuICB2YXIgcCwgeSwgXywgbTtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4ub10gPSAoKHkgPSAocCA9IHQucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogcC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB5LnNwbGl0KC9cXHMrLykpID8/IFtdLCBhID0gby5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIHMgPSAobSA9IChfID0gdC5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogXy5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBtLmFkZHJlc3MsIGMgPSB0LnNoaXBwaW5nQWRkcmVzcztcbiAgcltkLkVNQUlMXSA9IHJbZC5FTUFJTF0gfHwgdC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltkLlpJUF9DT0RFXSA9IHJbZC5aSVBfQ09ERV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgcltkLkNPVU5UUlldID0gcltkLkNPVU5UUlldIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgbCA9IHJbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIHUgPSByW2QuTEFTVF9OQU1FXSB8fCBhIHx8IFwiXCI7XG4gIHJldHVybiBsIHx8IHUgPyAocltkLkZJUlNUX05BTUVdID0gbCwgcltkLkxBU1RfTkFNRV0gPSB1KSA6IChyW2QuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbZC5MQVNUX05BTUVdID0gXCJcIiksIEIoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBXYyA9IChlLCB0LCByLCBuLCBvKSA9PiB7XG4gIGUudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiB0LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogbyA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiByXG4gICAgfSxcbiAgICBjdXJyZW5jeTogdC5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgUWMgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gZGkucGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgRmUgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gZS5maWx0ZXIoKG8pID0+IHtcbiAgICBjb25zdCBhID0gciA9PT0gdm9pZCAwID8gITAgOiBvLnByb2Nlc3Nvcl9uYW1lID09PSByLCBzID0gby5wcm92aWRlciA9PT0gdDtcbiAgICByZXR1cm4gYSAmJiBzO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCk7XG4gIHJldHVybiBuLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCksIGcoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IHQsXG4gICAgcHJvY2Vzc29yOiByLFxuICAgIGNwbXM6IGVcbiAgfSkpLCBuWzBdO1xufSwgUiA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBBY1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBKYyxcbiAgICBydW46IFpjXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBWYyxcbiAgICBydW46IHFjXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBVYyxcbiAgICBydW46IGpjXG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBEYyxcbiAgICBydW46IE9jXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpYyxcbiAgICBydW46IHNjXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogb2MsXG4gICAgcnVuOiBhY1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBGYyxcbiAgICBydW46IE1jXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogdWMsXG4gICAgcnVuOiBkY1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBwYyxcbiAgICBydW46IF9jXG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogWHMsXG4gICAgcnVuOiBlY1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogV3MsXG4gICAgcnVuOiBRc1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogWGMsIGVycl9fOiBlbCB9ID0gQShcImluaXQtZmxvd3NcIiksIHRlID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBaZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBvID0gYXdhaXQgdChuKTtcbiAgICAgICAgWGMoYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgbyksIHIuc2V0KG8pO1xuICAgICAgfSBjYXRjaCAobykge1xuICAgICAgICBlbChg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBYKG8pLCBcIkRldGFpbHM6XCIsIG8pLCByLnRocm93KG8sIFgobykpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIHRsID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhlKS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkpKTtcbn0sIHJsID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IHRlKFwiU3RyaXBlIFBSXCIsIFIuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IHRlKFwiU3RyaXBlIExpbmtcIiwgUi5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogdGUoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIFIuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHRlKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIFIuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogdGUoXCJMb29wXCIsIFIubG9vcENyeXB0by5pbml0KSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDogdGUoXCJQYXlQYWxcIiwgUi5wYXlwYWwuaW5pdCksXG4gIC8vIFBvY2t5dCBQYXlQYWxcbiAgcG9ja3l0UGF5cGFsOiB0ZShcIlBvY2t5dCBQYXlQYWxcIiwgUi5wb2NreXRQYXlwYWwuaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogdGUoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBSLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogdGUoXCJBdXRobmV0IEFwcGxlUGF5XCIsIFIuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gIC8vIEFkeWVuIEdvb2dsZVBheVxuICBhZHllbkdvb2dsZVBheTogdGUoXCJBZHllbiBHb29nbGVQYXlcIiwgUi5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gQXBwbGVQYXlcbiAgYWR5ZW5BcHBsZVBheTogdGUoXCJBZHllbiBBcHBsZVBheVwiLCBSLmFkeWVuQXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBubCB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCByZSA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBrciA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogcmUsXG4gIG9uQmx1cjogcmUsXG4gIG9uQ2hhbmdlOiByZSxcbiAgb25Mb2FkOiByZSxcbiAgb25Mb2FkRXJyb3I6IHJlLFxuICBvblZhbGlkYXRpb25FcnJvcjogcmUsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiByZSxcbiAgb25DaGVja291dFN1Y2Nlc3M6IHJlLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHJlLFxuICBvbkNoZWNrb3V0RXJyb3I6IHJlLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcmVcbn0pLCBkZSA9IGNsYXNzIGRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAodCkgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gZGUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IG8gPSBhYShyLCBuID8/IGRlLk5PT1AsIG5sKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3JdID0gbztcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IGRlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5kZS5OT09QID0gKCkgPT4ge1xufSwgZGUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGtyLmtleW9mKCkuZW51bSkuZm9yRWFjaCgocikgPT4ge1xuICAgIHRbcl0gPSBkZS5OT09QO1xuICB9KSwgdDtcbn0sIGRlLmZyb21PYmplY3QgPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IGRlKCk7XG4gIHJldHVybiByLnNldENhbGxiYWNrcyhrci5wYXJzZSh0KSksIHI7XG59O1xubGV0IEd0ID0gZGU7XG5mdW5jdGlvbiBvbCgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gaigpLCB0ID0gZTtcbiAgICBpZiAodCAhPSBudWxsICYmIHQubmV4dCB8fCB0ICE9IG51bGwgJiYgdC5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgciA9IGU7XG4gICAgaWYgKHIgIT0gbnVsbCAmJiByLl9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgobykgPT4gby5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG8pID0+IG8uX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IG4gPSBlO1xuICAgIHJldHVybiBuICE9IG51bGwgJiYgbi5WdWUgfHwgbiAhPSBudWxsICYmIG4uX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBhbChlKSB7XG4gIHZhciB0LCByLCBuO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IGEgPSBqKCk7XG4gICAgICAgIHJldHVybiAoKHQgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiB0LnZlcnNpb24pIHx8ICgociA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgbyA9IChuID0gaigpKSA9PSBudWxsID8gdm9pZCAwIDogbi5kb2N1bWVudCwgYSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIGEgPyBhLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gaWwoKSB7XG4gIGNvbnN0IGUgPSBvbCgpLCB0ID0gYWwoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogdCB9O1xufVxuY29uc3QgUW4gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbCwgdCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGwsIHIgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGwsIG4gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6ICExLCBvID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGwsIGEgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IHMgPSBudWxsO1xuICB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciAmJiAocyA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2UpO1xuICBjb25zdCBjID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoOiByLFxuICAgIGphdmFfZW5hYmxlZDogbixcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6ICEwLFxuICAgIGxhbmd1YWdlOiBzLFxuICAgIHNjcmVlbl9oZWlnaHQ6IGUsXG4gICAgc2NyZWVuX3dpZHRoOiB0LFxuICAgIHRpbWVfem9uZV9vZmZzZXQ6IGMsXG4gICAgdXNlcl9hZ2VudDogbyxcbiAgICBhY2NlcHRfaGVhZGVyOiBhXG4gIH07XG59O1xudmFyIFUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5hcHBsZVBheSA9IFwiYXBwbGUtcGF5XCIsIGUuZ29vZ2xlUGF5ID0gXCJnb29nbGUtcGF5XCIsIGUubG9vcENyeXB0byA9IFwibG9vcC1jcnlwdG9cIiwgZS5wYXlwYWwgPSBcInBheXBhbFwiLCBlLmFpcndhbGxleEdvb2dsZVBheSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIiwgZS5haXJ3YWxsZXhBcHBsZVBheSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEdvb2dsZVBheSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRBcHBsZVBheSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiLCBlLmFkeWVuR29vZ2xlUGF5ID0gXCJhZHllbi1nb29nbGUtcGF5XCIsIGUuYWR5ZW5BcHBsZVBheSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCIsIGUpKShVIHx8IHt9KTtcbnoubmF0aXZlRW51bShVKTtcbmNvbnN0IHNsID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCB7IGxvZ19fOiBNdCwgZXJyX186IGNsIH0gPSBBKFwidHJhY2VyXCIpLCBsbCA9IChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgdWwoZSwgdCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjbChgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtyfWApO1xuICB9XG59O1xubGV0IEFyO1xuY29uc3QgdWwgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybjtcbiAgY29uc3QgciA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CZWxMb1A1MS0hfnswMDN9fi5qcycpLCB7IENvbnNvbGVTcGFuRXhwb3J0ZXI6IG4sIFNpbXBsZVNwYW5Qcm9jZXNzb3I6IG8sIFdlYlRyYWNlclByb3ZpZGVyOiBhIH0gPSByLCBzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LTVrSmJDSTBFLSF+ezAwNn1+LmpzJyksIHsgRmV0Y2hJbnN0cnVtZW50YXRpb246IGMgfSA9IHMsIGwgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQmV2WXBEdWYtIX57MDBifX4uanMnKSwgeyBab25lQ29udGV4dE1hbmFnZXI6IHUgfSA9IGwsIHAgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQk1PTmtjYlMtIX57MDBjfX4uanMnKSwgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM6IHkgfSA9IHAsIF8gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ2xZN0V1cFotIX57MDBlfX4uanMnKSwgeyBSZXNvdXJjZTogbSB9ID0gXywgZiA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLXRDRVFMYzRjLSF+ezAwaH1+LmpzJykudGhlbigoYmUpID0+IGJlLmQpLCB7IGRldGVjdFJlc291cmNlc1N5bmM6IGggfSA9IGYsIHYgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRDU0OUtWWVgtIX57MDBrfX4uanMnKSwgeyBPVExQVHJhY2VFeHBvcnRlcjogRSB9ID0gdiwgUCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1IdVN5TnpjVC0hfnswMG19fi5qcycpLCB7IEIzUHJvcGFnYXRvcjogUywgQjNJbmplY3RFbmNvZGluZzogVCB9ID0gUCwgTCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1EZktseG5tZS0hfnswMDF9fi5qcycpLCB7IEJhdGNoU3BhblByb2Nlc3NvcjogayB9ID0gTDtcbiAgTXQoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7ZX0gYW5kIGJhc2VVcmwgJHt0fWApO1xuICBjb25zdCBGID0gZGwodCk7XG4gIE10KGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Rn1gKTtcbiAgY29uc3QgSiA9IG5ldyBFKHsgdXJsOiBGIH0pLCB2ZSA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiBlLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgcmV0dXJuIG5ldyBhKHtcbiAgICByZXNvdXJjZTogbmV3IG0odmUpLm1lcmdlKGgoKSksXG4gICAgc3BhblByb2Nlc3NvcnM6IFtcbiAgICAgIG5ldyBvKG5ldyBuKCkpLFxuICAgICAgbmV3IGsoSiwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSkucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgdSgpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBTKHsgaW5qZWN0RW5jb2Rpbmc6IFQuTVVMVElfSEVBREVSIH0pXG4gIH0pLCB5KHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgYyh7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSksIEFyID0gVWUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgTXQoXCJUcmFjZXIgaW5pdGlhbGl6ZWRcIiksIEFyO1xufSwgZGwgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmV3IFVSTChlKS5ob3N0bmFtZTtcbiAgcmV0dXJuIHQgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiID8gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiIDogdCA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiIDogXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59LCBJciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhBcHBsZVBheSwgZS5hdXRob3JpemVOZXRBcHBsZVBheSwgZS5hZHllbkFwcGxlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKG8pID0+IHtcbiAgICBjb25zdCBhID0gby5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgYSAhPSBudWxsICYmIGEuaXNBdmFpbGFibGUgJiYgci5wdXNoKGEpO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBwcm9jZXNzb3I6IE8uRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gbi5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgobykgPT4gby5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChvKSA9PiBwbChyLCBvKVxuICB9O1xufSwgVHIgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4R29vZ2xlUGF5LCBlLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgZS5hZHllbkdvb2dsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChvKSA9PiB7XG4gICAgY29uc3QgYSA9IG8ucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGEgIT0gbnVsbCAmJiBhLmlzQXZhaWxhYmxlICYmIHIucHVzaChhKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogTy5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBuLnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgobykgPT4gby5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChvKSA9PiBfbChyLCBvKVxuICB9O1xufSwgcGwgPSAoZSwgdCkgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgobykgPT4gby5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBfbCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChvKSA9PiBvLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNsYXNzIG1sIHtcbiAgY29uc3RydWN0b3IodCwgciwgbiwgbykge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChhKSA9PiB7XG4gICAgICBpZiAoIWEuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFJyKGEub3JpZ2luKSAhPT0gUnIodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2YgYS5kYXRhID09IFwib2JqZWN0XCIgJiYgYS5kYXRhLnBlbnBhbCB8fCB0eXBlb2YgYS5kYXRhID09IFwib2JqZWN0XCIgJiYgYS5kYXRhLnNvdXJjZSAmJiBhLmRhdGEuc291cmNlID09PSBcInJlYWN0LWRldnRvb2xzLWJyaWRnZVwiKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgcyA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBzID0gRXMoSlNPTi5wYXJzZShhLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChzKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IGwsIHBheWxvYWQ6IHUgfSA9IHMsIHAgPSB1LnR5cGU7XG4gICAgICBzd2l0Y2ggKHApIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodCh1LmhlaWdodCA/IGAke3UuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGwsIHUuZWxlbWVudFR5cGUsIHtcbiAgICAgICAgICAgIG9iZnVzY2F0ZWRWYWx1ZTogdS5vYmZ1c2NhdGVkVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBhLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBwKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoYSkgPT4gYS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFhLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgYS5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgYSksICExKSA6IHRoaXMubm9uY2VzLmhhcyhhLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBhKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChhLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gdCwgdGhpcy5iYXNlVXJsID0gciwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IG87XG4gIH1cbn1cbmNvbnN0IFJyID0gKGUpID0+IG5ldyBVUkwoZSkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24geWwoZSwgdCkge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHRcbiAgfSkucHJvbWlzZSwgbyA9IGF3YWl0IHVzKG4pO1xuICBpZiAoIWRzKG4sIG8pKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBmbCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24odCwgcikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHQsIHIpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgdCA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBobCA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IGU7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgobykgPT4ge1xuICAgIGlmIChvLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgYSA9IG8ubG9hZGVkVmFsdWUsIHMgPSBhLmlzQXZhaWxhYmxlICYmIGEuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gYS5pc0F2YWlsYWJsZSAmJiBhLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgcyAmJiBOcihcImFwcGxlX3BheVwiLCBhLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgTnIoXCJnb29nbGVfcGF5XCIsIGEsIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHIuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBOciA9IChlLCB0LCByLCBuLCBvKSA9PiBSLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IHIsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoci5jaGVja291dFBheW1lbnRNZXRob2RzLCBlKSxcbiAgbm9uQ2RlRm9ybUlucHV0czogWShyLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiB0XG59KSwgRnIgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBsZSwgZXJyX186IFcgfSA9IEEoXCJvcC1mb3JtXCIpLCBwZSA9IGNsYXNzIHBlIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIHZhciBvO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSAhMSwgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgWmUoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IFplKCksIHRoaXMuY29udGV4dCA9IG5ldyBaZSgpLCB0aGlzLmluaXRGbG93cyA9IHJsKCksIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGEgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBzID0gYS5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAvLyAnZW52aXJvbm1lbnQnOiAsXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yayc6IGZyYW1ld29yayxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrLnZlcnNpb24nOiB2ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBMZS53aXRoKFVlLnNldFNwYW4oTGUuYWN0aXZlKCksIHMpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYyA9IHRoaXMuY3JlYXRlRWxlbWVudCh1ZS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiLCBjLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiLCBPYmplY3QuYXNzaWduKGMubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSksIGMubW91bnQoXCJib2R5XCIpLCBsZShcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBsZShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBsZShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBsID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogRnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgbGUoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgdSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBMZS5hY3RpdmUoKSksIHAgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogRnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1ID09IG51bGwgfHwgdS5lbmQoKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpLCBsZShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgbHMocCwgdGhpcy5kZXZpY2VUb2tlbiksIGxlKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IHkgPSBwZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgcCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KHkpLCBobCh0aGlzLmluaXRGbG93cywgeSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgbGUoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IHRsKHRoaXMuaW5pdEZsb3dzLCB5LCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChsLnRvdGFsQW1vdW50QXRvbXMsIGwuY3VycmVuY3kpLCBsZShcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpLCBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoeyBjb2RlOiBoZS5PSyB9KSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgY29uc3QgbCA9IFgoYyk7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IGhlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogbFxuICAgICAgICAgIH0pLCBXKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBsKSwgZyhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogbFxuICAgICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGwpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBhLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICFzIHx8IHMudHlwZSA9PT0gdWUuQ0RFX0JSSURHRSB8fCAocy5ub2RlLnN0eWxlLmhlaWdodCA9IGEpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChhKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQuc2V0KGEpLCBnKFwiY2RlX2xvYWRlZFwiKSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChhKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGEpLCBhKSwgZyhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGFcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoYSwgcyA9IHt9KSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKSwgIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgYyA9IG5vLnBhcnNlKGEpLCBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgdSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhzKTtcbiAgICAgIGwubmFtZSA9IGAke2N9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgcCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtsLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIHAuc2VhcmNoID0gdS50b1N0cmluZygpLCBsLnNyYyA9IHAuaHJlZiwgbC5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgbC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGMsIGwpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoYSwgcykgPT4ge1xuICAgICAgY29uc3QgYyA9IHtcbiAgICAgICAgdHlwZTogYSxcbiAgICAgICAgbm9kZTogcyxcbiAgICAgICAgbW91bnQ6IChsKSA9PiB7XG4gICAgICAgICAgdmFyIHU7XG4gICAgICAgICAgKHUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwpKSA9PSBudWxsIHx8IHUuYXBwZW5kQ2hpbGQocyksIGcoXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiBhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogYy50eXBlLCBub2RlOiBjLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW3VlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFt1ZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW3VlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbdWUuQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFt1ZS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbYV0gPSBjLCBjO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChhKSA9PiB7XG4gICAgICBjb25zdCBzID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIHMuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgcy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBhLnN0eWxlcyAmJiBzLmFwcGVuZChcInN0eWxlc1wiLCBzbChhLnN0eWxlcykpLCBzLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBzO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChhKSA9PiB1dChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgeWwoYS5ub2RlKTtcbiAgICAgICAgcy50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oYS50eXBlLCBzKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBhLnR5cGUgPT09IHVlLkNERV9CUklER0UgJiYgdGhpcy5hbnlDZGVDb25uLnNldChzKTtcbiAgICAgIH1cbiAgICApLmNhdGNoKChzKSA9PiBXKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSksIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAoYSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIFcoXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgdXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwic3VibWl0X2NhcmRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGcoXCJzdWJtaXRfY2FyZFwiLCB7IC4uLmEgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgYXdhaXQgUi5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBhID09IG51bGwgPyB2b2lkIDAgOiBhLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgcztcbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgcztcbiAgICAgIH1cbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4gdXQoXG4gICAgICB7XG4gICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKTtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgaWYgKCFhKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBzLCBpc0F2YWlsYWJsZTogYyB9ID0gSXIoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgeyBwcm9jZXNzb3JzOiBsLCBpc0F2YWlsYWJsZTogdSB9ID0gVHIoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgcCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCksIHkgPSAocCA9PSBudWxsID8gdm9pZCAwIDogcC5pc0F2YWlsYWJsZSkgPz8gITEsIF8gPSBhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAodikgPT4gdi5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiB2LnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICksIG0gPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgZiA9IChtID09IG51bGwgPyB2b2lkIDAgOiBtLmlzQXZhaWxhYmxlKSA/PyAhMTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBVLmFwcGxlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogcyxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBVLmdvb2dsZVBheSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGwsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogVS5wYXlwYWwsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiB5ID8gW08uRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogeVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogVS5wb2NreXRQYXlwYWwsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBfID8gW08uRW51bS5wb2NreXRdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogX1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogVS5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogZiA/IFtPLkVudW0ubG9vcF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgfVxuICAgICksIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChhLCBzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgVyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCB1dChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2Q6IGEsIHNldHRpbmdzOiBzIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghbClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoYSkge1xuICAgICAgICAgICAgICBjYXNlIFUucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgVS5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBVLmxvb3BDcnlwdG86XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBVLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IHUgfSA9IElyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFUuZ29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IHUgfSA9IFRyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFUuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBVLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgVS5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBVLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFUuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBVLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnQoYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgYztcbiAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgYztcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdmFyIGE7XG4gICAgICBsZShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpLCB0aGlzLmlzRGVzdHJveWVkID0gITA7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIHMgJiYgcy5ub2RlLnJlbW92ZSgpO1xuICAgICAgKGEgPSBqKCkpID09IG51bGwgfHwgYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgbGkoKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcywgZyhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGEpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoYSk7XG4gICAgfSwgcGUuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC41LjBcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBHdC5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgZmwoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IEVuKCksIGNpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IGlsKCk7XG4gICAgb24odGhpcy5iYXNlVXJsKS50aGVuKChhKSA9PiB7XG4gICAgICBpZiAoIVV0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogYSxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIFV0LnNldChzKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pLCB0LmFsbG93VHJhY2luZyA9PT0gITAgJiYgbGwodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBtbCh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgKG8gPSBqKCkpID09IG51bGwgfHwgby5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZSh0ID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCByID0gcGUuZ2V0SW5zdGFuY2UoKSwgbiA9IHtcbiAgICAgIGNhbGxlcjogdCxcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZm9ybUlkKSB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH0sIG8gPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7dH1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7bi50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke24uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke24uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke24uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkID8gKFcobyksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IG8gfSksICExKSA6ICFyIHx8IHIuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCA/IChXKG8pLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBvIH0pLCAhMSkgOiAhMDtcbiAgfVxufTtcbnBlLm9qc0Zsb3dzID0gUiwgcGUuYXNzaWduQXNTaW5nbGV0b24gPSAodCkgPT4ge1xuICBpZiAocGUuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHQ7XG59LCBwZS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgcGUuYnVpbGRPanNGbG93Q29udGV4dCA9ICh0LCByLCBuLCBvKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwodC5iYXNlVXJsID8/IGduKS5vcmlnaW4sXG4gIGZvcm1EaXY6IG8sXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiByLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogci5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiB0LmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogdC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbn0pO1xubGV0IE1yID0gcGU7XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoTXIuZ2V0SW5zdGFuY2UoKSkge1xuICAgIE1yLmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthcHBsZVBheVJlc3VsdCwgc2V0QXBwbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW2dvb2dsZVBheVJlc3VsdCwgc2V0R29vZ2xlUGF5UmVzdWx0XSA9IHVzZVN0YXRlKE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgICBpZiAob3BGb3JtKSB7XG4gICAgICAgIGNvbnN0IGFwcGxlUGF5UmVzdWx0MiA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0QXBwbGVQYXlSZXN1bHQoYXBwbGVQYXlSZXN1bHQyKTtcbiAgICAgICAgY29uc3QgZ29vZ2xlUGF5UmVzdWx0MiA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEdvb2dsZVBheVJlc3VsdChnb29nbGVQYXlSZXN1bHQyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gTXIuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgTXIoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICBhbGxvd1RyYWNpbmc6IHByb3BzLmFsbG93VHJhY2luZyA/PyBmYWxzZSxcbiAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogcHJvcHMucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiByZXN1bHQubG9hZGVkVmFsdWUud2lkZ2V0UHJvcHMsXG4gICAgICAgICAgY29uZmlnOiByZXN1bHQubG9hZGVkVmFsdWUuaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgIXJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IG51bGwsXG4gICAgICAgICAgY29uZmlnOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IGFwcGxlUGF5UmVzdWx0LFxuICAgIGdvb2dsZVBheTogZ29vZ2xlUGF5UmVzdWx0LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXgsXG4gICAgbG9vcDogbG9vcENvbmZpZ1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuZXhwb3J0IHsgQnQgYXMgQiwgQ2FyZEN2Y0VsZW1lbnQgYXMgQywgRWxlbWVudHNGb3JtIGFzIEUsIEZpZWxkTmFtZSBhcyBGLCBIaSBhcyBILCBMZSBhcyBMLCBOaSBhcyBOLCBQYXlJbkZhaWxlZCBhcyBQLCBTdWJtaXRNZXRob2RzIGFzIFMsIFRpIGFzIFQsIFVlIGFzIFUsIFl0IGFzIFksIFosIFppIGFzIGEsIGp0IGFzIGIsIGNuIGFzIGMsIGRuIGFzIGQsIEh0IGFzIGUsIGd0IGFzIGYsIGdyIGFzIGcsIGhlIGFzIGgsIENhcmRFbGVtZW50IGFzIGksIGppIGFzIGosIENhcmRFeHBpcnlFbGVtZW50IGFzIGssIGxuIGFzIGwsIENhcmROdW1iZXJFbGVtZW50IGFzIG0sIEVudmlyb25tZW50IGFzIG4sIFBheUluU3RhdGUgYXMgbywgcnQgYXMgciwgdHQgYXMgdCwgdXNlT3BlblBheUVsZW1lbnRzIGFzIHUsIHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyBhcyB2LCB6aSBhcyB6IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsT0FBQUMsSUFBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLGlCQUFBQyxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxVQUFBQyxJQUFRLFdBQUFDLElBQVMsYUFBQUMsVUFBaUI7QUFFaEYsU0FBU0MsR0FBU0MsR0FBUUMsR0FBVztBQUNuQyxNQUFJQyxJQUFpQixPQUFPO0FBQzVCLEVBQUFBLElBQWlCQSxFQUFlRixHQUFRQyxDQUFTLElBQUlELEVBQU8sWUFBWUM7QUFDMUU7QUFDQSxTQUFTRSxH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Q3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiIsICJjaGFsayIsICJ2NCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgInVzZUVmZmVjdCIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImZuIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJhIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6IiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJDEiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgIkFXWF9MT0FESU5HIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJsb2dfXyIsICJlcnJfXyQxIiwgImNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hIiwgInJlcXVpcmVfemlwX2NvZGUiLCAicmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyIsICJyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyIsICJwYXltZW50X21ldGhvZCIsICJjb25kaXRpb25hbEZpZWxkcyIsICJGaWVsZE5hbWUiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgInJlc3VsdCIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJFbnZpcm9ubWVudCIsICJFbnZpcm9ubWVudDIiLCAiUGF5SW5GYWlsZWQiLCAiUGF5SW5GYWlsZWQyIiwgIlBheUluU3RhdGUiLCAiUGF5SW5TdGF0ZTIiLCAiTE9PUF9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3ciLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJjdXN0b21QYXJhbXMiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAidXNlU3RhdGUiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1c2VFZmZlY3QiLCAianN4IiwgInVybCIsICJDYXJkRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiLCAiWG4iLCAiZW8iLCAidG8iLCAiciIsICJuIiwgImEiLCAicyIsICJybyIsICJvIiwgIkMiLCAiYiIsICJNIiwgImQiLCAiT3IiLCAiVXIiLCAianIiLCAieHIiLCAidWUiLCAibm8iLCAid3QiLCAib28iLCAiaWUiLCAiYW8iLCAiaW8iLCAic28iLCAiY28iLCAibG8iLCAidW8iLCAicG8iLCAiX28iLCAibW8iLCAieW8iLCAiZm8iLCAiaG8iLCAiRGUiLCAiZ28iLCAid28iLCAidm8iLCAiYm8iLCAiRW8iLCAiUG8iLCAiU28iLCAiUWUiLCAiQ28iLCAia28iLCAiQW8iLCAiRCIsICJJbyIsICJUbyIsICIkciIsICJSbyIsICJObyIsICJ3IiwgIkZvIiwgIkdyIiwgIlZyIiwgIk1vIiwgIkxvIiwgIiRlIiwgIkRvIiwgIk9vIiwgInFyIiwgIlVvIiwgImpvIiwgInhvIiwgImlyIiwgInpyIiwgInNyIiwgIkhyIiwgIiRvIiwgIkdvIiwgIm10IiwgIkJyIiwgIlZvIiwgInFvIiwgInpvIiwgIllyIiwgIkhvIiwgIkpyIiwgIkJvIiwgIllvIiwgIkpvIiwgIlpvIiwgIktvIiwgIldvIiwgIlFvIiwgIlhvIiwgImVhIiwgInRhIiwgIkx0IiwgInJhIiwgIm5hIiwgIm9hIiwgIlgiLCAiYWEiLCAiaWEiLCAiWnIiLCAic2EiLCAiY2EiLCAiZWUiLCAic2kiLCAiaG4iLCAieWUiLCAiQSIsICJjaGFsayIsICJEdCIsICJnZSIsICJsYSIsICJwIiwgIktyIiwgIk9lIiwgInl0IiwgImZ0IiwgIk1lIiwgInVhIiwgIm0iLCAiZiIsICJoIiwgImRhIiwgIiQiLCAidnQiLCAia3QiLCAiaHQiLCAib3QiLCAiY3IiLCAiV3IiLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAibHIiLCAiZHQiLCAiVnQiLCAieWEiLCAiT3QiLCAicGEiLCAiQXQiLCAiY3QiLCAibWEiLCAicXQiLCAiZmEiLCAiaGEiLCAibWUiLCAid2EiLCAidXIiLCAiZ2EiLCAidmEiLCAiYmEiLCAiRWEiLCAiUGEiLCAiU2EiLCAicm4iLCAiZHIiLCAiQ2EiLCAia2EiLCAicHIiLCAiQWEiLCAiX3IiLCAiSWEiLCAiVGEiLCAiUmEiLCAiTmEiLCAiRmEiLCAiTWEiLCAiTGEiLCAiRGEiLCAiT2EiLCAiVWEiLCAiamEiLCAieGEiLCAiJGEiLCAiR2EiLCAiVmEiLCAicWEiLCAibm4iLCAiemEiLCAiSGEiLCAiQmEiLCAiWWEiLCAiSmEiLCAiWmEiLCAiS2EiLCAiV2EiLCAiUWEiLCAiWGEiLCAiZWkiLCAiUCIsICJaZSIsICJidCIsICJtciIsICJ0aSIsICJyaSIsICJJdCIsICJvbiIsICJFdCIsICJqIiwgIlV0IiwgInlyIiwgIm5pIiwgIm9pIiwgImFpIiwgImx0IiwgImlpIiwgImMiLCAienQiLCAiYW4iLCAic24iLCAidCIsICJjaSIsICJsaSIsICJMciIsICJ1aSIsICJkaSIsICJwaSIsICJQdCIsICJmciIsICJTdCIsICJtaSIsICJ5aSIsICJmaSIsICJoaSIsICJnaSIsICJTZSIsICJociIsICJ3aSIsICJsIiwgInUiLCAidmkiLCAiYmkiLCAiWGUiLCAiZXQiLCAiSHQiLCAidHQiLCAiQnQiLCAiRWkiLCAiUGkiLCAiU2kiLCAiemUiLCAiWiIsICJDaSIsICJraSIsICJBaSIsICJJaSIsICJndCIsICJUaSIsICJSaSIsICJOaSIsICJGaSIsICJNaSIsICJMaSIsICJEaSIsICJPaSIsICJUdCIsICJVaSIsICJZdCIsICJqdCIsICJjbiIsICJsbiIsICJqaSIsICJLZSIsICJKdCIsICJadCIsICJ4aSIsICJLdCIsICIkaSIsICJHaSIsICJ1biIsICJWaSIsICJxaSIsICJ6aSIsICJIaSIsICJkbiIsICJCaSIsICJSdCIsICJwbiIsICJZaSIsICJKaSIsICJaaSIsICJLaSIsICJXaSIsICJnciIsICJydCIsICJoZSIsICJMZSIsICJOdCIsICJRaSIsICJVZSIsICJYaSIsICJ1dCIsICJfbiIsICJxIiwgInRzIiwgImVzIiwgInJzIiwgIk4iLCAid2UiLCAibW4iLCAibnMiLCAiViIsICJvcyIsICJhcyIsICJpcyIsICJmZSIsICJ5biIsICJ3ciIsICJzcyIsICJXdCIsICJjcyIsICJjb25uZWN0VG9DaGlsZCIsICJDdCIsICJscyIsICJ1cyIsICJkcyIsICJnbiIsICJ3biIsICJXZSIsICJwcyIsICJ2biIsICJ2ciIsICJDZSIsICJIZSIsICJfcyIsICJtcyIsICJ5cyIsICJncyIsICJmcyIsICJocyIsICJ3cyIsICJibiIsICJFbiIsICJ2cyIsICJicyIsICJZIiwgIkVzIiwgIlBzIiwgIlBuIiwgIlNzIiwgIkNzIiwgImF0IiwgIlNuIiwgImtzIiwgIkNuIiwgIkFzIiwgIlF0IiwgIklzIiwgIlRzIiwgImtuIiwgIlJzIiwgIkFuIiwgIkluIiwgIlRuIiwgIk8iLCAiUm4iLCAiWHQiLCAiZXIiLCAiTnMiLCAiRnMiLCAidHIiLCAiTXMiLCAib2UiLCAiYWUiLCAiRWwiLCAiTm4iLCAiaXQiLCAiRyIsICJyciIsICJBZSIsICJMcyIsICJEcyIsICJqZSIsICJudCIsICJPcyIsICJGbiIsICJVcyIsICJqcyIsICJiciIsICJ4cyIsICIkcyIsICJHcyIsICJNbiIsICJMbiIsICJEbiIsICJPbiIsICJWcyIsICJxcyIsICJ6cyIsICJIcyIsICJCcyIsICJZcyIsICJLIiwgIlVuIiwgIkpzIiwgIlpzIiwgIktzIiwgIlFuIiwgIkJlIiwgImpuIiwgIldzIiwgInkiLCAiUiIsICJfIiwgIlFzIiwgIkdlIiwgIm5yIiwgIkZ0IiwgIm9yIiwgIlZlIiwgInhuIiwgImFyIiwgIm5lIiwgIlJlIiwgIlhzIiwgImVjIiwgInYiLCAiRSIsICJTIiwgIlQiLCAiTCIsICJrIiwgIkYiLCAiSiIsICJzZSIsICJiZSIsICJfZSIsICJUZSIsICJxZSIsICJJZSIsICJwdCIsICJ0YyIsICJyYyIsICJuYyIsICJZZSIsICIkbiIsICJvYyIsICJhYyIsICJRIiwgIk5lIiwgImljIiwgInNjIiwgInZlIiwgIkduIiwgIlZuIiwgImNjIiwgImxjIiwgIl90IiwgInFuIiwgInVjIiwgImRjIiwgIlBlIiwgIkplIiwgInBjIiwgIm1jIiwgInpuIiwgInljIiwgImZjIiwgIkhuIiwgInh0IiwgImhjIiwgImdjIiwgIkVyIiwgIndjIiwgIkJuIiwgInZjIiwgImJjIiwgImtlIiwgIiR0IiwgIkVjIiwgIlluIiwgIlBjIiwgImtjIiwgIlNjIiwgIkNjIiwgIlpuIiwgIkpuIiwgIkkiLCAiUHIiLCAiQWMiLCAiSWMiLCAiVGMiLCAiUmMiLCAiSCIsICJOYyIsICJGYyIsICJNYyIsICJFZSIsICJMYyIsICJLbiIsICJEYyIsICJPYyIsICJjZSIsICJTciIsICJXbiIsICJVYyIsICJqYyIsICJDciIsICJ4YyIsICIkYyIsICJHYyIsICJWYyIsICJIYyIsICJxYyIsICJ6YyIsICJCIiwgIkJjIiwgIlljIiwgIkpjIiwgIkZlIiwgIlpjIiwgIldjIiwgIktjIiwgIlFjIiwgIlhjIiwgImVsIiwgInRlIiwgInRsIiwgInJsIiwgIm5sIiwgInJlIiwgImtyIiwgImRlIiwgIkd0IiwgIm9sIiwgImFsIiwgImlsIiwgIlUiLCAic2wiLCAiTXQiLCAiY2wiLCAibGwiLCAidWwiLCAiQXIiLCAiZGwiLCAiSXIiLCAicGwiLCAiVHIiLCAiX2wiLCAibWwiLCAiUnIiLCAieWwiLCAiZmwiLCAiaGwiLCAiTnIiLCAiRnIiLCAibGUiLCAiVyIsICJwZSIsICJNciIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAiZm9ybUNhbGxiYWNrcyIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgImFwcGxlUGF5UmVzdWx0IiwgInNldEFwcGxlUGF5UmVzdWx0IiwgImdvb2dsZVBheVJlc3VsdCIsICJzZXRHb29nbGVQYXlSZXN1bHQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJhcHBsZVBheVJlc3VsdDIiLCAiZ29vZ2xlUGF5UmVzdWx0MiIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgIkZyYWdtZW50IiwgImNoaWxkcmVuUHJvcHMiXQp9Cg==
8447
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyQxID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcbnoub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBtZXNzYWdlOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe30pO1xuei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyQxKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kMShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyhjb25kaXRpb25hbEZpZWxkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcztcbiAgfVxuICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzLmV4dGVuZChjb25kaXRpb25hbEZpZWxkcyk7XG59O1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMgPSB7fSkgPT4ge1xuICBpZiAoZGVmYXVsdEZpZWxkVmFsdWVzKSB7XG4gICAgbG9nX18oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuXG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBFbnZpcm9ubWVudCA9IC8qIEBfX1BVUkVfXyAqLyAoKEVudmlyb25tZW50MikgPT4ge1xuICBFbnZpcm9ubWVudDJbXCJMb2NhbFwiXSA9IFwibG9jYWxcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGV2ZWxvcG1lbnRcIl0gPSBcImRldmVsb3BtZW50XCI7XG4gIEVudmlyb25tZW50MltcIlN0YWdpbmdcIl0gPSBcInN0YWdpbmdcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGVtb1wiXSA9IFwiZGVtb1wiO1xuICBFbnZpcm9ubWVudDJbXCJQcm9kdWN0aW9uXCJdID0gXCJwcm9kdWN0aW9uXCI7XG4gIHJldHVybiBFbnZpcm9ubWVudDI7XG59KShFbnZpcm9ubWVudCB8fCB7fSk7XG52YXIgUGF5SW5GYWlsZWQgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJbkZhaWxlZDIpID0+IHtcbiAgUGF5SW5GYWlsZWQyW1wiTUVUSE9EX0NSRUFUSU9OX0ZBSUxFRFwiXSA9IFwibWV0aG9kQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0JBTEFOQ0VcIl0gPSBcImluc3VmZmljaWVudEJhbGFuY2VcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0FVVEhPUklaQVRJT05cIl0gPSBcImluc3VmZmljaWVudEF1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5GYWlsZWQyW1wiU0lHTkVEX01FU1NBR0VfUkVRVUlSRURcIl0gPSBcInNpZ25lZE1lc3NhZ2VSZXF1aXJlZFwiO1xuICBQYXlJbkZhaWxlZDJbXCJDVVNUT01FUl9DUkVBVElPTl9GQUlMRURcIl0gPSBcImN1c3RvbWVyQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiUEFZTUVOVF9GQUlMRURcIl0gPSBcInBheW1lbnRGYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiVFJBTlNBQ1RJT05fRkFJTEVEXCJdID0gXCJ0cmFuc2FjdGlvbkZhaWxlZFwiO1xuICByZXR1cm4gUGF5SW5GYWlsZWQyO1xufSkoUGF5SW5GYWlsZWQgfHwge30pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRfTUVUSE9EXCJdID0gXCJjcmVhdGluZ1BheW1lbnRNZXRob2RcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgcHJvY2Vzc29yczogW10sXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5mdW5jdGlvbiBYbihlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIGVvKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB0byA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IGE7XG4gICAgfSB8fCBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBmb3IgKHZhciBpIGluIGEpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBpKSAmJiAob1tpXSA9IGFbaV0pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHJvID0gZnVuY3Rpb24oZSkge1xuICB0byh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLmNvbnN0cnVjdG9yLCBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IG8ubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBYbihhLCBvLnByb3RvdHlwZSksIGVvKGEpLCBhO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCBDID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkXCIgfSksIGIgPSB6LnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBNID0gKGUpID0+IHoubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBkID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLkxJTkUxID0gXCJsaW5lMVwiLCBlLkxJTkUyID0gXCJsaW5lMlwiLCBlLkxJTkUzID0gXCJsaW5lM1wiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5TSElQUElOR19MSU5FMSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIiwgZS5TSElQUElOR19MSU5FMiA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIiwgZS5TSElQUElOR19MSU5FMyA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTNcIiwgZS5TSElQUElOR19DSVRZID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIsIGUuU0hJUFBJTkdfU1RBVEUgPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIsIGUuU0hJUFBJTkdfQ09VTlRSWSA9IFwic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiLCBlLlNISVBQSU5HX1pJUF9DT0RFID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIsIGUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShkIHx8IHt9KTtcbmNvbnN0IE9yID0gei5uYXRpdmVFbnVtKGQpO1xudmFyIFVyID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShVciB8fCB7fSk7XG5jb25zdCBqciA9IHoubmF0aXZlRW51bShVciksIHhyID0gei51bmlvbihbT3IsIGpyXSk7XG52YXIgdWUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkodWUgfHwge30pO1xuY29uc3Qgbm8gPSB6Lm5hdGl2ZUVudW0odWUpLCB3dCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBNKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogTSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBvbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBiLFxuICBleHBpcnk6IGIsXG4gIGN2YzogYlxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogYixcbiAgY29sb3I6IGIsXG4gIGZvbnRGYW1pbHk6IGIsXG4gIGZvbnRTaXplOiBiLFxuICBmb250V2VpZ2h0OiBiLFxuICBtYXJnaW46IGIsXG4gIHBhZGRpbmc6IGIsXG4gIGxldHRlclNwYWNpbmc6IGIsXG4gIGxpbmVIZWlnaHQ6IGIsXG4gIGhpZGVJY29uOiBiXG59KTtcbmNvbnN0IHNlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBhbyA9IHNlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBzbyA9IHoub2JqZWN0KHsgdHlwZTogYW8gfSksIGlvID0gc2UuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBjbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogaW8sXG4gIGVsZW1lbnRUeXBlOiBqcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgbG8gPSBzZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgdW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGxvLFxuICBtZXNzYWdlOiBDLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgcG8gPSBzZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBfbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogcG8sXG4gIGVsZW1lbnRUeXBlOiB4cixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgbW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChzZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogQ1xufSksIHlvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoc2UuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBiLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KHd0KVxufSksIGZvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoc2UuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIGhvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoc2UuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KSwgRGUgPSB6Lm9iamVjdCh7XG4gIGVtYWlsOiBDLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogQyxcbiAgbGFzdE5hbWU6IEMsXG4gIHByb21vdGlvbkNvZGU6IGIsXG4gIGxpbmUxOiBiLFxuICBsaW5lMjogYixcbiAgbGluZTM6IGIsXG4gIGNpdHk6IGIsXG4gIHN0YXRlOiBiLFxuICBjb3VudHJ5OiBDLFxuICB6aXBDb2RlOiBiLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQoITApLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogYixcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBiLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogYixcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogYlxufSksIGdvID0gei5vYmplY3Qoe1xuICBlbWFpbDogQy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBmaXJzdE5hbWU6IGIsXG4gIGxhc3ROYW1lOiBiLFxuICBwcm9tb3Rpb25Db2RlOiBiLFxuICBsaW5lMTogYixcbiAgbGluZTI6IGIsXG4gIGxpbmUzOiBiLFxuICBjaXR5OiBiLFxuICBzdGF0ZTogYixcbiAgY291bnRyeTogQyxcbiAgemlwQ29kZTogYixcbiAgaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmc6IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogYixcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IGJcbn0pO1xuei5vYmplY3Qoe1xuICBsaW5lMTogQyxcbiAgY2l0eTogQyxcbiAgc3RhdGU6IEMsXG4gIGNvdW50cnk6IENcbn0pO1xuei5vYmplY3Qoe1xuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbnoub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBDLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbmNvbnN0IHdvID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgdm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBzZXNzaW9uSWQ6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogd3QsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBiLFxuICBwYXltZW50Um91dGVJZDogYlxufSkuZXh0ZW5kKERlLnNoYXBlKSwgYm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChzZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KSwgRW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChzZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KSwgUG8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBzbyxcbiAgY28sXG4gIHVvLFxuICBfbyxcbiAgbW8sXG4gIHlvLFxuICB2byxcbiAgYm8sXG4gIEVvLFxuICBmbyxcbiAgaG9cbl0pLCBTbyA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogUG8sXG4gIG5vbmNlOiBDLFxuICBmb3JtSWQ6IEMsXG4gIGVsZW1lbnRJZDogQ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IENcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBNKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBNKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBRZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBNKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KSwgQ28gPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IGtvID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoQ28pXG59KSwgQW8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCghMCkgfSksXG4gIGtvXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHd0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE0oei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE0oei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogd3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IERlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IE0oei5zdHJpbmcoKSlcbn0pO1xudmFyIEQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShEIHx8IHt9KTtcbmNvbnN0IElvID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBUbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksICRyID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE0oei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBNKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBNKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBNKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIFJvID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITApLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCghMSkgfSlcbl0pLCBObyA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KG9vKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE0oUWUpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE0oei5hcnJheSgkcikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBNKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBNKFFlKVxufSksIHcgPSAoZSkgPT4gei5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEZvID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBHciA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoei5udW1iZXIoKSlcbn0pLCBWciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIE1vID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIExvID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogdyhNbylcbn0pLCAkZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBEbyA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBPbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShEbyksXG4gIHRyaWFsX3N0YXJ0OiB3KHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoei5zdHJpbmcoKSlcbn0pLCBxciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBVbyA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIGpvID0gei5vYmplY3Qoe1xuICBjb3Vwb246IEdyXG59KSwgeG8gPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoam8pLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KFVvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpXG59KSwgc3IgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoT28pLFxuICBpbnZvaWNlczogei5hcnJheSh4byksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6LmFycmF5KHouc3RyaW5nKCkpKVxufSksIHpyID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBzcixcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KHNyKSxcbiAgY291cG9uczogei5hcnJheShHcilcbn0pLCBpciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFZyKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogTG8sXG4gIHN1YnNfcHJldmlldzogdyh6ciksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheSgkZSksXG4gIHJldHVybl91cmw6IHcoei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiB3KHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KSwgSHIgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKGlyLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoaXIuc2hhcGUpXG5dKSwgJG8gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBHbyA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW0hyLCAkbywgR29dKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBtdCA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogbXQsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IG10Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoVnIpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiAkZSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBWbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFZvKTtcbmNvbnN0IHFvID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogbXQsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBtdC5vcHRpb25hbCgpXG59KSwgem8gPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIFlyID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KHpvKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KSwgSG8gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogJGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQocW8uc2hhcGUpLmV4dGVuZChIby5zaGFwZSk7XG5jb25zdCBKciA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogdyh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIGZpZWxkczogZ28sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJGUsXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6ICRlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiB3KHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCbyA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IHcoUWUpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHouc3RyaW5nKCkpLFxuICBsaW5lMjogdyh6LnN0cmluZygpKSxcbiAgbGluZTM6IHcoei5zdHJpbmcoKSksXG4gIGNpdHk6IHcoei5zdHJpbmcoKSksXG4gIHN0YXRlOiB3KHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiB3KHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6LnN0cmluZygpKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogdyh6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgWW8gPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogJGUsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBKbyA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBabyA9IHoub2JqZWN0KHt9KSwgS28gPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKSwgV28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pLCBRbyA9IHouYXJyYXkoV28pLCBYbyA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSksIGVhID0gei5hcnJheShYbyksIHRhID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBcIkNvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpblwiXG59LCBMdCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gdGFbdF0gPz8gZTtcbn0sIHJhID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIEpTT04ucGFyc2UoZSkgPT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBuYSA9IChlKSA9PiBlLmxlbmd0aCA9PT0gMSA/IEx0KGVbMF0ubXNnKSA6IGBQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYOKAoiAke0x0KHIubXNnKX1gKS5qb2luKGBcbmApfWAsIG9hID0gKGUpID0+IGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGAtICR7ci5wYXRoLmpvaW4oXCIvXCIpfTogJHtyLm1lc3NhZ2V9YCkuam9pbihgXG5gKX1gLCBYID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICBpZiAocmEoZS5tZXNzYWdlKSkge1xuICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBRby5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IG5hKHQpIDogZWEuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBvYSh0KSA6IChjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIHVua25vd24gc3RyaW5naWZpZWQgSlNPTiBvYmplY3Q6XG4ke2UubWVzc2FnZX1gKSwgZS5tZXNzYWdlKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBMdChlLm1lc3NhZ2UpO1xuICBpZiAodHlwZW9mIGUgPT0gXCJvYmplY3RcIilcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB0ICsgXCJcIjtcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gZSArIFwiXCI7XG59LCBhYSA9IChlLCB0LCByKSA9PiAoLi4ubikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0KC4uLm4pO1xuICB9IGNhdGNoIChvKSB7XG4gICAgcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7ZX0pOmAsIG8pO1xuICAgIHJldHVybjtcbiAgfVxufSwgc2EgPSAoZSkgPT4gZS5yZWR1Y2UoKHQsIHIpID0+IHQgKyByLCAwKSwgWnIgPSAoZSkgPT4ge1xuICBlLnByZXZlbnREZWZhdWx0KCksIGUucmV0dXJuVmFsdWUgPSAhMDtcbn0sIGlhID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBacik7XG59LCBjYSA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgWnIpO1xufSwgZWUgPSAoZSkgPT4ge1xuICBsZXQgdCA9ICExO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICB2YXIgbiwgbztcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSAhMDtcbiAgICB0cnkge1xuICAgICAgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiBpYSgpLCAobyA9IChuID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgby5jYWxsKG4pLCBnKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYSA9IGF3YWl0IGUocik7XG4gICAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5hXG4gICAgICB9KSwgaXMoKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGEucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKGEubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGEucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBhLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGEucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2F9YCk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdCA9ICExO1xuICAgICAgY29uc3QgaSA9IFgoYSksIGMgPSBhd2FpdCBobihyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgaSk7XG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihpLCBjKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlOiBpLCBlcnJvckNvZGU6IGMsIGVycm9yOiBhIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ID0gITEsIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgY2EoKTtcbiAgICB9XG4gIH07XG59LCB5ZSA9IChlKSA9PiBhc3luYyAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gQShcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgbyA9IFgociksIGEgPSBhd2FpdCBobih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgbyk7XG4gICAgcmV0dXJuIG4oYSwgbywgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IG8sIGVycm9yQ29kZTogYSwgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IG8sIGVycm9yQ29kZTogYSwgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBBID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgRHQgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBEdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIG8gaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIG8pICYmIChyW29dID0gbltvXSk7XG4gIH0sIER0KGUsIHQpO1xufTtcbmZ1bmN0aW9uIGdlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgRHQoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIGxhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gbyhhKSB7XG4gICAgcmV0dXJuIGEgaW5zdGFuY2VvZiByID8gYSA6IG5ldyByKGZ1bmN0aW9uKGkpIHtcbiAgICAgIGkoYSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihhLCBpKSB7XG4gICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIGkoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgaSh5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICBwLmRvbmUgPyBhKHAudmFsdWUpIDogbyhwLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gS3IoZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChhWzBdICYgMSkgdGhyb3cgYVsxXTtcbiAgICByZXR1cm4gYVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgYSwgaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGkubmV4dCA9IGMoMCksIGkudGhyb3cgPSBjKDEpLCBpLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGk7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gbChbdSwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBpICYmIChpID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBvICYmIChhID0gdVswXSAmIDIgPyBvLnJldHVybiA6IHVbMF0gPyBvLnRocm93IHx8ICgoYSA9IG8ucmV0dXJuKSAmJiBhLmNhbGwobyksIDApIDogby5uZXh0KSAmJiAhKGEgPSBhLmNhbGwobywgdVsxXSkpLmRvbmUpIHJldHVybiBhO1xuICAgICAgc3dpdGNoIChvID0gMCwgYSAmJiAodSA9IFt1WzBdICYgMiwgYS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgbyA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoYSA9IHIudHJ5cywgIShhID0gYS5sZW5ndGggPiAwICYmIGFbYS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghYSB8fCB1WzFdID4gYVswXSAmJiB1WzFdIDwgYVszXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBhWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gYVsxXSwgYSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEgJiYgci5sYWJlbCA8IGFbMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBhWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFbMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgdSA9IFs2LCBwXSwgbyA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBhID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gT2UoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHl0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIGk7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgaSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufVxuZnVuY3Rpb24gZnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBNZShlKTtcbn1cbmZ1bmN0aW9uIHVhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBvLCBhID0gW107XG4gIHJldHVybiBvID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBpKSwgb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbztcbiAgZnVuY3Rpb24gaShtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZikudGhlbihtLCB5KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgZikge1xuICAgIG5bbV0gJiYgKG9bbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odiwgRSkge1xuICAgICAgICBhLnB1c2goW20sIGgsIHYsIEVdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIGYgJiYgKG9bbV0gPSBmKG9bbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCBmKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXShmKSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhhWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIE1lID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLCB5KSA6IF8oYVswXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gcChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24geShtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgZikge1xuICAgIG0oZiksIGEuc2hpZnQoKSwgYS5sZW5ndGggJiYgbChhWzBdWzBdLCBhWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gZGEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIE9lID09IFwiZnVuY3Rpb25cIiA/IE9lKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4oYSkge1xuICAgIHJbYV0gPSBlW2FdICYmIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIGkgPSBlW2FdKGkpLCBvKGMsIGwsIGkuZG9uZSwgaS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG8oYSwgaSwgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGEoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBpKTtcbiAgfVxufVxuZnVuY3Rpb24gJChlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiB2dChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIGt0ID0gdnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBvKSB7XG4gICAgICByZXR1cm4gbyArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gaHQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIG90ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIG8sIGE7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBpID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGkpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGkpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gT2UoaSksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGkucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIHAgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmICgkKHApKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHAoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIGEgPSBoIGluc3RhbmNlb2Yga3QgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIHkgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKHkpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IE9lKHkpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGYgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY3IoZik7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIGEgPSBhID8/IFtdLCBoIGluc3RhbmNlb2Yga3QgPyBhID0gZnQoZnQoW10sIHl0KGEpKSwgeXQoaC5lcnJvcnMpKSA6IGEucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKG8gPSBfLnJldHVybikgJiYgby5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhKVxuICAgICAgICB0aHJvdyBuZXcga3QoYSk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgY3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGh0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgaHQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBXciA9IG90LkVNUFRZO1xuZnVuY3Rpb24gUXIoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIG90IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmICQoZS5yZW1vdmUpICYmICQoZS5hZGQpICYmICQoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBjcihlKSB7XG4gICQoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgWHIgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgZW4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBmdChbZSwgdF0sIHl0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIHRuKGUpIHtcbiAgZW4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxyKCkge1xufVxuZnVuY3Rpb24gZHQoZSkge1xuICBlKCk7XG59XG52YXIgVnQgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBRcihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0geWEsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIHJldHVybiBuZXcgT3Qociwgbiwgbyk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KG90KSwgcGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEF0KGUsIHQpIHtcbiAgcmV0dXJuIHBhLmNhbGwoZSwgdCk7XG59XG52YXIgX2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgY3Qobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBjdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBjdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBjdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgT3QgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIG8pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBpO1xuICAgIGlmICgkKHIpIHx8ICFyKVxuICAgICAgaSA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IG8gPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBhICYmIFhyLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgaSA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIEF0KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIEF0KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBBdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBpID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSBuZXcgX2EoaSksIGE7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFZ0KTtcbmZ1bmN0aW9uIGN0KGUpIHtcbiAgdG4oZSk7XG59XG5mdW5jdGlvbiBtYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIgeWEgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGxyLFxuICBlcnJvcjogbWEsXG4gIGNvbXBsZXRlOiBsclxufSwgcXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBmYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gaGEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBmYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgbykge1xuICAgICAgcmV0dXJuIG8obik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgbWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLCBhID0gd2EodCkgPyB0IDogbmV3IE90KHQsIHIsIG4pO1xuICAgIHJldHVybiBkdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gbywgYyA9IGkub3BlcmF0b3IsIGwgPSBpLnNvdXJjZTtcbiAgICAgIGEuYWRkKGMgPyBjLmNhbGwoYSwgbCkgOiBsID8gby5fc3Vic2NyaWJlKGEpIDogby5fdHJ5U3Vic2NyaWJlKGEpKTtcbiAgICB9KSwgYTtcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSB1cihyKSwgbmV3IHIoZnVuY3Rpb24obywgYSkge1xuICAgICAgdmFyIGkgPSBuZXcgT3Qoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgYShsKSwgaS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGEsXG4gICAgICAgIGNvbXBsZXRlOiBvXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGkpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbcXRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gaGEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSB1cih0KSwgbmV3IHQoZnVuY3Rpb24obiwgbykge1xuICAgICAgdmFyIGE7XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihpKSB7XG4gICAgICAgIHJldHVybiBhID0gaTtcbiAgICAgIH0sIGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIG8oaSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4oYSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gdXIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBYci5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgJChlLm5leHQpICYmICQoZS5lcnJvcikgJiYgJChlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIHdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFZ0IHx8IGdhKGUpICYmIFFyKGUpO1xufVxuZnVuY3Rpb24gdmEoZSkge1xuICByZXR1cm4gJChlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gYmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmICh2YSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gRWEoZSwgdCwgciwgbiwgbykge1xuICByZXR1cm4gbmV3IFBhKGUsIHQsIHIsIG4sIG8pO1xufVxudmFyIFBhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBvLCBhLCBpLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gaSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgci5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gYSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEodSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHIuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBvID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFZ0KSwgU2EgPSB2dChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHJuID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IGRyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgU2EoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbywgYTtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gT2Uobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGkubmV4dCgpOyAhYy5kb25lOyBjID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBvID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKGEgPSBpLnJldHVybikgJiYgYS5jYWxsKGkpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGR0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgbyA9IG4ub2JzZXJ2ZXJzOyBvLmxlbmd0aDsgKVxuICAgICAgICAgIG8uc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gdGhpcywgYSA9IG8uaGFzRXJyb3IsIGkgPSBvLmlzU3RvcHBlZCwgYyA9IG8ub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBhIHx8IGkgPyBXciA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBvdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGh0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gbi5oYXNFcnJvciwgYSA9IG4udGhyb3duRXJyb3IsIGkgPSBuLmlzU3RvcHBlZDtcbiAgICBvID8gci5lcnJvcihhKSA6IGkgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBtZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgZHIociwgbik7XG4gIH0sIHQ7XG59KG1lKSwgZHIgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLmRlc3RpbmF0aW9uID0gciwgby5zb3VyY2UgPSBuLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCB8fCBvLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgfHwgby5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIHJldHVybiAobyA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogV3I7XG4gIH0sIHQ7XG59KHJuKSwgQ2EgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIGthID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0ob3QpLCBwciA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgZnQoW2UsIHRdLCB5dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIEFhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gby5zY2hlZHVsZXIgPSByLCBvLndvcmsgPSBuLCBvLnBlbmRpbmcgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG87XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBhID0gdGhpcy5pZCwgaSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBhICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGksIGEsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKG8gPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChpLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgcmV0dXJuIG8gPT09IHZvaWQgMCAmJiAobyA9IDApLCBwci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIG8pO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0gMCksIG8gIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBvICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgcHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgbyA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gbztcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG8gPSAhMSwgYTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgIG8gPSAhMCwgYSA9IGkgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBhO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIG8gPSByLnNjaGVkdWxlciwgYSA9IG8uYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBodChhLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChvLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oa2EpLCBfciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IENhLm5vdywgZTtcbn0oKSwgSWEgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBfci5ub3cpO1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uYWN0aW9ucyA9IFtdLCBvLl9hY3RpdmUgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbztcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKG8gPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIG8pIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IG87XG4gICAgfVxuICB9LCB0O1xufShfciksIFRhID0gbmV3IElhKEFhKSwgUmEgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBOYShlKSB7XG4gIHJldHVybiAkKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBGYShlKSB7XG4gIHJldHVybiAkKGVbcXRdKTtcbn1cbmZ1bmN0aW9uIE1hKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmICQoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gTGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIERhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIE9hID0gRGEoKTtcbmZ1bmN0aW9uIFVhKGUpIHtcbiAgcmV0dXJuICQoZSA9PSBudWxsID8gdm9pZCAwIDogZVtPYV0pO1xufVxuZnVuY3Rpb24gamEoZSkge1xuICByZXR1cm4gdWEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgbywgYTtcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24oaSkge1xuICAgICAgc3dpdGNoIChpLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgaS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBpLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgTWUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gaS5zZW50KCksIG8gPSBuLnZhbHVlLCBhID0gbi5kb25lLCBhID8gWzQsIE1lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBpLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIE1lKG8pXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgaS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGkuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHhhKGUpIHtcbiAgcmV0dXJuICQoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gJGEoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIG1lKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKEZhKGUpKVxuICAgICAgcmV0dXJuIEdhKGUpO1xuICAgIGlmIChSYShlKSlcbiAgICAgIHJldHVybiBWYShlKTtcbiAgICBpZiAoTmEoZSkpXG4gICAgICByZXR1cm4gcWEoZSk7XG4gICAgaWYgKE1hKGUpKVxuICAgICAgcmV0dXJuIG5uKGUpO1xuICAgIGlmIChVYShlKSlcbiAgICAgIHJldHVybiB6YShlKTtcbiAgICBpZiAoeGEoZSkpXG4gICAgICByZXR1cm4gSGEoZSk7XG4gIH1cbiAgdGhyb3cgTGEoZSk7XG59XG5mdW5jdGlvbiBHYShlKSB7XG4gIHJldHVybiBuZXcgbWUoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtxdF0oKTtcbiAgICBpZiAoJChyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFZhKGUpIHtcbiAgcmV0dXJuIG5ldyBtZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcWEoZSkge1xuICByZXR1cm4gbmV3IG1lKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIHRuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6YShlKSB7XG4gIHJldHVybiBuZXcgbWUoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBvID0gT2UoZSksIGEgPSBvLm5leHQoKTsgIWEuZG9uZTsgYSA9IG8ubmV4dCgpKSB7XG4gICAgICAgIHZhciBpID0gYS52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChpKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5uKGUpIHtcbiAgcmV0dXJuIG5ldyBtZShmdW5jdGlvbih0KSB7XG4gICAgQmEoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbm4oamEoZSkpO1xufVxuZnVuY3Rpb24gQmEoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYTtcbiAgcmV0dXJuIGxhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgaSwgYztcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IGRhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGkgPSBuLnZhbHVlLCB0Lm5leHQoaSksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIG8gPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChhID0gci5yZXR1cm4pID8gWzQsIGEuY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWWEoZSwgdCwgciwgbiwgbykge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgbyA9PT0gdm9pZCAwICYmIChvID0gITEpO1xuICB2YXIgYSA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBvID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQoYSksICFvKVxuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gSmEoZSwgdCkge1xuICB2YXIgciA9ICQoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIG8uZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBtZShuKTtcbn1cbnZhciBaYSA9IHZ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIEthKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbyA9ICExLCBhO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgYSA9IGksIG8gPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbyA/IHIoYSkgOiBuKG5ldyBaYSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBXYShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgUWEgPSB2dChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWGEoZSwgdCkge1xuICB2YXIgciA9IFdhKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIG8gPSByLmVhY2gsIGEgPSByLndpdGgsIGkgPSBhID09PSB2b2lkIDAgPyBlcyA6IGEsIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IFRhIDogYywgdSA9IHIubWV0YSwgcCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIG8gPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBiYShmdW5jdGlvbih5LCBfKSB7XG4gICAgdmFyIG0sIGYsIGggPSBudWxsLCB2ID0gMCwgRSA9IGZ1bmN0aW9uKFApIHtcbiAgICAgIGYgPSBZYShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksICRhKGkoe1xuICAgICAgICAgICAgbWV0YTogcCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IHZcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgXy5lcnJvcihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgUCk7XG4gICAgfTtcbiAgICBtID0geS5zdWJzY3JpYmUoRWEoXywgZnVuY3Rpb24oUCkge1xuICAgICAgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgdisrLCBfLm5leHQoaCA9IFApLCBvID4gMCAmJiBFKG8pO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIGYgIT0gbnVsbCAmJiBmLmNsb3NlZCB8fCBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICF2ICYmIEUobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBvKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlcyhlKSB7XG4gIHRocm93IG5ldyBRYShlKTtcbn1cbmNsYXNzIFplIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGJ0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gSmEoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEthKHRoaXMuX3N1YmplY3QucGlwZShYYShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBybigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBtciA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKSwgdHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn0sIHJzID0gKGUpID0+IHRzW2VdLCBJdCA9IHt9LCBvbiA9IGFzeW5jIChlKSA9PiB7XG4gIGlmIChJdFtlXSlcbiAgICByZXR1cm4gSXRbZV07XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGUpKS50aGVuKChuKSA9PiBuLmpzb24oKSksIHIgPSBtci5wYXJzZSh0LmVudmlyb25tZW50KTtcbiAgICByZXR1cm4gSXRbZV0gPSByLCByO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbXIuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5mdW5jdGlvbiBidChlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7ZX1gKTtcbn1cbmNvbnN0IEV0ID0gKGUsIHQpID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFtyXSkgPT4gIXQuaW5jbHVkZXMocikpKSwgaiA9ICgpID0+IHtcbiAgaWYgKCEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSlcbiAgICByZXR1cm4gd2luZG93O1xufSwgVXQgPSBuZXcgWmUoKSwgeXIgPSBcIm9wX21ldHJpY3NfcXVldWVcIiwgbnMgPSAzLCBvcyA9IDMsIGFzID0gMWUzLCB7IGxvZ19fOiBsdCB9ID0gQShcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDAsIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbHQoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIiksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSwgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGx0KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKSwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCksICh0ID0gaigpKSA9PSBudWxsIHx8IHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQodCwgciwgbikge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBldmVudE5hbWU6IHQsXG4gICAgICBwcm9wZXJ0aWVzOiByIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IG4gfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gby50aW1lc3RhbXAsIHRoaXMucXVldWUucHVzaChvKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSwgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0gKHIgPSAodCA9IGooKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHQubG9jYWxTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogci5nZXRJdGVtKHlyKTtcbiAgICAgIG4gJiYgKHRoaXMucXVldWUgPSBKU09OLnBhcnNlKG4pKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHZhciB0O1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQubG9jYWxTdG9yYWdlLnNldEl0ZW0oeXIsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCB0ID0gaigpO1xuICAgIHQgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSB0LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIGFzKSk7XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIHZhciB0O1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ICYmICgodCA9IGooKSkgPT0gbnVsbCB8fCB0LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCksIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCksIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITE7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgICFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwIHx8ICh0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICEwLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHQgPSBVdC5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghdCkge1xuICAgICAgbHQoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMucXVldWUuc2xpY2UoMCwgb3MpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0ge1xuICAgICAgICBldmVudHM6IHIubWFwKChjKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGMuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogdC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAuLi5jLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogYy5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBjLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBjLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBjLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmMucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBvID0gcnModC5lbnZpcm9ubWVudCksIGEgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgbyk7XG4gICAgICAoYXdhaXQgZmV0Y2goYS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuKVxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHIubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgIGx0KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBuKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2godCkge1xuICAgIHQuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCByID0gdC5maWx0ZXIoKG4pID0+IG4uYXR0ZW1wdENvdW50IDwgbnMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi5yLCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciB0LCByO1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHp0ID0gbmV3IHNzKCksIGcgPSAoZSwgdCwgcikgPT4ge1xuICB6dC5hZGRFdmVudChlLCB0LCByKTtcbn0sIGlzID0gKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0sIGFuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFgoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHNuID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBYKGUuZXJyb3IpO1xuICBnKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogKHIgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogci5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAobiA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBuLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIGNzID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBqKCkpID09IG51bGwgfHwgZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc24pLCAodCA9IGooKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgYW4pO1xufSwgbHMgPSAoKSA9PiB7XG4gIHZhciBlLCB0O1xuICAoZSA9IGooKSkgPT0gbnVsbCB8fCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzbiksICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBhbik7XG59O1xudmFyIExyO1xuKExyID0gaigpKSA9PSBudWxsIHx8IExyLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY29uc3QgdXMgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KSwgZHMgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSksIHBzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgUHQgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCByID0gMDsgciA8IDEwOyByKyspXG4gICAgZnIoKSB8fCBhd2FpdCBTdCg1MDApO1xuICBpZiAoIWZyKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgX3MgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgUHQoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHIuZWxlbWVudHModCksXG4gICAgc3RyaXBlOiByXG4gIH07XG59LCBtcyA9IGFzeW5jIChlLCB0LCByLCBuLCBvKSA9PiB7XG4gIGNvbnN0IGEgPSBhd2FpdCBQdChlKSwgaSA9IHBzW3IudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gYS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHQsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIFN0ID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIHNldFRpbWVvdXQodCwgZSk7XG59KSwgZnIgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgeXMgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgdChuKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICByKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByKG4pO1xuICB9XG59KSwgZnMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBQdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgdC5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gdC5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBocyA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBvLCBhLCBpLCBjO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IFB0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAobyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBvLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHIuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKGEgPSByLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXNzYWdlKSA/PyAoKGMgPSAoaSA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBpLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn07XG52YXIgZ3MgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PSBcIm9iamVjdFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmID09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiID8gZ2xvYmFsIDoge30sIFNlID0gXCIxLjkuMFwiLCBociA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbmZ1bmN0aW9uIHdzKGUpIHtcbiAgdmFyIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbZV0pLCByID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbiA9IGUubWF0Y2goaHIpO1xuICBpZiAoIW4pXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH07XG4gIHZhciBvID0ge1xuICAgIG1ham9yOiArblsxXSxcbiAgICBtaW5vcjogK25bMl0sXG4gICAgcGF0Y2g6ICtuWzNdLFxuICAgIHByZXJlbGVhc2U6IG5bNF1cbiAgfTtcbiAgaWYgKG8ucHJlcmVsZWFzZSAhPSBudWxsKVxuICAgIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gbCA9PT0gZTtcbiAgICB9O1xuICBmdW5jdGlvbiBhKGMpIHtcbiAgICByZXR1cm4gci5hZGQoYyksICExO1xuICB9XG4gIGZ1bmN0aW9uIGkoYykge1xuICAgIHJldHVybiB0LmFkZChjKSwgITA7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICBpZiAodC5oYXMobCkpXG4gICAgICByZXR1cm4gITA7XG4gICAgaWYgKHIuaGFzKGwpKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciB1ID0gbC5tYXRjaChocik7XG4gICAgaWYgKCF1KVxuICAgICAgcmV0dXJuIGEobCk7XG4gICAgdmFyIHAgPSB7XG4gICAgICBtYWpvcjogK3VbMV0sXG4gICAgICBtaW5vcjogK3VbMl0sXG4gICAgICBwYXRjaDogK3VbM10sXG4gICAgICBwcmVyZWxlYXNlOiB1WzRdXG4gICAgfTtcbiAgICByZXR1cm4gcC5wcmVyZWxlYXNlICE9IG51bGwgfHwgby5tYWpvciAhPT0gcC5tYWpvciA/IGEobCkgOiBvLm1ham9yID09PSAwID8gby5taW5vciA9PT0gcC5taW5vciAmJiBvLnBhdGNoIDw9IHAucGF0Y2ggPyBpKGwpIDogYShsKSA6IG8ubWlub3IgPD0gcC5taW5vciA/IGkobCkgOiBhKGwpO1xuICB9O1xufVxudmFyIHZzID0gd3MoU2UpLCBicyA9IFNlLnNwbGl0KFwiLlwiKVswXSwgWGUgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBicyksIGV0ID0gZ3M7XG5mdW5jdGlvbiBIdChlLCB0LCByLCBuKSB7XG4gIHZhciBvO1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMSk7XG4gIHZhciBhID0gZXRbWGVdID0gKG8gPSBldFtYZV0pICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB7XG4gICAgdmVyc2lvbjogU2VcbiAgfTtcbiAgaWYgKCFuICYmIGFbZV0pIHtcbiAgICB2YXIgaSA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIGUpO1xuICAgIHJldHVybiByLmVycm9yKGkuc3RhY2sgfHwgaS5tZXNzYWdlKSwgITE7XG4gIH1cbiAgaWYgKGEudmVyc2lvbiAhPT0gU2UpIHtcbiAgICB2YXIgaSA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYS52ZXJzaW9uICsgXCIgZm9yIFwiICsgZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgU2UpO1xuICAgIHJldHVybiByLmVycm9yKGkuc3RhY2sgfHwgaS5tZXNzYWdlKSwgITE7XG4gIH1cbiAgcmV0dXJuIGFbZV0gPSB0LCByLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBTZSArIFwiLlwiKSwgITA7XG59XG5mdW5jdGlvbiB0dChlKSB7XG4gIHZhciB0LCByLCBuID0gKHQgPSBldFtYZV0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmVyc2lvbjtcbiAgaWYgKCEoIW4gfHwgIXZzKG4pKSlcbiAgICByZXR1cm4gKHIgPSBldFtYZV0pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJbZV07XG59XG5mdW5jdGlvbiBCdChlLCB0KSB7XG4gIHQuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFNlICsgXCIuXCIpO1xuICB2YXIgciA9IGV0W1hlXTtcbiAgciAmJiBkZWxldGUgcltlXTtcbn1cbnZhciBFcyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIGk7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgaSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgUHMgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgU3MgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2UgPSB0Lm5hbWVzcGFjZSB8fCBcIkRpYWdDb21wb25lbnRMb2dnZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwiZGVidWdcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImVycm9yXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImluZm9cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwid2FyblwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gemUoXCJ2ZXJib3NlXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gemUoZSwgdCwgcikge1xuICB2YXIgbiA9IHR0KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBQcyhbXSwgRXMociksICExKSk7XG59XG52YXIgWjtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLkVSUk9SID0gMzBdID0gXCJFUlJPUlwiLCBlW2UuV0FSTiA9IDUwXSA9IFwiV0FSTlwiLCBlW2UuSU5GTyA9IDYwXSA9IFwiSU5GT1wiLCBlW2UuREVCVUcgPSA3MF0gPSBcIkRFQlVHXCIsIGVbZS5WRVJCT1NFID0gODBdID0gXCJWRVJCT1NFXCIsIGVbZS5BTEwgPSA5OTk5XSA9IFwiQUxMXCI7XG59KShaIHx8IChaID0ge30pKTtcbmZ1bmN0aW9uIENzKGUsIHQpIHtcbiAgZSA8IFouTk9ORSA/IGUgPSBaLk5PTkUgOiBlID4gWi5BTEwgJiYgKGUgPSBaLkFMTCksIHQgPSB0IHx8IHt9O1xuICBmdW5jdGlvbiByKG4sIG8pIHtcbiAgICB2YXIgYSA9IHRbbl07XG4gICAgcmV0dXJuIHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIiAmJiBlID49IG8gPyBhLmJpbmQodCkgOiBmdW5jdGlvbigpIHtcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHIoXCJlcnJvclwiLCBaLkVSUk9SKSxcbiAgICB3YXJuOiByKFwid2FyblwiLCBaLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIFouSU5GTyksXG4gICAgZGVidWc6IHIoXCJkZWJ1Z1wiLCBaLkRFQlVHKSxcbiAgICB2ZXJib3NlOiByKFwidmVyYm9zZVwiLCBaLlZFUkJPU0UpXG4gIH07XG59XG52YXIga3MgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgYSA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGEucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGkgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn0sIEFzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIElzID0gXCJkaWFnXCIsIGd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICBmdW5jdGlvbiB0KG8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBhW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIHZhciBjID0gdHQoXCJkaWFnXCIpO1xuICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgcmV0dXJuIGNbb10uYXBwbHkoYywgQXMoW10sIGtzKGEpLCAhMSkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gZnVuY3Rpb24obywgYSkge1xuICAgICAgICB2YXIgaSwgYywgbDtcbiAgICAgICAgaWYgKGEgPT09IHZvaWQgMCAmJiAoYSA9IHsgbG9nTGV2ZWw6IFouSU5GTyB9KSwgbyA9PT0gcikge1xuICAgICAgICAgIHZhciB1ID0gbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gci5lcnJvcigoaSA9IHUuc3RhY2spICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB1Lm1lc3NhZ2UpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgYSA9PSBcIm51bWJlclwiICYmIChhID0ge1xuICAgICAgICAgIGxvZ0xldmVsOiBhXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcCA9IHR0KFwiZGlhZ1wiKSwgeSA9IENzKChjID0gYS5sb2dMZXZlbCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IFouSU5GTywgbyk7XG4gICAgICAgIGlmIChwICYmICFhLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIF8gPSAobCA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgcC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgXyksIHkud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIF8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBIdChcImRpYWdcIiwgeSwgciwgITApO1xuICAgICAgfTtcbiAgICAgIHIuc2V0TG9nZ2VyID0gbiwgci5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIEJ0KElzLCByKTtcbiAgICAgIH0sIHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24obykge1xuICAgICAgICByZXR1cm4gbmV3IFNzKG8pO1xuICAgICAgfSwgci52ZXJib3NlID0gdChcInZlcmJvc2VcIiksIHIuZGVidWcgPSB0KFwiZGVidWdcIiksIHIuaW5mbyA9IHQoXCJpbmZvXCIpLCByLndhcm4gPSB0KFwid2FyblwiKSwgci5lcnJvciA9IHQoXCJlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuaW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gVHMoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBScyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICByLl9jdXJyZW50Q29udGV4dCA9IHQgPyBuZXcgTWFwKHQpIDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgci5nZXRWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHIuX2N1cnJlbnRDb250ZXh0LmdldChuKTtcbiAgICAgIH0sIHIuc2V0VmFsdWUgPSBmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIHZhciBhID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gYS5fY3VycmVudENvbnRleHQuc2V0KG4sIG8pLCBhO1xuICAgICAgfSwgci5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5kZWxldGUobiksIG87XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCBOcyA9IG5ldyBScygpLCBGcyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIGk7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgaSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgTXMgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgTHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE5zO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBvID0gW10sIGEgPSAzOyBhIDwgYXJndW1lbnRzLmxlbmd0aDsgYSsrKVxuICAgICAgICBvW2EgLSAzXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgTXMoW25dLCBGcyhvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KClcbiksIERzID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGEgPSBbXSwgaTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBhLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBpID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59LCBPcyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGE7IG4gPCBvOyBuKyspXG4gICAgKGEgfHwgIShuIGluIHQpKSAmJiAoYSB8fCAoYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgYVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoYSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBUdCA9IFwiY29udGV4dFwiLCBVcyA9IG5ldyBMcygpLCBZdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBIdChUdCwgdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbywgYSA9IFtdLCBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgYVtpIC0gM10gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KG8sIE9zKFt0LCByLCBuXSwgRHMoYSksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdHQoVHQpIHx8IFVzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpLCBCdChUdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBqdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoanQgfHwgKGp0ID0ge30pKTtcbnZhciBjbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBsbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwganMgPSB7XG4gIHRyYWNlSWQ6IGxuLFxuICBzcGFuSWQ6IGNuLFxuICB0cmFjZUZsYWdzOiBqdC5OT05FXG59LCBLZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGpzKSwgdGhpcy5fc3BhbkNvbnRleHQgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgSnQgPSBUcyhcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtcbmZ1bmN0aW9uIFp0KGUpIHtcbiAgcmV0dXJuIGUuZ2V0VmFsdWUoSnQpIHx8IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHhzKCkge1xuICByZXR1cm4gWnQoWXQuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5mdW5jdGlvbiBLdChlLCB0KSB7XG4gIHJldHVybiBlLnNldFZhbHVlKEp0LCB0KTtcbn1cbmZ1bmN0aW9uICRzKGUpIHtcbiAgcmV0dXJuIGUuZGVsZXRlVmFsdWUoSnQpO1xufVxuZnVuY3Rpb24gR3MoZSwgdCkge1xuICByZXR1cm4gS3QoZSwgbmV3IEtlKHQpKTtcbn1cbmZ1bmN0aW9uIHVuKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IFp0KGUpKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnNwYW5Db250ZXh0KCk7XG59XG52YXIgVnMgPSAvXihbMC05YS1mXXszMn0pJC9pLCBxcyA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24genMoZSkge1xuICByZXR1cm4gVnMudGVzdChlKSAmJiBlICE9PSBsbjtcbn1cbmZ1bmN0aW9uIEhzKGUpIHtcbiAgcmV0dXJuIHFzLnRlc3QoZSkgJiYgZSAhPT0gY247XG59XG5mdW5jdGlvbiBkbihlKSB7XG4gIHJldHVybiB6cyhlLnRyYWNlSWQpICYmIEhzKGUuc3BhbklkKTtcbn1cbmZ1bmN0aW9uIEJzKGUpIHtcbiAgcmV0dXJuIG5ldyBLZShlKTtcbn1cbnZhciBSdCA9IFl0LmdldEluc3RhbmNlKCksIHBuID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBSdC5hY3RpdmUoKSk7XG4gICAgICB2YXIgbyA9ICEhKHIgIT0gbnVsbCAmJiByLnJvb3QpO1xuICAgICAgaWYgKG8pXG4gICAgICAgIHJldHVybiBuZXcgS2UoKTtcbiAgICAgIHZhciBhID0gbiAmJiB1bihuKTtcbiAgICAgIHJldHVybiBZcyhhKSAmJiBkbihhKSA/IG5ldyBLZShhKSA6IG5ldyBLZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhLCBpLCBjO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBjID0gciA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAoYSA9IHIsIGMgPSBuKSA6IChhID0gciwgaSA9IG4sIGMgPSBvKTtcbiAgICAgICAgdmFyIGwgPSBpID8/IFJ0LmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgYSwgbCksIHAgPSBLdChsLCB1KTtcbiAgICAgICAgcmV0dXJuIFJ0LndpdGgocCwgYywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZcyhlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUZsYWdzID09IFwibnVtYmVyXCI7XG59XG52YXIgSnMgPSBuZXcgcG4oKSwgWnMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBvKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IG87XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhLnN0YXJ0QWN0aXZlU3BhbiwgYSwgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IEpzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgS3MgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiBuZXcgcG4oKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFdzID0gbmV3IEtzKCksIGdyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIodCwgciwgbikpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBuZXcgWnModGhpcywgdCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICh0ID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBXcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRlID0gdDtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG8uZ2V0VHJhY2VyKHQsIHIsIG4pO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgcnQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuSU5URVJOQUwgPSAwXSA9IFwiSU5URVJOQUxcIiwgZVtlLlNFUlZFUiA9IDFdID0gXCJTRVJWRVJcIiwgZVtlLkNMSUVOVCA9IDJdID0gXCJDTElFTlRcIiwgZVtlLlBST0RVQ0VSID0gM10gPSBcIlBST0RVQ0VSXCIsIGVbZS5DT05TVU1FUiA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkocnQgfHwgKHJ0ID0ge30pKTtcbnZhciBoZTtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5VTlNFVCA9IDBdID0gXCJVTlNFVFwiLCBlW2UuT0sgPSAxXSA9IFwiT0tcIiwgZVtlLkVSUk9SID0gMl0gPSBcIkVSUk9SXCI7XG59KShoZSB8fCAoaGUgPSB7fSkpO1xudmFyIExlID0gWXQuZ2V0SW5zdGFuY2UoKSwgTnQgPSBcInRyYWNlXCIsIFFzID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IGdyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gQnMsIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gZG4sIHRoaXMuZGVsZXRlU3BhbiA9ICRzLCB0aGlzLmdldFNwYW4gPSBadCwgdGhpcy5nZXRBY3RpdmVTcGFuID0geHMsIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSB1biwgdGhpcy5zZXRTcGFuID0gS3QsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBHcztcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IEh0KE50LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBndC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0dChOdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBCdChOdCwgZ3QuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgZ3IoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFVlID0gUXMuZ2V0SW5zdGFuY2UoKTtcbmNvbnN0IFhzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG8gPSBMZS5hY3RpdmUoKSwgYSA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9cbiAgKTtcbiAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihvLCBhKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIGEuc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIGk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgdGhyb3cgYS5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBoZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogaSBpbnN0YW5jZW9mIEVycm9yID8gaS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCB1dCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gTGUuYWN0aXZlKCksIG8gPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIGE7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBpID0gYSBpbnN0YW5jZW9mIEVycm9yID8gYS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBpXG4gICAgfSksIGE7XG4gIH0gZmluYWxseSB7XG4gICAgby5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIF9uIGV4dGVuZHMgcm8ge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBYcyhlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgbyA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKHRpKG8pKVxuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgLi4ub1xuICAgIH0pLCBuZXcgX24obyk7XG4gIGlmICghZWkobywgcikpIHtcbiAgICBjb25zdCBhID0gci5zYWZlUGFyc2Uobyk7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgbyksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLm9cbiAgfSksIG87XG59KSwgZWkgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgdGkgPSAoZSkgPT4gRm8uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIHJpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgenIpLCBOID0gYXN5bmMgKGUpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEhyKSwgd2UgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIEpyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBtbiA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIEJvLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgbmkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IHEoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBKcik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCBWID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIE5vLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIG9pID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIEJyLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIGFpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBSbyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgc2kgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgcmkoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgbyA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoby5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke28uc2l6ZX1gKTtcbiAgY29uc3QgYSA9IG8udmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGkgPSBzYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBhLFxuICAgIGFtb3VudEF0b206IGlcbiAgfTtcbn0sIGZlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBzaShlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBvLmFtb3VudEF0b20sIGN1cnJlbmN5OiBvLmN1cnJlbmN5IH07XG4gIH1cbn0sIHluID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBxKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgQW8pXG4gICAgKVxuICApO1xufSwgd3IgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICBRZSxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIGlpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgQnIsIFwic2V0dXBfY2hlY2tvdXRcIiksIFd0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgUWUsIFwicGVyZm9ybV9jaGVja291dFwiKSwgZm4gPSAxZTMsIGNpID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBmbixcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgbyA9IGF3YWl0IHEobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIElvKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgbyksIG87XG59LCBDdCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBKbyxcbiAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4pLCBobiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBxKFxuICAgICAgZSxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiB0IH0gfSxcbiAgICAgIFlvXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAocikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIFgocikpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufSwgbGkgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogdCB9IH0sXG4gIFpvXG4pLCB1aSA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgZGkgPSAoZSwgdCkgPT4gISFlICYmIHQsIGduID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB3biA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgV2UgPSAzMiwgcGkgPSAxNiwgdm4gPSAxMCwgdnIgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgQ2U7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShDZSB8fCAoQ2UgPSB7fSkpO1xuY2xhc3MgSGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHQsIHIpIHtcbiAgICBzdXBlcihgJHtyfSAoJHt0fSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gdDtcbiAgfVxufVxuZnVuY3Rpb24gX2koZSkge1xuICBsZXQgdCA9IE1hdGguZmxvb3IoZSgpICogV2UpO1xuICByZXR1cm4gdCA9PT0gV2UgJiYgKHQgPSBXZSAtIDEpLCB3bi5jaGFyQXQodCk7XG59XG5mdW5jdGlvbiBtaShlKSB7XG4gIGNvbnN0IHQgPSB5aSgpLCByID0gdCAmJiAodC5jcnlwdG8gfHwgdC5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gci5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IEhlKENlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIHlpKCkge1xuICByZXR1cm4gZ2koKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBmaShlLCB0KSB7XG4gIGxldCByID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgciA9IF9pKHQpICsgcjtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBoaShlLCB0ID0gdm4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBIZShDZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiB2cilcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7dnJ9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHIsIG4gPSBcIlwiO1xuICBmb3IgKGxldCBvID0gdDsgbyA+IDA7IG8tLSlcbiAgICByID0gZSAlIFdlLCBuID0gd24uY2hhckF0KHIpICsgbiwgZSA9IChlIC0gcikgLyBXZTtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBnaSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIHdpKGUsIHQpIHtcbiAgY29uc3QgciA9IG1pKCksIG4gPSBEYXRlLm5vdygpO1xuICByZXR1cm4gaGkobiwgdm4pICsgZmkocGksIHIpO1xufVxuY29uc3QgYm4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgRW4gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoYm4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCB0ID0gd2koKTtcbiAgcmV0dXJuIHZpKHQpLCB0O1xufSwgdmkgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke2JufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHt0LnRvVVRDU3RyaW5nKCl9YDtcbn0sIGJpID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG8gPSBPci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W29dID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFtvXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIFkgPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChvLCBhKSA9PiB7XG4gIGNvbnN0IGkgPSBhLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgaWYgKCFpKSByZXR1cm4gbztcbiAgY29uc3QgYyA9IGEudHlwZSA9PT0gXCJjaGVja2JveFwiID8gYS5jaGVja2VkIDogYS52YWx1ZTtcbiAgcmV0dXJuIHsgLi4ubywgW2ldOiBjIH07XG59LCB7fSksIEVpID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU28ucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCB0KSwgdDtcbiAgfVxufSwgUGkgPSBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgUG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke1BpfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGEgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGEgfTtcbn07XG5mdW5jdGlvbiBTaShlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBhd2FpdCBjaShlLCByKTtcbiAgICAgIGEgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoYSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgZm4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIENpKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogRC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBhdChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gUG4odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGEgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgaSA9IFNpKG4uaWZyYW1lLCBhLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBDaSh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogaSxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBTbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBhdChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRC5TVUNDRVNTICYmIGJ0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwga2kgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBDbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IEEoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgaSkgPT4ge1xuICAgIGNvbnN0IGMgPSBraShlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBhaSh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGEoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKFgodSkpLCBjbGVhckludGVydmFsKGwpLCBpKFgodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogQWksIGVycl9fOiBRdCB9ID0gQShcImFpcndhbGxleC1jY1wiKSwgSWkgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KSwgVGkgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gSWkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBRdChuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBrbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBSaSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gQWkoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IFF0KHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7WCh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBBbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBUaSh0KSwgbiA9IGF3YWl0IFNuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIG8gPSBSaShuLmhyZWYgPz8gXCJcIiksIGEgPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoYSAhPT0gbykge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7b30pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHthfSkuYDtcbiAgICB0aHJvdyBRdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBvLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgSW4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFRuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgTyA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbk8uRW51bS5zdHJpcGU7XG5jb25zdCBSbiA9ICh7XG4gIHNjcmlwdElkOiBlLFxuICBzcmM6IHQsXG4gIGNoZWNrTG9hZGVkRm46IHJcbn0pID0+IHtcbiAgY29uc3QgbiA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBhKSA9PiB7XG4gICAgbGV0IGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIGkuc3JjID0gdCwgaS5pZCA9IGUsIGkuYXN5bmMgPSAhMDtcbiAgICBjb25zdCBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgcigpID8gbygpIDogYyA/IGkgPSBjIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSwgaS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgbygpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKSwgaS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59LCBYdCA9ICgpID0+IFJuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBlciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBvID0gdC5zaGlwcGluZ0NvbnRhY3QsIGEgPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBvKSB7XG4gICAgYVtkLkVNQUlMXSA9IGFbZC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgYVtkLkNPVU5UUlldID0gYVtkLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgYVtkLlpJUF9DT0RFXSA9IGFbZC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGkgPSBhW2QuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IGFbZC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgaSB8fCBjID8gKGFbZC5GSVJTVF9OQU1FXSA9IGksIGFbZC5MQVNUX05BTUVdID0gYykgOiAoYVtkLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBhW2QuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBhO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBOaSA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgZ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIEZpID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgbyA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBpID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBvLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBpXG4gICAgfVxuICB9O1xufSwgdHIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBvLCB0b3RhbDogYSB9ID0gRmkoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBpID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBvLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBhLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBOaSh7XG4gICAgICB0b3RhbDogYSxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBpID0ge1xuICAgIC4uLmksXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KGkpXG4gIH0gOiBpID0geyAuLi5pLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIGk7XG59LCBNaSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgb2UgPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbZC5MSU5FMV0sXG4gIGxpbmUyOiBlW2QuTElORTJdLFxuICBsaW5lMzogZVtkLkxJTkUzXSxcbiAgY2l0eTogZVtkLkNJVFldLFxuICBzdGF0ZTogZVtkLlNUQVRFXSxcbiAgY291bnRyeTogZVtkLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtkLlpJUF9DT0RFXVxufSksIGFlID0gKGUsIHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmUxOiBlW2QuU0hJUFBJTkdfTElORTFdLFxuICAgICAgbGluZTI6IGVbZC5TSElQUElOR19MSU5FMl0sXG4gICAgICBsaW5lMzogZVtkLlNISVBQSU5HX0xJTkUzXSxcbiAgICAgIGNpdHk6IGVbZC5TSElQUElOR19DSVRZXSxcbiAgICAgIHN0YXRlOiBlW2QuU0hJUFBJTkdfU1RBVEVdLFxuICAgICAgY291bnRyeTogZVtkLlNISVBQSU5HX0NPVU5UUlldLFxuICAgICAgemlwX2NvZGU6IGVbZC5TSElQUElOR19aSVBfQ09ERV1cbiAgICB9O1xufSwgeyBsb2dfXzogRWwsIGVycl9fOiBObiB9ID0gQShcImNvbW1vblwiKSwgc3QgPSAoZSkgPT4ge1xuICBpZiAoZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IGUucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCBHID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gdC5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBObihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCBlKSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiB0LnBhcnNlKHIpO1xufSwgcnIgPSAoZSwgdCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiBlLmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShlKSxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKGUsIHQpXG59KSwgQWUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBBKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IE4oZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHN0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IG9pKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBObihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgdChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBvZShlLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFd0KGUuYW55Q2RlQ29ubmVjdGlvbiwgbykgfTtcbiAgfVxufSwgTGkgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pLCBEaSA9IHouZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogamUsIGVycl9fOiBudCB9ID0gQShcImFkeWVuLWNjXCIpLCBPaSA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IExpLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KSwgRm4gPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFVpID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IE9pLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbnQoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcihGbik7XG4gIHJldHVybiB0LmRhdGE7XG59LCBqaSA9IChlKSA9PiBKU09OLnBhcnNlKGUpLCBiciA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCB4aSA9IGFzeW5jICgpID0+IHtcbiAgamUoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIGJyKCkgfHwgYXdhaXQgU3QoNTAwKTtcbiAgaWYgKCFicigpKVxuICAgIHRocm93IG50KFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcihGbik7XG4gIHJldHVybiBqZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sICRpID0gKGUpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiB0LCBsb2NhbGU6IHIsIGNvdW50cnlDb2RlOiBuLCBjb21wb25lbnQ6IG8sIGhvc3Q6IGEsIGNhbmNlbEJ1dHRvbjogaSB9ID0gZSwgYyA9IGppKHRbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gamUoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgamUoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgaS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgXyksIGEucmVtb3ZlKCk7XG4gICAgfSwgcCA9IChmKSA9PiB7XG4gICAgICBudChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBmKSwgbCh7IHN0YXR1czogRC5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIHkgPSAoZikgPT4ge1xuICAgICAgbnQoXCJBZHllbiBlcnJvcjpcIiwgZiksIGwoeyBzdGF0dXM6IEQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogRC5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKTtcbiAgICBjb25zdCBtID0gKGYsIGgsIHYpID0+IHtcbiAgICAgIGEucmVtb3ZlKCksIGwoeyBzdGF0dXM6IEQuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IGYsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICB4aSgpLnRoZW4oXG4gICAgICAoZikgPT4gZih7XG4gICAgICAgIGNsaWVudEtleTogdFtcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiB0W1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogcixcbiAgICAgICAgY291bnRyeUNvZGU6IG4sXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IG0sXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogcCxcbiAgICAgICAgb25FcnJvcjogeVxuICAgICAgfSlcbiAgICApLnRoZW4oKGYpID0+IHtcbiAgICAgIGYuY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChvKTtcbiAgICB9KTtcbiAgfSk7XG59LCBHaSA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgciA9IGUgPz8gdCwgbiA9IERpLnNhZmVQYXJzZShyKTtcbiAgcmV0dXJuIG4uc3VjY2VzcyA/IChqZShgUmVzb2x2ZWQgbG9jYWxlOiAke24uZGF0YX1gKSwgbi5kYXRhKSA6IChudChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7cn0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBNbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgTG4gPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gVWkodCksIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBvLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBhLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogYyB9ID0gUG4oXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGkucmVwbGFjZVdpdGgobyk7XG4gIGNvbnN0IGwgPSBhd2FpdCAkaSh7XG4gICAgaGVhZGVyczogbixcbiAgICBsb2NhbGU6IEdpKHIpLFxuICAgIGNvdW50cnlDb2RlOiBlLFxuICAgIGNvbXBvbmVudDogbyxcbiAgICBob3N0OiBhLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IEQuU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gamUoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBidChsLnN0YXR1cyk7XG59LCBEbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBPbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzogVmksIGVycl9fOiBxaSB9ID0gQShcImNvbW1vbi1jY1wiKSwgemkgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlOiBlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzOiB0LFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzczogcixcbiAgcGF5bWVudF9tZXRob2Q6IG5cbn0pID0+IHtcbiAgY29uc3QgbyA9IHt9O1xuICByZXR1cm4gbiA9PT0gXCJhY2hcIiAmJiAob1tkLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgb1tkLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pKSwgZSAmJiAob1tkLlpJUF9DT0RFXSA9IEMpLCB0ICYmIChvW2QuTElORTFdID0gQywgb1tkLkNJVFldID0gQywgb1tkLlNUQVRFXSA9IEMsIG9bZC5DT1VOVFJZXSA9IEMsIG9bZC5aSVBfQ09ERV0gPSBDKSwgciAmJiAob1tkLlNISVBQSU5HX0xJTkUxXSA9IEMsIG9bZC5TSElQUElOR19DSVRZXSA9IEMsIG9bZC5TSElQUElOR19TVEFURV0gPSBDLCBvW2QuU0hJUFBJTkdfQ09VTlRSWV0gPSBDLCBvW2QuU0hJUFBJTkdfWklQX0NPREVdID0gQyksIE9iamVjdC5rZXlzKG8pLmxlbmd0aCA9PT0gMCA/IERlIDogRGUuZXh0ZW5kKG8pO1xufSwgSGkgPSAoZSwgdCwgciA9IHt9KSA9PiB7XG4gIGlmIChyKSB7XG4gICAgVmkoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIGNvbnN0IGEgPSBPYmplY3Qua2V5cyhyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSBhW2ldLCBsID0gcltjXTtcbiAgICAgIGVbY10gfHwgKGVbY10gPSBsKTtcbiAgICB9XG4gIH1cbiAgZVtkLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gPSAhIWVbZC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddLCBlW2QuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSAmJiAoZVtkLlNISVBQSU5HX0xJTkUxXSA9IGVbZC5MSU5FMV0sIGVbZC5TSElQUElOR19MSU5FMl0gPSBlW2QuTElORTJdLCBlW2QuU0hJUFBJTkdfTElORTNdID0gZVtkLkxJTkUzXSwgZVtkLlNISVBQSU5HX0NJVFldID0gZVtkLkNJVFldLCBlW2QuU0hJUFBJTkdfU1RBVEVdID0gZVtkLlNUQVRFXSwgZVtkLlNISVBQSU5HX0NPVU5UUlldID0gZVtkLkNPVU5UUlldLCBlW2QuU0hJUFBJTkdfWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSk7XG4gIGNvbnN0IG8gPSB6aShyKS5zYWZlUGFyc2UoZSk7XG4gIGlmICghby5zdWNjZXNzKSB7XG4gICAgY29uc3QgYSA9IG8uZXJyb3IuZm9ybWF0KCksIGkgPSBiaShhKSwgYyA9IE9iamVjdC5rZXlzKGkpO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgYy5sZW5ndGg7IGwrKykge1xuICAgICAgY29uc3QgdSA9IGNbbF0sIHAgPSBpW3VdO1xuICAgICAgdCh1LCBwLCB1KTtcbiAgICB9XG4gICAgdGhyb3cgcWkoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBpKSwgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gby5kYXRhO1xufSwgeyBsb2dfXzogQmksIGVycl9fOiBZaSB9ID0gQShcImNvbW1vbi1jY1wiKSwgSyA9IEhpLCBVbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBvID0geHIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW8uc3VjY2VzcylcbiAgICAgICAgICBZaShgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGEgPSBvLmRhdGE7XG4gICAgICAgICAgdChhLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBCaShgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogSmkgfSA9IEEoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gWmkoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgQ3QodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEtpKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgYSA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgbyksIGkgPSBLKFxuICAgICAgYSxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5pXG4gICAgfSksIGF3YWl0IHdlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGlbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogaVtkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogaVtkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UoaSksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoXG4gICAgICAgIGksXG4gICAgICAgIHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGJyb3dzZXJfaW5mbzogUW4oKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoby50b2tlbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChKaShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpLCAhKChuID0gKHIgPSBjLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHUgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodSksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogaSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGMsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IEJlLCBlcnJfXzogam4gfSA9IEEoXCJhZHllbi1hcHBsZS1wYXlcIiksIFdpID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIERuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoQmUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gQmUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChCZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gQmUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTihpKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUoaSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFkeWVuQXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBqbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIFFpID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgYSA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBEbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSwgaW5pdGlhbFByZXZpZXc6IGMgfSA9IG4sIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBOKGwpLCBwID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSB0cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IChmID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBfID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgbSA9IHtcbiAgICAgIHNlc3Npb246IF8sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogcCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG8sXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBFdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBjb25zdCBFID0gKCkgPT4ge1xuICAgICAgICBCZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFppKFAsIG0pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgdihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgUCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi55LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oUCk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgS2koUCwgbSk7XG4gICAgICAgICAgaChTKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIHYoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25jYW5jZWwgPSBFLCBfLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgR2UgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogbyxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgcHJlZmlsbDogaVxufSkgPT4ge1xuICB2YXIgeSwgXztcbiAgY29uc3QgYyA9ICgoeSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogeS5hbW91bnRBdG9tKSA/PyAobyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jdXJyZW5jeSkgPz8gby5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IGkuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogYSAhPSBudWxsICYmIGEucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBhICE9IG51bGwgJiYgYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBhLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4ucCwgLi4uYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdChwKSB9IDogeyAuLi5wLCAuLi5hLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBwO1xufSwgbnIgPSAoKSA9PiBSbih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBGdCA9IG51bGw7XG5jb25zdCBvciA9IGFzeW5jIChlKSA9PiBhd2FpdCBvbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBWZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBvcihlKTtcbiAgcmV0dXJuIEZ0ID09PSBudWxsICYmIChGdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIEZ0O1xufSwgeG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gJHIucGFyc2UodCkgOiBudWxsO1xufSwgYXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgYSwgaSwgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKGkgPSAoYSA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBhLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBpLmJpbGxpbmdBZGRyZXNzLCBvID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLnBdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHkgPSBwLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW2QuRU1BSUxdID0gcltkLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltkLkxJTkUxXSA9IHJbZC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW2QuTElORTJdID0gcltkLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbZC5MSU5FM10gPSByW2QuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltkLkNJVFldID0gcltkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltkLlNUQVRFXSA9IHJbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltkLkNPVU5UUlldID0gcltkLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IF8gPSByW2QuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBtID0gcltkLkxBU1RfTkFNRV0gfHwgeSB8fCBcIlwiO1xuICAgIF8gfHwgbSA/IChyW2QuRklSU1RfTkFNRV0gPSBfLCByW2QuTEFTVF9OQU1FXSA9IG0pIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gbyAmJiAocltkLlNISVBQSU5HX0xJTkUxXSA9IHJbZC5TSElQUElOR19MSU5FMV0gfHwgby5hZGRyZXNzMSB8fCBcIlwiLCByW2QuU0hJUFBJTkdfTElORTJdID0gcltkLlNISVBQSU5HX0xJTkUyXSB8fCBvLmFkZHJlc3MyIHx8IFwiXCIsIHJbZC5TSElQUElOR19MSU5FM10gPSByW2QuU0hJUFBJTkdfTElORTNdIHx8IG8uYWRkcmVzczMgfHwgXCJcIiwgcltkLlNISVBQSU5HX0NJVFldID0gcltkLlNISVBQSU5HX0NJVFldIHx8IG8ubG9jYWxpdHkgfHwgXCJcIiwgcltkLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbZC5TSElQUElOR19aSVBfQ09ERV0gfHwgby5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltkLlNISVBQSU5HX1NUQVRFXSA9IHJbZC5TSElQUElOR19TVEFURV0gfHwgby5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltkLlNISVBQSU5HX0NPVU5UUlldID0gcltkLlNISVBQSU5HX0NPVU5UUlldIHx8IG8uY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IG5lLCBlcnJfXzogUmUgfSA9IEEoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBYaSA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgeSwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBPbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgbmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChuZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKF8gPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBSZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IG9yKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIG5lKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBOKGkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gR2Uoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBWZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBuZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBSZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBSZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKChmID09IG51bGwgPyB2b2lkIDAgOiBmLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBlYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCB2LCBFLCBQLCBTLCBULCBMO1xuICAgIG5lKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgT24pLCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBvLCBsID0gYS5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHAgPSBhd2FpdCBOKHUpLCB5ID0gR2Uoe1xuICAgICAgcHJlZmlsbDogcCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogYS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEV0KHAsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBfID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgayA9IGF3YWl0IF8ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgbmUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBrKTtcbiAgICAgIGNvbnN0IEYgPSBhcihyLCBrKSwgSiA9IEsoXG4gICAgICAgIEYsXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmIChnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uSlxuICAgICAgfSksICEoKGYgPSAobSA9IGsucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBpZSA9IGF3YWl0IHdlKHUsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogSltkLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IEpbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogSltkLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShKKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKEosIHAuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgYmUgPSB4bihpZSk7XG4gICAgICBuZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIGJlKTtcbiAgICAgIGxldCB6ID0gYXdhaXQgVih1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IFFuKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAodiA9IChoID0gay5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbmUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB6KTtcbiAgICAgIGxldCBfZSA9IChQID0gKEUgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IEVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBQLmlkO1xuICAgICAgY29uc3QgVGUgPSAoUyA9IHoucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKChxZSkgPT4gcWUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoVGUgJiYgVGUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIG5lKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgVGUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogcWUgfSA9IGF3YWl0IGF0KHtcbiAgICAgICAgICB1cmw6IFRlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cWV9XWApLCBxZSA9PT0gRC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChxZSA9PT0gRC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFRlICYmICFfZSAmJiAoeiA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBUZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgbmUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgeiksIF9lID0gKEwgPSAoVCA9IHoucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogVFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEwuaWQpLCAhX2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEFlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogSixcbiAgICAgICAgY29uZmlybVJlc3VsdDogeixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaykge1xuICAgICAgdGhyb3cgUmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgayksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjoga1xuICAgICAgfSksIG5ldyBFcnJvcigoayA9PSBudWxsID8gdm9pZCAwIDogay5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBJZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBwdCB9ID0gQShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiB0YyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBDdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiByYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBwdChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYXQoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAocHQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IFYodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwdChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gbmMoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYSwgaTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gZXIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IEsoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IHdlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UodSksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoXG4gICAgICAgIHUsXG4gICAgICAgIHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghXylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IG0gPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHB0KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbSk7XG4gICAgbGV0IGYgPSAobiA9IChyID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZDtcbiAgICBjb25zdCBoID0gKG8gPSBtLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmluZChcbiAgICAgIChFKSA9PiBFLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoaCAhPSBudWxsICYmIGgucmVkaXJlY3RfdXJsICYmIGguY29uc2VudF9pZCAmJiBoLnRoZWlyX3BtX2lkICYmIChtID0gYXdhaXQgcmMoaCwgdCksIGYgPSAoaSA9IChhID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBhWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZCksICFmKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh2KSwgQWUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IG0sXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IFllLCBlcnJfXzogJG4gfSA9IEEoXCJhd3gtYXBwbGUtcGF5XCIpLCBvYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChZZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBZZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKFllKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBZZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBOKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFIuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAkbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBhYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IGEgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihsKSwgcCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gdHIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGEubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogRXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgdikgPT4ge1xuICAgICAgY29uc3QgRSA9ICgpID0+IHtcbiAgICAgICAgWWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSBFLCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChQKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGMoUCwgbSk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICB2KFMpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBQID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnkudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihQKTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChQKSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBuYyhQLCBtKTtcbiAgICAgICAgICBoKFMpO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgdihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyAkbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IFEsIGVycl9fOiBOZSB9ID0gQShcImF3eC1nb29nbGUtcGF5XCIpLCBzYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgeSwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIFEoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChRKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgbnIoKSwgISgoXyA9ICh5ID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIE5lKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgb3IoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBOZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgUShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTihpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbSA9IEdlKHtcbiAgICAgICAgcHJlZmlsbDogYyxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG8ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogby5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBmID0gYXdhaXQgVmUoZS5iYXNlVXJsLCBtKSwgeyByZXN1bHQ6IGggfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KG0pO1xuICAgICAgaWYgKCFoKVxuICAgICAgICByZXR1cm4gUShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBOZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgTmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIGljID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIGYsIGgsIHYsIEUsIFAsIFM7XG4gICAgUShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFRuKSwgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gbywgbCA9IGEubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgTih1KSwgeSA9IEdlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBhLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogRXQocCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBWZShlLmJhc2VVcmwsIHkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBUID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoeSk7XG4gICAgICBRKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgVCk7XG4gICAgICBjb25zdCBMID0gYXIociwgVCksIGsgPSBLKFxuICAgICAgICBMLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBRKFwiX19fXCIsIGspLCBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ua1xuICAgICAgfSk7XG4gICAgICBjb25zdCBGID0gKGYgPSAobSA9IFQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuO1xuICAgICAgaWYgKCFGKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IEogPSBhd2FpdCB3ZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGtbZC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBrW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGtbZC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UoayksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShrLCBwLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEllKClcbiAgICAgIH0pLCB2ZSA9IHhuKEopO1xuICAgICAgUShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHZlKTtcbiAgICAgIGxldCBpZSA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHZlID09IG51bGwgPyB2b2lkIDAgOiB2ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBGXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFEoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSk7XG4gICAgICBsZXQgYmUgPSAodiA9IChoID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQ7XG4gICAgICBjb25zdCB6ID0gKEUgPSBpZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBFLmZpbmQoXG4gICAgICAgIChfZSkgPT4gX2UudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoeiAmJiB6LnJlZGlyZWN0X3VybCkge1xuICAgICAgICBRKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgeik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBfZSB9ID0gYXdhaXQgYXQoe1xuICAgICAgICAgIHVybDogei5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoUShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7X2V9XWApLCBfZSA9PT0gRC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChfZSA9PT0gRC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHogJiYgIWJlICYmIChpZSA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiB6LnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB6LmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIFEoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSksIGJlID0gKFMgPSAoUCA9IGllLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IFBbMF0pID09IG51bGwgPyB2b2lkIDAgOiBTLmlkKSwgIWJlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBrLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBpZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoVCkge1xuICAgICAgdGhyb3cgTmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgVCksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogVFxuICAgICAgfSksIG5ldyBFcnJvcigoVCA9PSBudWxsID8gdm9pZCAwIDogVC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBHbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFZuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBjYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBDdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGxjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgYSA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgbyksIGkgPSBLKGEsIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uaVxuICAgIH0pLCBhd2FpdCB3ZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBpW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGlbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGlbZC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKGkpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKFxuICAgICAgICBpLFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShvLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgVih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChuID0gKHIgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocCksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBpLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChhKSwgbztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogX3QsIGVycl9fOiBxbiB9ID0gQShcImF1dGhuZXQtYXBwbGVwYXlcIiksIHVjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR24pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChfdChcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBfdChcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKCFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gX3QoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTihpKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUoaSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogX1xuICAgICAgICB9KSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IE8uRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIGRjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogYSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSB9ID0gbiwgYyA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBHbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBOKGwpLCBwID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSB0cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIF90KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjYyhFLCBtKTtcbiAgICAgICAgfSBjYXRjaCAoUCkge1xuICAgICAgICAgIHYoUCk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IEUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oRSk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBQID0gYXdhaXQgbGMoRSwgbSk7XG4gICAgICAgICAgaChQKTtcbiAgICAgICAgfSBjYXRjaCAoUCkge1xuICAgICAgICAgIHYoUCk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgcW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBQZSwgZXJyX186IEplIH0gPSBBKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIHBjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBwLCB5O1xuICAgIFBlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBWbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgUGUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gSmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChQZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKHkgPSAocCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBwLnBheW1lbnRzKSAhPSBudWxsICYmIHkuYXBpKSlcbiAgICAgIHJldHVybiBKZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgUGUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE4oYSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBHZSh7XG4gICAgICAgIHByZWZpbGw6IGksXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IFZlKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiBmIH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICghZilcbiAgICAgICAgcmV0dXJuIFBlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIEplKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBpLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IGZlKGEsIGkudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgUi5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBKZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBPLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBfYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCB2O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgfSA9IG8sIGwgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVm4pLm1ldGFkYXRhLCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgTih1KSwgeSA9IEdlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiByLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogcCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGlcbiAgICB9KTtcbiAgICBjb25zdCBfID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgRSA9IGF3YWl0IF8ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgUGUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBFKTtcbiAgICAgIGNvbnN0IFAgPSBhcih0LCBFKSwgUyA9IEsoUCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLlNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgVCA9IChmID0gKG0gPSBFLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBMID0gYXdhaXQgd2UodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBTW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogU1tkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBTW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKFMpLFxuICAgICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoUywgcC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgICB9KTtcbiAgICAgIFBlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEwpO1xuICAgICAgY29uc3QgayA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShUKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgodiA9IChoID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEFlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBTLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICB0aHJvdyBKZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBFKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBFXG4gICAgICB9KSwgbmV3IEVycm9yKChFID09IG51bGwgPyB2b2lkIDAgOiBFLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IG1jLCBlcnJfXzogem4gfSA9IEEoXCJwb2NreXQtY2NcIiksIHljID0gei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSksIGZjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHljLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgem4obiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgSG4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIG1jKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyB6bihyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke1godCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgeHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBoYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBnYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBmYyh0KSwgbiA9IGF3YWl0IFNuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBIbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogRXIgfSA9IEEoXCJzdHJpcGUtY2NcIiksIHdjID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSksIEJuID0gYXN5bmMgKGUpID0+IHtcbiAgZyhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLmVcbiAgfSksIEVyKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke2UuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBocyhlKSwgZyhcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIEVyKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgdmMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gd2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogdC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiB0LmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59LCBiYyA9IDQsIHsgbG9nX186IGtlLCBlcnJfXzogJHQgfSA9IEEoXCJ1bmlmaWVkLWNjXCIpLCBFYyA9IGFzeW5jICh7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiBvXG59KSA9PiB7XG4gIGtlKFwi4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgTihhKTtcbiAga2UoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7aS5tb2RlfV1gKTtcbiAgY29uc3QgYyA9IEsociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpbiB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBsb2dzXG4gICAgICBkZXZpY2VUb2tlbjogRW4oKVxuICAgIH0sXG4gICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITAsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGkuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IG8ucGF5bWVudFJvdXRlSWRcbiAgfTtcbiAgJHQobywgbCksIGtlKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHUgPSBhd2FpdCB5bihvLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgfSk7XG4gIFVuKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgcCA9IGF3YWl0IG1uKGEsIGwpO1xuICBpZiAoa2UoXCLilJwgc3RhcnRQZiByZXN1bHRcIiwgcCksIHAuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICByZXR1cm4gWW4oaS5tb2RlLCBwKTtcbiAgaWYgKCFwLmNoZWNrb3V0X2F0dGVtcHRfaWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgcmV0dXJuIFBjKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIHByZWZpbGw6IGksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbCxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHAsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IHAuY2hlY2tvdXRfYXR0ZW1wdF9pZFxuICB9KTtcbn0sIFBjID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQ6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBuLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBvLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IGEsXG4gICAgc3RhcnRQZlJlc3VsdDogaSxcbiAgICBjaGVja291dEF0dGVtcHRJZDogY1xuICB9ID0gZTtcbiAgbGV0IGwgPSBpO1xuICBmb3IgKGxldCB1ID0gMDsgdSA8IGJjOyB1KyspIHtcbiAgICBrZShg4pScIFJ1bm5pbmcgY29uZmlybSBsb29wIGl0ZXJhdGlvbiAke3V9YCk7XG4gICAgY29uc3QgeyB1c2VyQWN0aW9uOiBwIH0gPSBrYyhsKSwgeSA9IGF3YWl0IFNjKHQuYmFzZVVybCwgcCwgciwgbik7XG4gICAgaWYgKG8uZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAuLi5vLmV4dHJhX21ldGFkYXRhLFxuICAgICAgLi4ueS5tZXRhZGF0YUZvckNvbmZpcm1TdGVwXG4gICAgfSwga2UoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIG8uZXh0cmFfbWV0YWRhdGEpLCBsID0gYXdhaXQgVihhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBvLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIGtlKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBZbihyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIFNjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBCbih2Yyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoa24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgQW4oZSwgdCkgfSB9O1xuICAgIGlmIChNbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IExuKFxuICAgICAgICBuW2QuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoQ2ModCkpXG4gICAgICByZXR1cm4gYXdhaXQgWm4oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgQ2MgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBKbihbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBrYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBLby5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyAkdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgJHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBZbiA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogSSwgZXJyX186IFByIH0gPSBBKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBBYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmO1xuICAgIEkoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgTihhKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi50LFxuICAgICAgcHJlZmlsbDogaVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSAoKG0gPSBpLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncykgPT0gbnVsbCA/IHZvaWQgMCA6IG0udW5pZmllZF9jYykgPz8gMDtcbiAgICBJKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQoYyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGwgPSBNYXRoLnJhbmRvbSgpLCB1ID0gbCA8IGMsIHAgPSB7XG4gICAgICByb2xsOiBsLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBjLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gSShg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgcCksIEVjKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IG8sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgSShg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHApLCBJKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2kubW9kZX1dYCk7XG4gICAgY29uc3QgeSA9IEsoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBpLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnlcbiAgICB9KTtcbiAgICBjb25zdCBfID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogeSxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICExLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogby5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgSShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCB5bihvLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChVbihoLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGkubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIEkoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7aS50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHYgPSBhd2FpdCBpaShhLCBfKTtcbiAgICAgICAgcmV0dXJuIEkoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHt2LnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdiB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgSShg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHYgPSBhd2FpdCB3cihhLCBfKTtcbiAgICAgICAgcmV0dXJuIEkoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHYgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBpZiAoaCBpbnN0YW5jZW9mIF9uICYmIGgub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgSShcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIEkoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgaC5yZXNwb25zZS5oZWFkZXJzKSwgZyhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgLi4udCxcbiAgICAgICAgICAuLi5oLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHYgPSBoLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgIFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiB2ICYmIChfLmV4aXN0aW5nX2NjX3BtX2lkID0gdltcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCJdLCBJKGDilJwgRXhpc3RpbmcgQ0MgUE0gSUQ6ICR7Xy5leGlzdGluZ19jY19wbV9pZH1gKSk7XG4gICAgICAgIGNvbnN0IEUgPSBoYyhoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoRSkge1xuICAgICAgICAgIEkoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IGdjKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IEY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBJKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEYgPSBhd2FpdCBBbihlLmJhc2VVcmwsIGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSBGO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNbihoLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgSShcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IExuKFxuICAgICAgICAgICAgcltkLkNPVU5UUlldLFxuICAgICAgICAgICAgaC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgaS5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSBGO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFQgPSBhd2FpdCBtbihhLCBfKTtcbiAgICAgICAgSShcIuKUnCBTdGFydCBwYXltZW50IGZsb3cgcmVzdWx0OlwiLCBUKTtcbiAgICAgICAgY29uc3QgTCA9ICgoZiA9IGgucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IGZbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIEUgPyBJKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBMID8gKEkoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCBCbihJYyhUKSkpIDogKEkoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBabihULCBlLmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgayA9IFQuY2NfcG1faWQ7XG4gICAgICAgIGlmIChpLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIEkoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7a31dYCk7XG4gICAgICAgICAgY29uc3QgRiA9IGF3YWl0IFYoYSwge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBpLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBJKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIEYpO1xuICAgICAgICAgIGNvbnN0IEogPSBzdChGKTtcbiAgICAgICAgICByZXR1cm4gSShg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0oucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBKIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgSShg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtMID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IEYgPSBhd2FpdCB3cihhLCB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGssXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBMXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEkoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IEYgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgUHIoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFByKGgpLCBoO1xuICAgIH1cbiAgfVxuKSwgSWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIHVzLnBhcnNlKHQpO1xufSwgVGMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl0sIEpuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUuZmluZCgocikgPT4gVGMuaW5jbHVkZXMoci50eXBlKSk7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFRvLnBhcnNlKHQpO1xufSwgWm4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gSm4oZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICBpZiAoci5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBJKFwi4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIiksIGcoXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIEkoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtyLnJlZGlyZWN0X3VybH1dYCksIGcoXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLnJcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzOiBuIH0gPSBhd2FpdCBhdCh7IHVybDogci5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHQgfSk7XG4gIGlmIChJKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gRC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgZyhcIjNkc19jYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobiA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IGcoXCIzZHNfZmFpbHVyZVwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGcoXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn0sIFJjID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogSCwgZXJyX186IE5jIH0gPSBBKFwibG9vcC1jcnlwdG9cIiksIEZjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIEgoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBHKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUmMpO1xuICAgIEgoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgSChcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGF3YWl0IE4oZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHIubW9kZSA9PT0gXCJzZXR1cFwiLCBvID0gYXdhaXQgQ3QoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgIH0pLCBhID0gYXdhaXQgZmUoXG4gICAgICBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICByLnRva2VuLFxuICAgICAgbixcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFuICYmICF0Lm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHIuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3IuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7dC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghbyB8fCAhby5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IGkgPSBvLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBjID0gaS5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IGkubWluX2F1dGhvcml6YXRpb25fYW1vdW50O1xuICAgIGNvbnN0IHUgPSBpLmFsbG93X2N1c3RvbWVyX3RvX2Nob29zZV9hdXRoO1xuICAgIGxldCBwO1xuICAgIG4gPyAocCA9IDAsIGMgPSBNYXRoLm1heChjLCBsKSkgOiAocCA9IChhID8gYS5hbW91bnRBdG9tIDogci5hbW91bnRfdG90YWxfYXRvbSkgKiBpLnRva2VuX3ByaWNlLCBsID0gTWF0aC5tYXgobCwgcCksIGMgPSBNYXRoLm1heChjLCBsKSk7XG4gICAgY29uc3QgeSA9IHAsIF8gPSB2NCgpLCBtID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogeSxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBjdXN0b21lclJlZklkOiBfLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudDogbCxcbiAgICAgIGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGg6IHVcbiAgICB9LCBmID0ge1xuICAgICAgYXBpS2V5OiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBtLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGZcbiAgICB9O1xuICB9XG4pLCBNYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIEgoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgSChcImNvbnRleHRcIiwgZSksIEgoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgdCksIEgoXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBIKFwiZmxvd0NhbGxiYWNrc1wiLCBuKSwgSChcImN1c3RvbVBhcmFtc1wiLCBvKTtcbiAgICBjb25zdCBhID0gYXdhaXQgTihlLmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIEgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBpID0gSyhcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGEuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYS5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBycihpLCBhLmNoZWNrb3V0X3NldHRpbmdzKSwgcCA9IGF3YWl0IHdlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgLi4udSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pO1xuICAgIGlmICghbylcbiAgICAgIHRocm93IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgY29uc3QgeSA9IGF3YWl0IFYoYywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgLy8gVE9ETzogV2UgZG9uJ3QgaGF2ZSBhIHBheWluIG9uIHNldHVwXG4gICAgICB0aGVpcl9wbV9pZDogby5zdWNjZXNzICYmIG8ubW9kZSA9PSBcImNoZWNrb3V0XCIgPyBvLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsID8gcC5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IG8uc3VjY2VzcyA/IG8uY3VzdG9tZXIgOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfcGF5aW46IG8uc3VjY2VzcyAmJiBvLm1vZGUgPT0gXCJjaGVja291dFwiID8gby5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IG8uc3VjY2VzcyA/IHZvaWQgMCA6IG8uZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogby5zdWNjZXNzID8gdm9pZCAwIDogby5kZWJ1Z0luZm8sXG4gICAgICAgIGxvb3Bfc3VjY2Vzczogby5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEgoYENvbmZpcm0gcmVzdWx0OiAke3l9YCksIGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBIKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCB5KTtcbiAgICAgIGNvbnN0IF8gPSBzdCh5KTtcbiAgICAgIHJldHVybiBIKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEgoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIXkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IE5jKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgeSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IHkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBFZSwgZXJyX186IExjIH0gPSBBKFwicGF5cGFsXCIpLCBLbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KSwgRGMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBLbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gUi5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIE9jID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIEVlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKGEpLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IG8uc2V0dGluZ3MgPz8ge307XG4gICAgICBFZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gS24ucGFyc2Uocik7XG4gICAgICBFZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBwID0gSyh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5jID8gTWkoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4uaS5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIHkgPSBycihwLCBpLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIEVlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtpLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgbSA9IGkubW9kZSAhPT0gXCJzZXR1cFwiLCBmID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogX1xuICAgICAgICB9LFxuICAgICAgICAuLi55XG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCB2ID0gYnRvYShKU09OLnN0cmluZ2lmeShmKSksIEUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IGkudG9rZW4sXG4gICAgICAgIHI6IHZcbiAgICAgIH0pLCBQID0gYCR7aH0/JHtFLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBFZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBQLCBhd2FpdCBTdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IENuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhLFxuICAgICAgICBfLFxuICAgICAgICBQXG4gICAgICApO1xuICAgICAgRWUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUyk7XG4gICAgICBjb25zdCBUID0geHQoUy5ocmVmLCBcImNhdHRcIiksIEwgPSB4dChTLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgayA9IGF3YWl0IFYoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBUIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IEwgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEVlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGspLCBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHAsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGssXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdGhyb3cgTGMoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBhKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBhIH0pLCBuZXcgRXJyb3IoKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogY2UsIGVycl9fOiBTciB9ID0gQShcInBvY2t5dC1wYXlwYWxcIiksIFduID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogei5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgVWMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IEcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFIucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBqYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBrLCBGO1xuICAgIGNlKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE4oYSk7XG4gICAgY2UoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBXbi5wYXJzZSh0KTtcbiAgICBjZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MsIHUgPSBLKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gcnIodSwgaS5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgY2UoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke2kubW9kZX1gKTtcbiAgICBjb25zdCB5ID0gdjQoKSwgXyA9IGkubW9kZSAhPT0gXCJzZXR1cFwiLCBtID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBfLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBfID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogaS5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChrID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncykgIT0gbnVsbCAmJiBrLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiB5XG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH0sIGYgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGggPSBidG9hKEpTT04uc3RyaW5naWZ5KG0pKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IGkudG9rZW4sXG4gICAgICByOiBoXG4gICAgfSksIEUgPSBgJHtmfT8ke3YudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoRiA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgRi51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBjZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBFLCBhd2FpdCBTdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGNlKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBjZShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBQID0gYXdhaXQgQ24oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgYSxcbiAgICAgIHksXG4gICAgICBFXG4gICAgKTtcbiAgICBjZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBQKTtcbiAgICBjb25zdCBTID0gSG4oUC5ocmVmKSwgVCA9IHh0KFAuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghVClcbiAgICAgIHRocm93IFNyKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBQLmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgY2UoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7U31gKTtcbiAgICBjb25zdCBMID0gYXdhaXQgVihhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogUyxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IF8gPyBUIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKGNlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEwpLCBpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEwucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgU3IoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBMKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIENyID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IHgsIGVycl9fOiB4YyB9ID0gQShcInN0cmlwZS1saW5rXCIpLCAkYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIEdjID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIFZjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB4KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRjKTtcbiAgICB4KFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgTihvKSwgaSA9IGEubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIHgoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGZlKG8sIGEudG9rZW4sIGksIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgX3Mobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICB4KFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBwID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgeSA9ICgpID0+IHtcbiAgICAgIHAubW91bnQoYCMke0NyfWApO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBwLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8geChcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoeChcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgeSgpKSwgcC5vbihcImNsaWNrXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICBpZiAoeChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgeChcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbS5yZXNvbHZlKCk7XG4gICAgfSksIHAub24oXCJjb25maXJtXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICB4KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBtKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBtLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZi5lcnJvciA/ICh4YyhcImVycm9yXCIsIGYuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoZi5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoeChcInBheW1lbnRNZXRob2RcIiwgZi5wYXltZW50TWV0aG9kKSwgUi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IGYucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IHksXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgSGMoQ3IpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgcWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB4KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKGEpO1xuICAgIHgoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSB6YyhyLCBvLnN0cmlwZVBNKSwgbCA9IEsoYywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubFxuICAgIH0pLCB4KFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCB3ZShhLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogby5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbFtkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBsW2QuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBsW2QuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShsKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShsLCBpLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfSk7XG4gICAgeChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCB5ID0gR2MucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHgoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IFYoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB5XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzdChfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB4KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBsW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBsW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IG9lKGwpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShsLCBpLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGxbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXdChhLCBfKSB9O1xuICAgIH1cbiAgfVxuKSwgemMgPSAoZSwgdCkgPT4ge1xuICB2YXIgbCwgdSwgcCwgeSwgXztcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4ub10gPSAoKHUgPSAobCA9IHQuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIGEgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcltkLkVNQUlMXSA9IHJbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChwID0gdC5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogcC5lbWFpbCkgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCAoKHkgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogeS5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCByW2QuQ09VTlRSWV0gPSByW2QuQ09VTlRSWV0gfHwgKChfID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBpID0gcltkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgYyA9IHJbZC5MQVNUX05BTUVdIHx8IGEgfHwgXCJcIjtcbiAgcmV0dXJuIGkgfHwgYyA/IChyW2QuRklSU1RfTkFNRV0gPSBpLCByW2QuTEFTVF9OQU1FXSA9IGMpIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKSwgeChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIEhjID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIG4gPyB0KG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpO1xuICB9O1xuICByKCk7XG59KSwgeyBsb2dfXzogQiwgZXJyX186IEJjIH0gPSBBKFwic3RyaXBlLXByXCIpLCBZYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIEpjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEIoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gRyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFljKTtcbiAgICBCKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBOKG4pLCBhID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQihcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBpID0gYXdhaXQgZmUobiwgby50b2tlbiwgYSwgdm9pZCAwKSwgYyA9IGF3YWl0IG1zKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpLmFtb3VudEF0b20sXG4gICAgICBpLmN1cnJlbmN5LFxuICAgICAgYVxuICAgICk7XG4gICAgQihcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBCYyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgQihcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKHAsIHkpID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBwLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiB5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBPLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogTy5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgWmMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgIGluaXRSZXN1bHQ6IGFcbiAgfSkgPT4ge1xuICAgIGlmIChCKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgby5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7by5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGEucHI7XG4gICAgaWYgKG8gIT0gbnVsbCAmJiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBCKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICBXYyhjLCBmLmFtb3VudCwgZi5wZW5kaW5nLCBoLCBmLmxhYmVsKTtcbiAgICB9XG4gICAgQihcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgeXMoYyk7XG4gICAgQihcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEIoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBLYyhyLCBsKSwgcCA9IEsodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ucFxuICAgIH0pLCBCKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgcCk7XG4gICAgY29uc3QgeSA9IGF3YWl0IG5pKGksIHtcbiAgICAgIGZpZWxkczogcCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdFxuICAgIH0pLCBfID0gUWMoeSk7XG4gICAgQihcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGZzKF8sIGwpO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBOKGkpO1xuICAgIGlmIChtLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgQihcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCBWKGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBzdChmKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBCKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogcFtkLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IHBbZC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogcFtkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogb2UocCksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKHAsIG0uY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogbS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogbS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFd0KGksIGYpIH07XG4gICAgfVxuICB9XG4pLCBLYyA9IChlLCB0KSA9PiB7XG4gIHZhciBwLCB5LCBfLCBtO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgoeSA9IChwID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBwLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuc3BsaXQoL1xccysvKSkgPz8gW10sIGEgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgaSA9IChtID0gKF8gPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBfLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW2QuRU1BSUxdID0gcltkLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW2QuQ09VTlRSWV0gPSByW2QuQ09VTlRSWV0gfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBsID0gcltkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbZC5MQVNUX05BTUVdIHx8IGEgfHwgXCJcIjtcbiAgcmV0dXJuIGwgfHwgdSA/IChyW2QuRklSU1RfTkFNRV0gPSBsLCByW2QuTEFTVF9OQU1FXSA9IHUpIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKSwgQihcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIFdjID0gKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBvID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBRYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBkcy5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBGZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigobykgPT4ge1xuICAgIGNvbnN0IGEgPSByID09PSB2b2lkIDAgPyAhMCA6IG8ucHJvY2Vzc29yX25hbWUgPT09IHIsIGkgPSBvLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBhICYmIGk7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBSID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IEFjXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IEpjLFxuICAgIHJ1bjogWmNcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IFZjLFxuICAgIHJ1bjogcWNcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IFVjLFxuICAgIHJ1bjogamNcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IERjLFxuICAgIHJ1bjogT2NcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IHNjLFxuICAgIHJ1bjogaWNcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBvYyxcbiAgICBydW46IGFjXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IEZjLFxuICAgIHJ1bjogTWNcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiB1YyxcbiAgICBydW46IGRjXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IHBjLFxuICAgIHJ1bjogX2NcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBYaSxcbiAgICBydW46IGVjXG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBXaSxcbiAgICBydW46IFFpXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiBYYywgZXJyX186IGVsIH0gPSBBKFwiaW5pdC1mbG93c1wiKSwgdGUgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IFplKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IG8gPSBhd2FpdCB0KG4pO1xuICAgICAgICBYYyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBvKSwgci5zZXQobyk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIGVsKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFgobyksIFwiRGV0YWlsczpcIiwgbyksIHIudGhyb3cobywgWChvKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgdGwgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgcmwgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogdGUoXCJTdHJpcGUgUFJcIiwgUi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogdGUoXCJTdHJpcGUgTGlua1wiLCBSLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB0ZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgUi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogdGUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgUi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiB0ZShcIkxvb3BcIiwgUi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB0ZShcIlBheVBhbFwiLCBSLnBheXBhbC5pbml0KSxcbiAgLy8gUG9ja3l0IFBheVBhbFxuICBwb2NreXRQYXlwYWw6IHRlKFwiUG9ja3l0IFBheVBhbFwiLCBSLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB0ZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB0ZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgUi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiB0ZShcIkFkeWVuIEdvb2dsZVBheVwiLCBSLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiB0ZShcIkFkeWVuIEFwcGxlUGF5XCIsIFIuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IG5sIH0gPSBBKFwiZm9ybS1jYWxsYmFja3NcIiksIHJlID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGtyID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiByZSxcbiAgb25CbHVyOiByZSxcbiAgb25DaGFuZ2U6IHJlLFxuICBvbkxvYWQ6IHJlLFxuICBvbkxvYWRFcnJvcjogcmUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiByZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IHJlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogcmUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcmUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogcmUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiByZVxufSksIGRlID0gY2xhc3MgZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBkZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IGFhKHIsIG4gPz8gZGUuTk9PUCwgbmwpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBvO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gZGUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbmRlLk5PT1AgPSAoKSA9PiB7XG59LCBkZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoa3Iua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IGRlLk5PT1A7XG4gIH0pLCB0O1xufSwgZGUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgZGUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKGtyLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQgR3QgPSBkZTtcbmZ1bmN0aW9uIG9sKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSBqKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChvKSA9PiBvLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobykgPT4gby5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIGFsKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IGooKTtcbiAgICAgICAgcmV0dXJuICgodCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBvID0gKG4gPSBqKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBhID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gYSA/IGEuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBzbCgpIHtcbiAgY29uc3QgZSA9IG9sKCksIHQgPSBhbChlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBRbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogITEsIG8gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgYSA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgaSA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChpID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGMgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogITAsXG4gICAgbGFuZ3VhZ2U6IGksXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogYyxcbiAgICB1c2VyX2FnZW50OiBvLFxuICAgIGFjY2VwdF9oZWFkZXI6IGFcbiAgfTtcbn07XG52YXIgVSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFwcGxlUGF5ID0gXCJhcHBsZS1wYXlcIiwgZS5nb29nbGVQYXkgPSBcImdvb2dsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZSkpKFUgfHwge30pO1xuei5uYXRpdmVFbnVtKFUpO1xuY29uc3QgaWwgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IE10LCBlcnJfXzogY2wgfSA9IEEoXCJ0cmFjZXJcIiksIGxsID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICB1bChlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgQXI7XG5jb25zdCB1bCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUM1RHJobFBULSF+ezAwM31+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogbywgV2ViVHJhY2VyUHJvdmlkZXI6IGEgfSA9IHIsIGkgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQXpRVDhwYjctIX57MDA2fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogYyB9ID0gaSwgbCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1ENnplWDFIai0hfnswMGJ9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gbCwgcCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DUzJtNDhidy0hfnswMGN9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogeSB9ID0gcCwgXyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1ERTRWUHlsZi0hfnswMGV9fi5qcycpLCB7IFJlc291cmNlOiBtIH0gPSBfLCBmID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtbjU5MTFTN2QtIX57MDBofX4uanMnKS50aGVuKChiZSkgPT4gYmUuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0gZiwgdiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CX3ZRcXdKai0hfnswMGt9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiBFIH0gPSB2LCBQID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUNlU1UtY3ZBLSF+ezAwbX1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBTLCBCM0luamVjdEVuY29kaW5nOiBUIH0gPSBQLCBMID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUR0MmJqZm5FLSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBrIH0gPSBMO1xuICBNdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IEYgPSBkbCh0KTtcbiAgTXQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtGfWApO1xuICBjb25zdCBKID0gbmV3IEUoeyB1cmw6IEYgfSksIHZlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IGEoe1xuICAgIHJlc291cmNlOiBuZXcgbSh2ZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IG8obmV3IG4oKSksXG4gICAgICBuZXcgayhKLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IFMoeyBpbmplY3RFbmNvZGluZzogVC5NVUxUSV9IRUFERVIgfSlcbiAgfSksIHkoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBjKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgQXIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBNdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgQXI7XG59LCBkbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn0sIElyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEFwcGxlUGF5LCBlLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBlLmFkeWVuQXBwbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgobykgPT4ge1xuICAgIGNvbnN0IGEgPSBvLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBhICE9IG51bGwgJiYgYS5pc0F2YWlsYWJsZSAmJiByLnB1c2goYSk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogTy5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBuLnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChvKSA9PiBvLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IHBsKHIsIG8pXG4gIH07XG59LCBUciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhHb29nbGVQYXksIGUuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBlLmFkeWVuR29vZ2xlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKG8pID0+IHtcbiAgICBjb25zdCBhID0gby5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgYSAhPSBudWxsICYmIGEuaXNBdmFpbGFibGUgJiYgci5wdXNoKGEpO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgcHJvY2Vzc29yOiBPLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IG4uc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChvKSA9PiBvLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IF9sKHIsIG8pXG4gIH07XG59LCBwbCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChvKSA9PiBvLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIF9sID0gKGUsIHQpID0+IHtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKG8pID0+IG8ucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY2xhc3MgbWwge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBvKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGEpID0+IHtcbiAgICAgIGlmICghYS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoUnIoYS5vcmlnaW4pICE9PSBScih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEucGVucGFsIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEuc291cmNlICYmIGEuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBpID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkgPSBFaShKU09OLnBhcnNlKGEuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGkpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gaSwgcCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAocCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IGEuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIHApO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChhKSA9PiBhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWEuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBhLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBhKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKGEubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGEpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKGEubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gbztcbiAgfVxufVxuY29uc3QgUnIgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiB5bChlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgdWkobik7XG4gIGlmICghZGkobiwgbykpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIGZsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IGhsID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChvKSA9PiB7XG4gICAgaWYgKG8uaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBhID0gby5sb2FkZWRWYWx1ZSwgaSA9IGEuaXNBdmFpbGFibGUgJiYgYS5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBhLmlzQXZhaWxhYmxlICYmIGEuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogaSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBpICYmIE5yKFwiYXBwbGVfcGF5XCIsIGEsIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBOcihcImdvb2dsZV9wYXlcIiwgYSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIE5yID0gKGUsIHQsIHIsIG4sIG8pID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBZKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBGciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IGxlLCBlcnJfXzogVyB9ID0gQShcIm9wLWZvcm1cIiksIHBlID0gY2xhc3MgcGUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIG87XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBaZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgWmUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IFplKCksIHRoaXMuaW5pdEZsb3dzID0gcmwoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYSA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIGkgPSBhLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHJ0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIC8vICdlbnZpcm9ubWVudCc6ICxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrJzogZnJhbWV3b3JrLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsudmVyc2lvbic6IHZlcnNpb24sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihMZS5hY3RpdmUoKSwgaSksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5jcmVhdGVFbGVtZW50KHVlLkNERV9CUklER0UpO1xuICAgICAgICAgIGMubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGMubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oYy5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KSwgYy5tb3VudChcImJvZHlcIiksIGxlKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIGxlKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIGxlKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBGclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxlKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBpID09IG51bGwgfHwgaS5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpLCBsZShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCB1ID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIExlLmFjdGl2ZSgpKSwgcCA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBGclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHUgPT0gbnVsbCB8fCB1LmVuZCgpLCBpID09IG51bGwgfHwgaS5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIGxlKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCBsaShwLCB0aGlzLmRldmljZVRva2VuKSwgbGUoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IHBlLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBwLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQoeSksIGhsKHRoaXMuaW5pdEZsb3dzLCB5LCB0aGlzLmZvcm1DYWxsYmFja3MpLCBsZShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdGwodGhpcy5pbml0Rmxvd3MsIHksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIGxlKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIGkgPT0gbnVsbCB8fCBpLnNldFN0YXR1cyh7IGNvZGU6IGhlLk9LIH0pLCBnKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICBjb25zdCBsID0gWChjKTtcbiAgICAgICAgICBpID09IG51bGwgfHwgaS5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIFcoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaSA9PSBudWxsIHx8IGkuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChhKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGEsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgIWkgfHwgaS50eXBlID09PSB1ZS5DREVfQlJJREdFIHx8IChpLm5vZGUuc3R5bGUuaGVpZ2h0ID0gYSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGEpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQoYSksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGEpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoYSksIGEpLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChhLCBpID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gbm8ucGFyc2UoYSksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKGkpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBwID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gcC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gcC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChhLCBpKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBhLFxuICAgICAgICBub2RlOiBpLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChpKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbdWUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3VlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbdWUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFt1ZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW3VlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1thXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGEpID0+IHtcbiAgICAgIGNvbnN0IGkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gaS5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBpLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGEuc3R5bGVzICYmIGkuYXBwZW5kKFwic3R5bGVzXCIsIGlsKGEuc3R5bGVzKSksIGkuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIGk7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGEpID0+IHV0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCB5bChhLm5vZGUpO1xuICAgICAgICBpLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihhLnR5cGUsIGkpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGEudHlwZSA9PT0gdWUuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KGkpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKGkpID0+IFcoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGkpKSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChhKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgVyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCB1dChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4uYSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBSLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB1dChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICBpZiAoIWEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGksIGlzQXZhaWxhYmxlOiBjIH0gPSBJcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCB7IHByb2Nlc3NvcnM6IGwsIGlzQXZhaWxhYmxlOiB1IH0gPSBUcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCBwID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgeSA9IChwID09IG51bGwgPyB2b2lkIDAgOiBwLmlzQXZhaWxhYmxlKSA/PyAhMSwgXyA9IGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgICh2KSA9PiB2LnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIHYucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgKSwgbSA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBmID0gKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uaXNBdmFpbGFibGUpID8/ICExO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFUuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBpLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFUuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogbCxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBVLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHkgPyBbTy5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB5XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBVLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IF8gPyBbTy5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBfXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBVLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBmID8gW08uRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZcbiAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKGEsIGkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBXKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IHV0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZDogYSwgc2V0dGluZ3M6IGkgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBsID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFsKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgc3dpdGNoIChhKSB7XG4gICAgICAgICAgICAgIGNhc2UgVS5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBpIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBVLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IGkgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFUubG9vcENyeXB0bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcImNyeXB0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImxvb3BcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFUuYXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gSXIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgVS5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gVHIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgVS5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFUuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3coaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBVLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFUuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgVyhcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgVS5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBXKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFUuYWR5ZW5BcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFcoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3coaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBidChhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgYTtcbiAgICAgIGxlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgaSAmJiBpLm5vZGUucmVtb3ZlKCk7XG4gICAgICAoYSA9IGooKSkgPT0gbnVsbCB8fCBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBscygpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhhKTtcbiAgICB9LCBwZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMVwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEd0LmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBmbCgpLCB0aGlzLmRldmljZVRva2VuID0gRW4oKSwgY3MoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0gc2woKTtcbiAgICBvbih0aGlzLmJhc2VVcmwpLnRoZW4oKGEpID0+IHtcbiAgICAgIGlmICghVXQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBhLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgVXQuc2V0KGkpO1xuICAgICAgfVxuICAgIH0pLCBnKFwiZm9ybV9pbml0XCIpLCBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbiksIHQuYWxsb3dUcmFjaW5nID09PSAhMCAmJiBsbCh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IG1sKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAobyA9IGooKSkgPT0gbnVsbCB8fCBvLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSBwZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgY2FsbGVyOiB0LFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiAociA9PSBudWxsID8gdm9pZCAwIDogci5mb3JtSWQpIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfSwgbyA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHt0fVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtuLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7bi5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7bi5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7bi5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQgPyAoVyhvKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogbyB9KSwgITEpIDogIXIgfHwgci5mb3JtSWQgIT09IHRoaXMuZm9ybUlkID8gKFcobyksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IG8gfSksICExKSA6ICEwO1xuICB9XG59O1xucGUub2pzRmxvd3MgPSBSLCBwZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmIChwZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIHBlLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBwZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIG8pID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gZ24pLm9yaWdpbixcbiAgZm9ybURpdjogbyxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgTXIgPSBwZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChNci5nZXRJbnN0YW5jZSgpKSB7XG4gICAgTXIuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBNci5nZXRJbnN0YW5jZSgpID8/IG5ldyBNcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyBCdCBhcyBCLCBDYXJkQ3ZjRWxlbWVudCBhcyBDLCBFbGVtZW50c0Zvcm0gYXMgRSwgRmllbGROYW1lIGFzIEYsIEhzIGFzIEgsIExlIGFzIEwsIE5zIGFzIE4sIFBheUluRmFpbGVkIGFzIFAsIFN1Ym1pdE1ldGhvZHMgYXMgUywgVHMgYXMgVCwgVWUgYXMgVSwgWXQgYXMgWSwgWiwgWnMgYXMgYSwganQgYXMgYiwgY24gYXMgYywgZG4gYXMgZCwgSHQgYXMgZSwgZ3QgYXMgZiwgZ3IgYXMgZywgaGUgYXMgaCwgQ2FyZEVsZW1lbnQgYXMgaSwganMgYXMgaiwgQ2FyZEV4cGlyeUVsZW1lbnQgYXMgaywgbG4gYXMgbCwgQ2FyZE51bWJlckVsZW1lbnQgYXMgbSwgRW52aXJvbm1lbnQgYXMgbiwgUGF5SW5TdGF0ZSBhcyBvLCBydCBhcyByLCB0dCBhcyB0LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdSwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHYsIHpzIGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLFVBQUFDLElBQVEsV0FBQUMsSUFBUyxhQUFBQyxVQUFpQjtBQUVoRixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FB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LENBQUMsRUFBRSxDQUFDLElBQW9CLGdCQUFBcGtCLEdBQUlta0IsSUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlULEdBQ01ELEtBQTBCLENBQUNyQixPQUN4QjtBQUFBLEVBQ0wsUUFBUUEsRUFBTztBQUFBLEVBQ2YsWUFBWUEsRUFBTyxlQUFlO0FBQUEsRUFDbEMsVUFBVUEsRUFBTztBQUFBLEVBQ2pCLHFCQUFxQkEsRUFBTztBQUFBLEVBQzVCLGdCQUFnQkEsRUFBTztBQUFBLEVBQ3ZCLFNBQVNBLEVBQU87QUFDbEI7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInoiLCAiY2hhbGsiLCAidjQiLCAianN4IiwgIkZyYWdtZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VFZmZlY3QiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAiYSIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAiaSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAieiIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyQxIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgImtleSIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJBV1hfTE9BRElORyIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAibG9nX18iLCAiZXJyX18kMSIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiRmllbGROYW1lIiwgIlJlcXVpcmVkU3RyaW5nIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJpc3N1ZUtleXMiLCAiRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQyIiwgIlBheUluRmFpbGVkIiwgIlBheUluRmFpbGVkMiIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93IiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAiY3VzdG9tUGFyYW1zIiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgIkVsZW1lbnRzQ29udGV4dCIsICJjcmVhdGVDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJ1c2VDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJwcm9wcyIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgInVzZVN0YXRlIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXNlRWZmZWN0IiwgImpzeCIsICJ1cmwiLCAiQ2FyZEVsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50IiwgIlhuIiwgImVvIiwgInRvIiwgInIiLCAibiIsICJhIiwgInJvIiwgIm8iLCAiQyIsICJiIiwgIk0iLCAiZCIsICJPciIsICJVciIsICJqciIsICJ4ciIsICJ1ZSIsICJubyIsICJ3dCIsICJvbyIsICJzZSIsICJhbyIsICJzbyIsICJpbyIsICJjbyIsICJsbyIsICJ1byIsICJwbyIsICJfbyIsICJtbyIsICJ5byIsICJmbyIsICJobyIsICJEZSIsICJnbyIsICJ3byIsICJ2byIsICJibyIsICJFbyIsICJQbyIsICJTbyIsICJRZSIsICJDbyIsICJrbyIsICJBbyIsICJEIiwgIklvIiwgIlRvIiwgIiRyIiwgIlJvIiwgIk5vIiwgInciLCAiRm8iLCAiR3IiLCAiVnIiLCAiTW8iLCAiTG8iLCAiJGUiLCAiRG8iLCAiT28iLCAicXIiLCAiVW8iLCAiam8iLCAieG8iLCAic3IiLCAienIiLCAiaXIiLCAiSHIiLCAiJG8iLCAiR28iLCAibXQiLCAiQnIiLCAiVm8iLCAicW8iLCAiem8iLCAiWXIiLCAiSG8iLCAiSnIiLCAiQm8iLCAiWW8iLCAiSm8iLCAiWm8iLCAiS28iLCAiV28iLCAiUW8iLCAiWG8iLCAiZWEiLCAidGEiLCAiTHQiLCAicmEiLCAibmEiLCAib2EiLCAiWCIsICJhYSIsICJzYSIsICJaciIsICJpYSIsICJjYSIsICJlZSIsICJpcyIsICJobiIsICJ5ZSIsICJBIiwgImNoYWxrIiwgIkR0IiwgImdlIiwgImxhIiwgInAiLCAiS3IiLCAiT2UiLCAieXQiLCAiZnQiLCAiTWUiLCAidWEiLCAibSIsICJmIiwgImgiLCAiZGEiLCAiJCIsICJ2dCIsICJrdCIsICJodCIsICJvdCIsICJjciIsICJXciIsICJRciIsICJYciIsICJlbiIsICJ0biIsICJsciIsICJkdCIsICJWdCIsICJ5YSIsICJPdCIsICJwYSIsICJBdCIsICJjdCIsICJtYSIsICJxdCIsICJmYSIsICJoYSIsICJtZSIsICJ3YSIsICJ1ciIsICJnYSIsICJ2YSIsICJiYSIsICJFYSIsICJQYSIsICJTYSIsICJybiIsICJkciIsICJDYSIsICJrYSIsICJwciIsICJBYSIsICJfciIsICJJYSIsICJUYSIsICJSYSIsICJOYSIsICJGYSIsICJNYSIsICJMYSIsICJEYSIsICJPYSIsICJVYSIsICJqYSIsICJ4YSIsICIkYSIsICJHYSIsICJWYSIsICJxYSIsICJubiIsICJ6YSIsICJIYSIsICJCYSIsICJZYSIsICJKYSIsICJaYSIsICJLYSIsICJXYSIsICJRYSIsICJYYSIsICJlcyIsICJQIiwgIlplIiwgImJ0IiwgIm1yIiwgInRzIiwgInJzIiwgIkl0IiwgIm9uIiwgIkV0IiwgImoiLCAiVXQiLCAieXIiLCAibnMiLCAib3MiLCAiYXMiLCAibHQiLCAic3MiLCAiYyIsICJ6dCIsICJhbiIsICJzbiIsICJ0IiwgImNzIiwgImxzIiwgIkxyIiwgInVzIiwgImRzIiwgInBzIiwgIlB0IiwgImZyIiwgIlN0IiwgIl9zIiwgIm1zIiwgInlzIiwgImZzIiwgImhzIiwgImdzIiwgIlNlIiwgImhyIiwgIndzIiwgImwiLCAidSIsICJ2cyIsICJicyIsICJYZSIsICJldCIsICJIdCIsICJ0dCIsICJCdCIsICJFcyIsICJQcyIsICJTcyIsICJ6ZSIsICJaIiwgIkNzIiwgImtzIiwgIkFzIiwgIklzIiwgImd0IiwgIlRzIiwgIlJzIiwgIk5zIiwgIkZzIiwgIk1zIiwgIkxzIiwgIkRzIiwgIk9zIiwgIlR0IiwgIlVzIiwgIll0IiwgImp0IiwgImNuIiwgImxuIiwgImpzIiwgIktlIiwgIkp0IiwgIlp0IiwgInhzIiwgIkt0IiwgIiRzIiwgIkdzIiwgInVuIiwgIlZzIiwgInFzIiwgInpzIiwgIkhzIiwgImRuIiwgIkJzIiwgIlJ0IiwgInBuIiwgIllzIiwgIkpzIiwgIlpzIiwgIktzIiwgIldzIiwgImdyIiwgInJ0IiwgImhlIiwgIkxlIiwgIk50IiwgIlFzIiwgIlVlIiwgIlhzIiwgInV0IiwgIl9uIiwgInEiLCAidGkiLCAiZWkiLCAicmkiLCAiTiIsICJ3ZSIsICJtbiIsICJuaSIsICJWIiwgIm9pIiwgImFpIiwgInNpIiwgImZlIiwgInluIiwgIndyIiwgImlpIiwgIld0IiwgImNpIiwgImNvbm5lY3RUb0NoaWxkIiwgIkN0IiwgImxpIiwgInVpIiwgImRpIiwgImduIiwgInduIiwgIldlIiwgInBpIiwgInZuIiwgInZyIiwgIkNlIiwgIkhlIiwgIm1pIiwgInlpIiwgImdpIiwgImZpIiwgImhpIiwgIndpIiwgImJuIiwgIkVuIiwgInZpIiwgImJpIiwgIlkiLCAiRWkiLCAiUGkiLCAiUG4iLCAiU2kiLCAiQ2kiLCAiYXQiLCAiU24iLCAia2kiLCAiQ24iLCAiQWkiLCAiUXQiLCAiSWkiLCAiVGkiLCAia24iLCAiUmkiLCAiQW4iLCAiSW4iLCAiVG4iLCAiTyIsICJSbiIsICJYdCIsICJlciIsICJOaSIsICJGaSIsICJ0ciIsICJNaSIsICJvZSIsICJhZSIsICJFbCIsICJObiIsICJzdCIsICJHIiwgInJyIiwgIkFlIiwgIkxpIiwgIkRpIiwgImplIiwgIm50IiwgIk9pIiwgIkZuIiwgIlVpIiwgImppIiwgImJyIiwgInhpIiwgIiRpIiwgIkdpIiwgIk1uIiwgIkxuIiwgIkRuIiwgIk9uIiwgIlZpIiwgInFpIiwgInppIiwgIkhpIiwgIkJpIiwgIllpIiwgIksiLCAiVW4iLCAiSmkiLCAiWmkiLCAiS2kiLCAiUW4iLCAiQmUiLCAiam4iLCAiV2kiLCAieSIsICJSIiwgIl8iLCAiUWkiLCAiR2UiLCAibnIiLCAiRnQiLCAib3IiLCAiVmUiLCAieG4iLCAiYXIiLCAibmUiLCAiUmUiLCAiWGkiLCAiZWMiLCAidiIsICJFIiwgIlMiLCAiVCIsICJMIiwgImsiLCAiRiIsICJKIiwgImllIiwgImJlIiwgIl9lIiwgIlRlIiwgInFlIiwgIkllIiwgInB0IiwgInRjIiwgInJjIiwgIm5jIiwgIlllIiwgIiRuIiwgIm9jIiwgImFjIiwgIlEiLCAiTmUiLCAic2MiLCAiaWMiLCAidmUiLCAiR24iLCAiVm4iLCAiY2MiLCAibGMiLCAiX3QiLCAicW4iLCAidWMiLCAiZGMiLCAiUGUiLCAiSmUiLCAicGMiLCAibWMiLCAiem4iLCAieWMiLCAiZmMiLCAiSG4iLCAieHQiLCAiaGMiLCAiZ2MiLCAiRXIiLCAid2MiLCAiQm4iLCAidmMiLCAiYmMiLCAia2UiLCAiJHQiLCAiRWMiLCAiWW4iLCAiUGMiLCAia2MiLCAiU2MiLCAiQ2MiLCAiWm4iLCAiSm4iLCAiSSIsICJQciIsICJBYyIsICJJYyIsICJUYyIsICJSYyIsICJIIiwgIk5jIiwgIkZjIiwgIk1jIiwgIkVlIiwgIkxjIiwgIktuIiwgIkRjIiwgIk9jIiwgImNlIiwgIlNyIiwgIlduIiwgIlVjIiwgImpjIiwgIkNyIiwgInhjIiwgIiRjIiwgIkdjIiwgIlZjIiwgIkhjIiwgInFjIiwgInpjIiwgIkIiLCAiQmMiLCAiWWMiLCAiSmMiLCAiRmUiLCAiWmMiLCAiV2MiLCAiS2MiLCAiUWMiLCAiWGMiLCAiZWwiLCAidGUiLCAidGwiLCAicmwiLCAibmwiLCAicmUiLCAia3IiLCAiZGUiLCAiR3QiLCAib2wiLCAiYWwiLCAic2wiLCAiVSIsICJpbCIsICJNdCIsICJjbCIsICJsbCIsICJ1bCIsICJBciIsICJkbCIsICJJciIsICJwbCIsICJUciIsICJfbCIsICJtbCIsICJSciIsICJ5bCIsICJmbCIsICJobCIsICJOciIsICJGciIsICJsZSIsICJXIiwgInBlIiwgIk1yIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAiYXBwbGVQYXlSZXN1bHQiLCAic2V0QXBwbGVQYXlSZXN1bHQiLCAiZ29vZ2xlUGF5UmVzdWx0IiwgInNldEdvb2dsZVBheVJlc3VsdCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K