@getopenpay/openpay-js 0.5.4 → 0.5.5-alpha.094d93d

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.
@@ -5310,7 +5310,7 @@ const Yc = H(
5310
5310
  minAuthorizationUsdAmount: l,
5311
5311
  allowCustomerToChooseAuth: u
5312
5312
  }, y = {
5313
- apiKey: t.metadata.api_token,
5313
+ apiToken: t.metadata.api_token,
5314
5314
  entityId: t.metadata.entity_id,
5315
5315
  merchantId: t.metadata.merchant_id,
5316
5316
  environment: t.metadata.environment
@@ -6139,7 +6139,7 @@ let xr;
6139
6139
  const Fl = async (e, t) => {
6140
6140
  if (typeof window > "u")
6141
6141
  return;
6142
- const r = await import("./index-BxO1_qHa.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: o } = r, s = await import("./index-7lBJ5fKC.js"), { FetchInstrumentation: c } = s, l = await import("./index-A9gGn9T4.js"), { ZoneContextManager: u } = l, d = await import("./index-D98_IQxf.js"), { registerInstrumentations: f } = d, _ = await import("./index-s2zftOuI.js"), { Resource: m } = _, y = await import("./detect-resources-6vYc-g7y.js").then((Ce) => Ce.d), { detectResourcesSync: h } = y, b = await import("./index-B-ZKzHCm.js"), { OTLPTraceExporter: v } = b, w = await import("./index-BE4GPScS.js"), { B3Propagator: E, B3InjectEncoding: C } = w, O = await import("./index-DP9i6I-f.js"), { BatchSpanProcessor: A } = O;
6142
+ const r = await import("./index-CC-6rphD.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: o } = r, s = await import("./index-CP0rxhzh.js"), { FetchInstrumentation: c } = s, l = await import("./index-BoYTXiRG.js"), { ZoneContextManager: u } = l, d = await import("./index-CxQz-IN8.js"), { registerInstrumentations: f } = d, _ = await import("./index-DPi3LTGs.js"), { Resource: m } = _, y = await import("./detect-resources-TRjALCvO.js").then((Ce) => Ce.d), { detectResourcesSync: h } = y, b = await import("./index-CYaCvRTA.js"), { OTLPTraceExporter: v } = b, w = await import("./index-DHwuOaef.js"), { B3Propagator: E, B3InjectEncoding: C } = w, O = await import("./index-DSnwN-ut.js"), { BatchSpanProcessor: A } = O;
6143
6143
  jt(`Initializing tracer with version ${e} and baseUrl ${t}`);
6144
6144
  const D = Ml(t);
6145
6145
  jt(`Using collector URL ${D}`);
@@ -6708,7 +6708,7 @@ const Ol = (e, t, r) => {
6708
6708
  (o = $()) == null || o.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), vi(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
6709
6709
  }, this.updateCallbacks = (o) => {
6710
6710
  this.formCallbacks.setCallbacks(o);
6711
- }, ye.assignAsSingleton(this), this.ojsVersion = "0.5.4", this.ojsReleaseVersion = "0.5.4", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Bt.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 xl(), this.deviceToken = Tn(), wi();
6711
+ }, ye.assignAsSingleton(this), this.ojsVersion = "0.5.5", this.ojsReleaseVersion = "0.5.5-alpha.094d93d", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Bt.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 xl(), this.deviceToken = Tn(), wi();
6712
6712
  const { framework: r, version: n } = kl();
6713
6713
  pn(this.baseUrl).then((o) => {
6714
6714
  if (!qt.current.isSuccess) {
@@ -6797,4 +6797,4 @@ export {
6797
6797
  je as t,
6798
6798
  Kt as u
6799
6799
  };
6800
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA1fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgaXNMb2FkaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZCQ0KG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkkNCh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkkNChfX3NwcmVhZEFycmF5JDQoW10sIF9fcmVhZCQ0KGVycm9ycykpLCBfX3JlYWQkNChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBlbnZDYWNoZSA9IHt9O1xuY29uc3QgZ2V0Q3VycmVudEVudiA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gIGlmIChlbnZDYWNoZVtiYXNlVXJsXSkge1xuICAgIHJldHVybiBlbnZDYWNoZVtiYXNlVXJsXTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgY29uc3QgZW52ID0gT2pzRW52aXJvbm1lbnQucGFyc2UocmVzcG9uc2UuZW52aXJvbm1lbnQpO1xuICAgIGVudkNhY2hlW2Jhc2VVcmxdID0gZW52O1xuICAgIHJldHVybiBlbnY7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJHMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRzKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRzKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fJHMoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyRzKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG1ldHJpY3NRdWV1ZSA9IG5ldyBNZXRyaWNzUXVldWUoKTtcbmNvbnN0IHRyYWNrID0gKGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykgPT4ge1xuICBtZXRyaWNzUXVldWUuYWRkRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKTtcbn07XG5jb25zdCBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUgPSAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn07XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5jb25zdCBhdHRhY2hFcnJvckxpc3RlbmVycyA9ICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xufTtcbmNvbnN0IGRldGFjaEVycm9yTGlzdGVuZXJzID0gKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG59O1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9jb3JlIHRvby5cbi8qKlxuICogLSBnbG9iYWxUaGlzIChOZXcgc3RhbmRhcmQpXG4gKiAtIHNlbGYgKFdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHdpbmRvdyBpbnN0YW5jZSBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzKVxuICogLSB3aW5kb3cgKGZhbGxiYWNrIGZvciBvbGRlciBicm93c2VyIGltcGxlbWVudGF0aW9ucylcbiAqIC0gZ2xvYmFsIChOb2RlSlMgaW1wbGVtZW50YXRpb24pXG4gKiAtIDxvYmplY3Q+IChXaGVuIGFsbCBlbHNlIGZhaWxzKVxuICovXG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucywgbm8tdW5kZWZcbnZhciBfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgID8gZ2xvYmFsVGhpc1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xudmFyIFZFUlNJT04gPSAnMS45LjAnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHJlID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byB0ZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3ZpZGVkIG93blZlcnNpb24uXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNlbWFudGljczpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gb3duVmVyc2lvbiB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2sob3duVmVyc2lvbikge1xuICAgIHZhciBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIHZhciByZWplY3RlZFZlcnNpb25zID0gbmV3IFNldCgpO1xuICAgIHZhciBteVZlcnNpb25NYXRjaCA9IG93blZlcnNpb24ubWF0Y2gocmUpO1xuICAgIGlmICghbXlWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyByZXR1cm4gbm9vcFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgfVxuICAgIHZhciBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25NYXRjaCA9IGdsb2JhbFZlcnNpb24ubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWdsb2JhbFZlcnNpb25NYXRjaCkge1xuICAgICAgICAgICAgLy8gY2Fubm90IHBhcnNlIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgbm9vcFxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgICAgICBtYWpvcjogK2dsb2JhbFZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgICAgIG1pbm9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICAgICAgcGF0Y2g6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBnbG9iYWxWZXJzaW9uTWF0Y2hbNF0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIGdsb2JhbFZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAoZ2xvYmFsVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2hcbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgIT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWFqb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yID09PSAwKSB7XG4gICAgICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA9PT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vciAmJlxuICAgICAgICAgICAgICAgIG93blZlcnNpb25QYXJzZWQucGF0Y2ggPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5wYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vcikge1xuICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgfTtcbn1cbi8qKlxuICogVGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgQVBJLlxuICpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiB2ZXJzaW9uIG9mIHRoZSBBUEkgcmVxdWVzdGluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2xvYmFsIEFQSVxuICovXG52YXIgaXNDb21wYXRpYmxlID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2soVkVSU0lPTik7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbWFqb3IgPSBWRVJTSU9OLnNwbGl0KCcuJylbMF07XG52YXIgR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIG1ham9yKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoYWxsb3dPdmVycmlkZSA9PT0gdm9pZCAwKSB7IGFsbG93T3ZlcnJpZGUgPSBmYWxzZTsgfVxuICAgIHZhciBhcGkgPSAoX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyB0eXBlKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gVkVSU0lPTikge1xuICAgICAgICAvLyBBbGwgcmVnaXN0ZXJlZCBBUElzIG11c3QgYmUgb2YgdGhlIHNhbWUgdmVyc2lvbiBleGFjdGx5XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGFwaS52ZXJzaW9uICsgXCIgZm9yIFwiICsgdHlwZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgVkVSU0lPTik7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBnbG9iYWxWZXJzaW9uID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb247XG4gICAgaWYgKCFnbG9iYWxWZXJzaW9uIHx8ICFpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKF9iID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3R5cGVdO1xufVxuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICB2YXIgYXBpID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXTtcbiAgICBpZiAoYXBpKSB7XG4gICAgICAgIGRlbGV0ZSBhcGlbdHlwZV07XG4gICAgfVxufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xudmFyIERpYWdDb21wb25lbnRMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlhZ0NvbXBvbmVudExvZ2dlcihwcm9wcykge1xuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2UgfHwgJ0RpYWdDb21wb25lbnRMb2dnZXInO1xuICAgIH1cbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZXJyb3InLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2luZm8nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3ZlcmJvc2UnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdDb21wb25lbnRMb2dnZXI7XG59KCkpO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KG5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDMoW10sIF9fcmVhZCQzKGFyZ3MpLCBmYWxzZSkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBhdmFpbGFibGUgaW50ZXJuYWwgbG9nZ2luZyBsZXZlbHMgZm9yIHRoZSBkaWFnbm9zdGljIGxvZ2dlciwgdGhlIG51bWVyaWMgdmFsdWVzXG4gKiBvZiB0aGUgbGV2ZWxzIGFyZSBkZWZpbmVkIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgaW5pdGlhbCBMb2dMZXZlbCB0byBhdm9pZFxuICogY29tcGF0aWJpbGl0eS9taWdyYXRpb24gaXNzdWVzIGZvciBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBhc3N1bWUgdGhlIG51bWVyaWMgb3JkZXJpbmcuXG4gKi9cbnZhciBEaWFnTG9nTGV2ZWw7XG4oZnVuY3Rpb24gKERpYWdMb2dMZXZlbCkge1xuICAgIC8qKiBEaWFnbm9zdGljIExvZ2dpbmcgbGV2ZWwgc2V0dGluZyB0byBkaXNhYmxlIGFsbCBsb2dnaW5nIChleGNlcHQgYW5kIGZvcmNlZCBsb2dzKSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvciBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IDMwXSA9IFwiRVJST1JcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhIHdhcm5pbmcgc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiV0FSTlwiXSA9IDUwXSA9IFwiV0FSTlwiO1xuICAgIC8qKiBHZW5lcmFsIGluZm9ybWF0aW9uYWwgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiSU5GT1wiXSA9IDYwXSA9IFwiSU5GT1wiO1xuICAgIC8qKiBHZW5lcmFsIGRlYnVnIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkRFQlVHXCJdID0gNzBdID0gXCJERUJVR1wiO1xuICAgIC8qKlxuICAgICAqIERldGFpbGVkIHRyYWNlIGxldmVsIGxvZ2dpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQsIHNob3VsZCBvbmx5IGJlIHNldFxuICAgICAqIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIlZFUkJPU0VcIl0gPSA4MF0gPSBcIlZFUkJPU0VcIjtcbiAgICAvKiogVXNlZCB0byBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgdG8gaW5jbHVkZSBhbGwgbG9nZ2luZyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJBTExcIl0gPSA5OTk5XSA9IFwiQUxMXCI7XG59KShEaWFnTG9nTGV2ZWwgfHwgKERpYWdMb2dMZXZlbCA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIobWF4TGV2ZWwsIGxvZ2dlcikge1xuICAgIGlmIChtYXhMZXZlbCA8IERpYWdMb2dMZXZlbC5OT05FKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gRGlhZ0xvZ0xldmVsLkFMTCkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5BTEw7XG4gICAgfVxuICAgIC8vIEluIGNhc2UgdGhlIGxvZ2dlciBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGxvZ2dlciA9IGxvZ2dlciB8fCB7fTtcbiAgICBmdW5jdGlvbiBfZmlsdGVyRnVuYyhmdW5jTmFtZSwgdGhlTGV2ZWwpIHtcbiAgICAgICAgdmFyIHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgRGlhZ0xvZ0xldmVsLkVSUk9SKSxcbiAgICAgICAgd2FybjogX2ZpbHRlckZ1bmMoJ3dhcm4nLCBEaWFnTG9nTGV2ZWwuV0FSTiksXG4gICAgICAgIGluZm86IF9maWx0ZXJGdW5jKCdpbmZvJywgRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgRGlhZ0xvZ0xldmVsLkRFQlVHKSxcbiAgICAgICAgdmVyYm9zZTogX2ZpbHRlckZ1bmMoJ3ZlcmJvc2UnLCBEaWFnTG9nTGV2ZWwuVkVSQk9TRSksXG4gICAgfTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQyID0gJ2RpYWcnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IGludGVybmFsXG4gKiBkaWFnbm9zdGljIEFQSVxuICovXG52YXIgRGlhZ0FQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIGludGVybmFsIGNvbnN0cnVjdG9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEaWFnQVBJKCkge1xuICAgICAgICBmdW5jdGlvbiBfbG9nUHJveHkoZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDIoW10sIF9fcmVhZCQyKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2luZyBzZWxmIGxvY2FsIHZhcmlhYmxlIGZvciBtaW5pZmljYXRpb24gcHVycG9zZXMgYXMgJ3RoaXMnIGNhbm5vdCBiZSBtaW5pZmllZFxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIERpYWdBUEkgc3BlY2lmaWMgZnVuY3Rpb25zXG4gICAgICAgIHZhciBzZXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAob3B0aW9uc09yTG9nTGV2ZWwgPT09IHZvaWQgMCkgeyBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IERpYWdMb2dMZXZlbC5JTkZPIH07IH1cbiAgICAgICAgICAgIGlmIChsb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIExvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgbWlnaHQgYnJlYWsgdGhlIHVzZXIgYXBwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvZyB0byBzZWxmLiBJZiBhIGxvZ2dlciB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbG9nLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZExvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgdmFyIG5ld0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcigoX2IgPSBvcHRpb25zT3JMb2dMZXZlbC5sb2dMZXZlbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IChfYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPic7XG4gICAgICAgICAgICAgICAgb2xkTG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQyLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgRGlhZ0FQSS5pbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRGlhZ0FQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbnZhciBCYXNlQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29udGV4dCB3aGljaCBpbmhlcml0cyB2YWx1ZXMgZnJvbSBhbiBvcHRpb25hbCBwYXJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDb250ZXh0IGEgY29udGV4dCBmcm9tIHdoaWNoIHRvIGluaGVyaXQgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFzZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgICAvLyBmb3IgbWluaWZpY2F0aW9uXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpOyB9O1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEJhc2VDb250ZXh0O1xufSgpKTtcbi8qKiBUaGUgcm9vdCBjb250ZXh0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29udGV4dCAqL1xudmFyIFJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIE5vb3BDb250ZXh0TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUk9PVF9DT05URVhUO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKF9jb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheSQxKFt0aGlzQXJnXSwgX19yZWFkJDEoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBOb29wQ29udGV4dE1hbmFnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMSA9ICdjb250ZXh0JztcbnZhciBOT09QX0NPTlRFWFRfTUFOQUdFUiA9IG5ldyBOb29wQ29udGV4dE1hbmFnZXIoKTtcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBDb250ZXh0IEFQSVxuICovXG52YXIgQ29udGV4dEFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHRBUEkoKSB7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBDb250ZXh0QVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBDb250ZXh0QVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgbWFuYWdlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgbWFuYWdlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uIChjb250ZXh0TWFuYWdlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgY29udGV4dE1hbmFnZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtjb250ZXh0LCBmbiwgdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBjb250ZXh0IHRvIGEgdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmluZCB0byB0aGUgZXZlbnQgZW1pdHRlciBvciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlciB0byBiaW5kXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChjb250ZXh0LCB0YXJnZXQpO1xuICAgIH07XG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FJDEpIHx8IE5PT1BfQ09OVEVYVF9NQU5BR0VSO1xuICAgIH07XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dEFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhY2VGbGFncztcbihmdW5jdGlvbiAoVHJhY2VGbGFncykge1xuICAgIC8qKiBSZXByZXNlbnRzIG5vIGZsYWcgc2V0LiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBCaXQgdG8gcmVwcmVzZW50IHdoZXRoZXIgdHJhY2UgaXMgc2FtcGxlZCBpbiB0cmFjZSBmbGFncy4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJTQU1QTEVEXCJdID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFRyYWNlRmxhZ3MgfHwgKFRyYWNlRmxhZ3MgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIElOVkFMSURfU1BBTklEID0gJzAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfVFJBQ0VJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogSU5WQUxJRF9UUkFDRUlELFxuICAgIHNwYW5JZDogSU5WQUxJRF9TUEFOSUQsXG4gICAgdHJhY2VGbGFnczogVHJhY2VGbGFncy5OT05FLFxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIE5vblJlY29yZGluZ1NwYW4gaXMgdGhlIGRlZmF1bHQge0BsaW5rIFNwYW59IHRoYXQgaXMgdXNlZCB3aGVuIG5vIFNwYW5cbiAqIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS4gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wIGluY2x1ZGluZyBjb250ZXh0XG4gKiBwcm9wYWdhdGlvbi5cbiAqL1xudmFyIE5vblJlY29yZGluZ1NwYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9uUmVjb3JkaW5nU3Bhbihfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKF9zcGFuQ29udGV4dCA9PT0gdm9pZCAwKSB7IF9zcGFuQ29udGV4dCA9IElOVkFMSURfU1BBTl9DT05URVhUOyB9XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBSZXR1cm5zIGEgU3BhbkNvbnRleHQuXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKF9rZXksIF92YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbiAoX25hbWUsIF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uIChfbGluaykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24gKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24gKF9zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbiAoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChfZW5kVGltZSkgeyB9O1xuICAgIC8vIGlzUmVjb3JkaW5nIGFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBOb25SZWNvcmRpbmdTcGFuLlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfdGltZSkgeyB9O1xuICAgIHJldHVybiBOb25SZWNvcmRpbmdTcGFuO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogc3BhbiBrZXlcbiAqL1xudmFyIFNQQU5fS0VZID0gY3JlYXRlQ29udGV4dEtleSgnT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOJyk7XG4vKipcbiAqIFJldHVybiB0aGUgc3BhbiBpZiBvbmUgZXhpc3RzXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNQQU5fS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEdldHMgdGhlIHNwYW4gZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBvbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICAgIHJldHVybiBnZXRTcGFuKENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG4vKipcbiAqIFNldCB0aGUgc3BhbiBvbiBhIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHVzZSBhcyBwYXJlbnRcbiAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gc2V0IGFjdGl2ZVxuICovXG5mdW5jdGlvbiBzZXRTcGFuKGNvbnRleHQsIHNwYW4pIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTUEFOX0tFWSwgc3Bhbik7XG59XG4vKipcbiAqIFJlbW92ZSBjdXJyZW50IHNwYW4gc3RvcmVkIGluIHRoZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBkZWxldGUgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNQQU5fS0VZKTtcbn1cbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpKTtcbn1cbi8qKlxuICogR2V0IHRoZSBzcGFuIGNvbnRleHQgb2YgdGhlIHNwYW4gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGdldFNwYW4oY29udGV4dCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGFuQ29udGV4dCgpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1RSQUNFSURfUkVHRVggPSAvXihbMC05YS1mXXszMn0pJC9pO1xudmFyIFZBTElEX1NQQU5JRF9SRUdFWCA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaXNWYWxpZFRyYWNlSWQodHJhY2VJZCkge1xuICAgIHJldHVybiBWQUxJRF9UUkFDRUlEX1JFR0VYLnRlc3QodHJhY2VJZCkgJiYgdHJhY2VJZCAhPT0gSU5WQUxJRF9UUkFDRUlEO1xufVxuZnVuY3Rpb24gaXNWYWxpZFNwYW5JZChzcGFuSWQpIHtcbiAgICByZXR1cm4gVkFMSURfU1BBTklEX1JFR0VYLnRlc3Qoc3BhbklkKSAmJiBzcGFuSWQgIT09IElOVkFMSURfU1BBTklEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICogQHJldHVybiB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIChpc1ZhbGlkVHJhY2VJZChzcGFuQ29udGV4dC50cmFjZUlkKSAmJiBpc1ZhbGlkU3BhbklkKHNwYW5Db250ZXh0LnNwYW5JZCkpO1xufVxuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgY29udGV4dEFwaSA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcbi8qKlxuICogTm8tb3AgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBUcmFjZXJ9LlxuICovXG52YXIgTm9vcFRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyKCkge1xuICAgIH1cbiAgICAvLyBzdGFydFNwYW4gc3RhcnRzIGEgbm9vcCBzcGFuLlxuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHsgY29udGV4dCA9IGNvbnRleHRBcGkuYWN0aXZlKCk7IH1cbiAgICAgICAgdmFyIHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudEZyb21Db250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHBhcmVudEZyb21Db250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAobmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICB2YXIgb3B0cztcbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBjdHggIT09IG51bGwgJiYgY3R4ICE9PSB2b2lkIDAgPyBjdHggOiBjb250ZXh0QXBpLmFjdGl2ZSgpO1xuICAgICAgICB2YXIgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICB2YXIgY29udGV4dFdpdGhTcGFuU2V0ID0gc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRBcGkud2l0aChjb250ZXh0V2l0aFNwYW5TZXQsIGZuLCB1bmRlZmluZWQsIHNwYW4pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXI7XG59KCkpO1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAodHlwZW9mIHNwYW5Db250ZXh0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3NwYW5JZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUZsYWdzJ10gPT09ICdudW1iZXInKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyKCk7XG4vKipcbiAqIFByb3h5IHRyYWNlciBwcm92aWRlZCBieSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyXG4gKi9cbnZhciBQcm94eVRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChfbmFtZSwgX29wdGlvbnMsIF9jb250ZXh0LCBfZm4pIHtcbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcnkgdG8gZ2V0IGEgdHJhY2VyIGZyb20gdGhlIHByb3h5IHRyYWNlciBwcm92aWRlci5cbiAgICAgKiBJZiB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyIGhhcyBubyBkZWxlZ2F0ZSwgcmV0dXJuIGEgbm9vcCB0cmFjZXIuXG4gICAgICovXG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBUcmFjZXJQcm92aWRlcn0gd2hpY2ggcmV0dXJucyBhbiBpbXBvdGVudFxuICogVHJhY2VyIGZvciBhbGwgY2FsbHMgdG8gYGdldFRyYWNlcmAuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wLlxuICovXG52YXIgTm9vcFRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgTm9vcFRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BUcmFjZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSX1BST1ZJREVSID0gbmV3IE5vb3BUcmFjZXJQcm92aWRlcigpO1xuLyoqXG4gKiBUcmFjZXIgcHJvdmlkZXIgd2hpY2ggcHJvdmlkZXMge0BsaW5rIFByb3h5VHJhY2VyfXMuXG4gKlxuICogQmVmb3JlIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXJzIHByb3ZpZGVkIGFyZSBOb09wLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXMgYXJlIHByb3ZpZGVkIGZyb20gdGhlIGRlbGVnYXRlLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0IGFmdGVyIHRyYWNlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQsXG4gKiAgIGFsbCB0cmFjZXJzIGFscmVhZHkgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGRlbGVnYXRlIGltcGxlbWVudGF0aW9uLlxuICovXG52YXIgUHJveHlUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgUHJveHlUcmFjZXJ9XG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfVFJBQ0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSB0cmFjZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZS4gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gaXMgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiSU5URVJOQUxcIl0gPSAwXSA9IFwiSU5URVJOQUxcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgc2VydmVyLXNpZGUgaGFuZGxpbmcgb2YgYW4gUlBDIG9yIG90aGVyXG4gICAgICogcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJTRVJWRVJcIl0gPSAxXSA9IFwiU0VSVkVSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHRoZSBjbGllbnQtc2lkZSB3cmFwcGVyIGFyb3VuZCBhbiBSUEMgb3JcbiAgICAgKiBvdGhlciByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNMSUVOVFwiXSA9IDJdID0gXCJDTElFTlRcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgcHJvZHVjZXIgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiUFJPRFVDRVJcIl0gPSAzXSA9IFwiUFJPRFVDRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgY29uc3VtZXIgcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCB8fCAoU3BhbktpbmQgPSB7fSkpO1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xudmFyIFNwYW5TdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChTcGFuU3RhdHVzQ29kZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN0YXR1cy5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIlVOU0VUXCJdID0gMF0gPSBcIlVOU0VUXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yXG4gICAgICogT3BlcmF0b3IgdG8gaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiT0tcIl0gPSAxXSA9IFwiT0tcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiRVJST1JcIl0gPSAyXSA9IFwiRVJST1JcIjtcbn0pKFNwYW5TdGF0dXNDb2RlIHx8IChTcGFuU3RhdHVzQ29kZSA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbnZhciBjb250ZXh0ID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG52YXIgVHJhY2VBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBUcmFjZUFQSSgpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGlzU3BhbkNvbnRleHRWYWxpZDtcbiAgICAgICAgdGhpcy5kZWxldGVTcGFuID0gZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gZ2V0U3BhbjtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBzZXRTcGFuO1xuICAgICAgICB0aGlzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgVHJhY2UgQVBJICovXG4gICAgVHJhY2VBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGdsb2JhbCB0cmFjZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0cmFjZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRyYWNlciBmcm9tIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVHJhY2VBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIHRyYWNlIEFQSSAqL1xudmFyIHRyYWNlID0gVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKTtcblxuY29uc3QgY3JlYXRlQ0RFU3BhbiA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBjZGUuJHtkYXRhLnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgLi4uY2RlQ29ubi50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KGRhdGEucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjcmVhdGVUcmFja2luZ1NwYW4gPSBhc3luYyAob3B0aW9ucywgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke29wdGlvbnMuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogb3B0aW9ucy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBvcHRpb25zLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogb3B0aW9ucy5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogb3B0aW9ucy5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBvcHRpb25zLnJlZmVycmVyLFxuICAgICAgICAuLi5vcHRpb25zLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IG9wdGlvbnMucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bhbi5lbmQoKTtcbiAgfVxufTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUNERVNwYW4oY2RlQ29ubiwgZGF0YSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICAgIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICB0cmFjayhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9KTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikgJiYgIXByb21vQ29kZSkge1xuICAgICAgcHJvbW9Db2RlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3JTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlIH0sIHJlc3BvbnNlTW9kZWwpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG4vLyBUaGVzZSB2YWx1ZXMgc2hvdWxkIE5FVkVSIGNoYW5nZS4gVGhlIHZhbHVlcyBhcmUgcHJlY2lzZWx5IGZvclxuLy8gZ2VuZXJhdGluZyBVTElEcy5cbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiOyAvLyBDcm9ja2ZvcmQncyBCYXNlMzJcbmNvbnN0IEVOQ09ESU5HX0xFTiA9IDMyOyAvLyBmcm9tIEVOQ09ESU5HLmxlbmd0aDtcbmNvbnN0IFJBTkRPTV9MRU4gPSAxNjtcbmNvbnN0IFRJTUVfTEVOID0gMTA7XG5jb25zdCBUSU1FX01BWCA9IDI4MTQ3NDk3NjcxMDY1NTsgLy8gZnJvbSBNYXRoLnBvdygyLCA0OCkgLSAxO1xuXG52YXIgVUxJREVycm9yQ29kZTtcbihmdW5jdGlvbiAoVUxJREVycm9yQ29kZSkge1xuICAgIFVMSURFcnJvckNvZGVbXCJCYXNlMzJJbmNvcnJlY3RFbmNvZGluZ1wiXSA9IFwiQjMyX0VOQ19JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyXCJdID0gXCJERUNfVElNRV9DSEFSXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVOZWdhdGl2ZVwiXSA9IFwiRU5DX1RJTUVfTkVHXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVTaXplRXhjZWVkZWRcIl0gPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlBSTkdEZXRlY3RGYWlsdXJlXCJdID0gXCJQUk5HX0RFVEVDVFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVTElESW52YWxpZFwiXSA9IFwiVUxJRF9JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVuZXhwZWN0ZWRcIl0gPSBcIlVORVhQRUNURURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVVVJREludmFsaWRcIl0gPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoVUxJREVycm9yQ29kZSB8fCAoVUxJREVycm9yQ29kZSA9IHt9KSk7XG5jbGFzcyBVTElERXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKGAke21lc3NhZ2V9ICgke2Vycm9yQ29kZX0pYCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IGVycm9yQ29kZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUNoYXIocHJuZykge1xuICAgIGxldCByYW5kID0gTWF0aC5mbG9vcihwcm5nKCkgKiBFTkNPRElOR19MRU4pO1xuICAgIGlmIChyYW5kID09PSBFTkNPRElOR19MRU4pIHtcbiAgICAgICAgcmFuZCA9IEVOQ09ESU5HX0xFTiAtIDE7XG4gICAgfVxuICAgIHJldHVybiBFTkNPRElORy5jaGFyQXQocmFuZCk7XG59XG4vKipcbiAqIERldGVjdCB0aGUgYmVzdCBQUk5HIChwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IpXG4gKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB0byBjaGVjayBmcm9tIChnbG9iYWwvd2luZG93KVxuICogQHJldHVybnMgVGhlIFBSTkcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UFJORyhyb290KSB7XG4gICAgY29uc3Qgcm9vdExvb2t1cCA9IGRldGVjdFJvb3QoKTtcbiAgICBjb25zdCBnbG9iYWxDcnlwdG8gPSAocm9vdExvb2t1cCAmJiAocm9vdExvb2t1cC5jcnlwdG8gfHwgcm9vdExvb2t1cC5tc0NyeXB0bykpIHx8XG4gICAgICAgIChudWxsKTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgICAgZ2xvYmFsQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAvIDB4ZmY7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LnJhbmRvbUJ5dGVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IGdsb2JhbENyeXB0by5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDB4ZmY7XG4gICAgfVxuICAgIGVsc2UgO1xuICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBkZXRlY3RSb290KCkge1xuICAgIGlmIChpbldlYldvcmtlcigpKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZW5jb2RlUmFuZG9tKGxlbiwgcHJuZykge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xuICAgICAgICBzdHIgPSByYW5kb21DaGFyKHBybmcpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBFbmNvZGUgdGhlIHRpbWUgcG9ydGlvbiBvZiBhIFVMSURcbiAqIEBwYXJhbSBub3cgVGhlIGN1cnJlbnQgdGltZXN0YW1wXG4gKiBAcGFyYW0gbGVuIExlbmd0aCB0byBnZW5lcmF0ZVxuICogQHJldHVybnMgVGhlIGVuY29kZWQgdGltZVxuICovXG5mdW5jdGlvbiBlbmNvZGVUaW1lKG5vdywgbGVuID0gVElNRV9MRU4pIHtcbiAgICBpZiAoaXNOYU4obm93KSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gVElNRV9NQVgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke1RJTUVfTUFYfTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIobm93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke25vd31gKTtcbiAgICB9XG4gICAgbGV0IG1vZCwgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBjdXJyZW50TGVuID0gbGVuOyBjdXJyZW50TGVuID4gMDsgY3VycmVudExlbi0tKSB7XG4gICAgICAgIG1vZCA9IG5vdyAlIEVOQ09ESU5HX0xFTjtcbiAgICAgICAgc3RyID0gRU5DT0RJTkcuY2hhckF0KG1vZCkgKyBzdHI7XG4gICAgICAgIG5vdyA9IChub3cgLSBtb2QpIC8gRU5DT0RJTkdfTEVOO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gaW5XZWJXb3JrZXIoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVMSURcbiAqIEBwYXJhbSBzZWVkVGltZSBPcHRpb25hbCB0aW1lIHNlZWRcbiAqIEBwYXJhbSBwcm5nIE9wdGlvbmFsIFBSTkcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgVUxJRCBzdHJpbmdcbiAqIEBleGFtcGxlXG4gKiAgdWxpZCgpOyAvLyBcIjAxSE5aWEQwN001Q0VONVhBNjZFTVpTUlpXXCJcbiAqL1xuZnVuY3Rpb24gdWxpZChzZWVkVGltZSwgcHJuZykge1xuICAgIGNvbnN0IGN1cnJlbnRQUk5HID0gZGV0ZWN0UFJORygpO1xuICAgIGNvbnN0IHNlZWQgPSBEYXRlLm5vdygpIDtcbiAgICByZXR1cm4gZW5jb2RlVGltZShzZWVkLCBUSU1FX0xFTikgKyBlbmNvZGVSYW5kb20oUkFORE9NX0xFTiwgY3VycmVudFBSTkcpO1xufVxuXG5jb25zdCBDT09LSUVfTkFNRSA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiO1xuY29uc3QgZ2V0RGV2aWNlVG9rZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChjb29raWUpID0+IGNvb2tpZS5pbmNsdWRlcyhDT09LSUVfTkFNRSkpO1xuICBpZiAoZXhpc3RpbmdDb29raWUpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb29raWUuc3BsaXQoXCI9XCIpWzFdO1xuICB9XG4gIGNvbnN0IHRva2VuID0gdWxpZCgpO1xuICBzZXREZXZpY2VUb2tlbih0b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5jb25zdCBzZXREZXZpY2VUb2tlbiA9ICh0b2tlbikgPT4ge1xuICBjb25zdCBvbmVZZWFyRnJvbU5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcihvbmVZZWFyRnJvbU5vdy5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9OQU1FfT0ke3Rva2VufTsgcGF0aD0vOyBleHBpcmVzPSR7b25lWWVhckZyb21Ob3cudG9VVENTdHJpbmcoKX1gO1xufTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudHlwZSA9PT0gXCJjaGVja2JveFwiID8gaW5wdXQuY2hlY2tlZCA6IGlucHV0LnZhbHVlO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzID0gKCkgPT4ge1xuICBjb25zdCBpZCA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBlbWFpbDogYHh4XyR7aWR9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7aWR9YCxcbiAgICBjb3VudHJ5OiBgVVNgXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLkxJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICBpZiAoIWNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSByZXR1cm47XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZXRGdWxsTmFtZSA9IChmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PiB7XG4gIHJldHVybiBbZmlyc3ROYW1lLCBsYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3Qgc3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGJhbmtTZWxlY3RvclN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHtoZWlnaHQgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBpZCwgdGl0bGUsIHdpZHRoLCBoZWlnaHQgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke2lkID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke3RpdGxlID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IgPSAoYmFua3MsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0aXRsZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICBjb25zdCBiYW5rTGlzdEh0bWwgPSBiYW5rcy5tYXAoKGJhbmssIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBsb2dvSHRtbCA9IGJhbmsucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHtiYW5rLnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke2JhbmsuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke2JhbmsuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtpbmRleH1cIj5cbiAgICAgICAgICAke2xvZ29IdG1sfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7YmFuay5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHtiYW5rLmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke2JhbmtTZWxlY3RvclN0eWxlcyh7IHdpZHRoLCBoZWlnaHQgfSl9XG4gICAgICA8L3N0eWxlPlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItaGVhZGVyXCI+JHt0aXRsZSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtiYW5rTGlzdEh0bWx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICAgIGNvbnN0IGJhbmtJdGVtcyA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIik7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaG9zdCk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIikpO1xuICAgIH0pO1xuICAgIGJhbmtJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlc29sdmUoYmFua3NbaW5kZXhdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kciwgZXJyX186IGVycl9fJHEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2Rcbn0pID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJHIoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHEsIGVycl9fOiBlcnJfXyRwIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzO1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyRwKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRxKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHAsIGVycl9fOiBlcnJfXyRvIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJG8oYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcyksXG4gICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKVxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAgPSBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXzIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKGFyZ3MubG9nUHJlZml4KTtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYXJncy5hbnlDZGVDb25uZWN0aW9uKTtcbiAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGxvZ19fMihgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLmApO1xuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gYXdhaXQgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QoYXJncy5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogc2V0dXBSZXN1bHQgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYXJncy51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGxvZ19fMihgVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICAgIGlmICghYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJG8oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogYXJncy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfTtcbiAgICBsb2dfXzIoYERvaW5nIGNoZWNrb3V0Li4uYCwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBzaGlwcGluZ0FkZHJlc3NSZXF1aXJlZDogcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIGJhc2VSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGJhc2VSZXF1ZXN0KSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnYgPSBhd2FpdCBnZXRDdXJyZW50RW52KGJhc2VVcmwpO1xuICByZXR1cm4gZW52ID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSBhc3luYyAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gcGF5bWVudERhdGEuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTFdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUyXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FM10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczMgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoc2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmxvY2FsaXR5IHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBzaGlwcGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbywgZXJyX186IGVycl9fJG4gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWJhY3NcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhCQUNTRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtzID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgc2VsZWN0ZWRCYW5rO1xuICAgIGlmIChhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kbyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImJhY3NfZGlyZWN0X2RlYml0XCIsXG4gICAgICBiYWNzX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBUcnVlTGF5ZXJcbiAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogY3VzdG9tUGFyYW1zLmFjY291bnROdW1iZXIsXG4gICAgICAgIC8vIHNvcnRfY29kZTogY3VzdG9tUGFyYW1zLnNvcnRDb2RlLFxuICAgICAgICAvLyBhZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogZGlyZWN0RGViaXREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJG8oXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRvKGDilbAgQkFDUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiQkFDUyBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRtIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1lZnRcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhFRlRGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF1cbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIC8vIGluc3RpdHV0aW9uX251bWJlcjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gdHJhbnNpdF9udW1iZXI6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIC8vIGFjY291bnRfbnVtYmVyOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRuKFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiRUZUIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG4oYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1lZnRcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbShcIkVGVCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG0sIGVycl9fOiBlcnJfXyRsIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1zZXBhXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4U0VQQUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAoYXZhaWxhYmxlQmFua3MgJiYgYXZhaWxhYmxlQmFua3MubGVuZ3RoID49IDEpIHtcbiAgICAgIGxvZ19fJG0oXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlbGVjdGVkQmFuayA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IoYXZhaWxhYmxlQmFua3MsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG0oYEJhbmsgc2VsZWN0ZWQ6ICR7c2VsZWN0ZWRCYW5rLmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJG0oXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIHNlcGFfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvLyB0cnVlbGF5ZXJcbiAgICAgICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgICAgICBjb3VudHJ5X2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICAgICAgLy8gbWljcm9kZXBvc2l0XG4gICAgICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgICAgICBvd25lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdXG4gICAgICAgICAgICAvLyBpYmFuOiBjdXN0b21QYXJhbXMuaWJhbixcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kbShcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG0oYOKVsCBTRVBBIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGwoXCJTRVBBIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCwgZXJyX186IGVycl9fJGsgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kayhkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRsKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRrKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMihlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJGsoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICAgIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGFwcGxlUGF5UGF5bWVudCkgPT4ge1xuICBjb25zdCBwbUJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBzaGlwcGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuc2hpcHBpbmdDb250YWN0O1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgaWYgKHBtQmlsbGluZ0NvbnRhY3QgfHwgYmlsbGluZ0NvbnRhY3QgfHwgc2hpcHBpbmdDb250YWN0KSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwbUJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgYmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBzaGlwcGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9ICh7XG4gIHRvdGFsLFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7cHJlZmlsbC50b2tlbn1gLCBGUkFNRV9CQVNFX1VSTCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cbiAgY29uc3QgbGluZUl0ZW0gPSBwcmVmaWxsLmxpbmVfaXRlbXM/LlswXTtcbiAgaWYgKCFsaW5lSXRlbSkgcmV0dXJuIHZvaWQgMDtcbiAgcmV0dXJuIHtcbiAgICBwYXltZW50RGVzY3JpcHRpb246IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgIGxhYmVsOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ID8/IHZvaWQgMCxcbiAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICB9LFxuICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtwcmVmaWxsLnRva2VufWBcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVBcHBsZVBheVRvdGFsID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbCA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCBhbW91bnQgPSAoYW1vdW50QXRvbSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5sYWJlbCA/PyBkZWZhdWx0TGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICBpbml0aWFsUHJldmlldyxcbiAgICBwcmVmaWxsLFxuICAgIGRlZmF1bHRMYWJlbFxuICB9KTtcbiAgbGV0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KVxuICB9O1xuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRrLCBlcnJfXzogZXJyX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRqKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kayhcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRqKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRrKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJGsoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kayhcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRqKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJGooXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kaihgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJGsoYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJGsoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRqKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaSwgZXJyX186IGVycl9fJGkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kaShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGkoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kaShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGkoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kaShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5wYXltZW50UmVxdWVzdC50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kaShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGgsIGVycl9fOiBlcnJfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaChcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGgoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRoKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGgoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kaChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRoKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRoKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kaChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kaChcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kaChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRoKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRoKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hY2hcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhBQ0hGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF1cbiAgICAgICAgICAgIC8vQUNIIG1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgLy8gYWNjb3VudF9udW1iZXI6IGFjaFJlc3VsdD8ucGF5bG9hZD8uYWNjb3VudE51bWJlcixcbiAgICAgICAgICAgIC8vIGFiYV9yb3V0aW5nX251bWJlcjogYWNoUmVzdWx0Py5wYXlsb2FkPy5yb3V0aW5nTnVtYmVyLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRnKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kZyhg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRnKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRmKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRmKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRmKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCByZXF1aXJlZFVzZXJBY3Rpb25zID0gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXTtcbiAgICBjb25zdCBjb25zZW50SWQgPSByZXF1aXJlZFVzZXJBY3Rpb25zLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJGYoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhPy5yZWRpcmVjdF91cmwgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkKSB7XG4gICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCk7XG4gICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgfVxuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGUsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRlKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnBheW1lbnRSZXF1ZXN0LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGYoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRkKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZChcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRkKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGQoXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGQoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGQoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRkKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRkIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtYXBwbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGMoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGMoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGMoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsLFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kYyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHBheW1lbnRSZXF1ZXN0LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kZChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kYihcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGIoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRjKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kYihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kYyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGIoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kYihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRjKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kYyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGIoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGIoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kYyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJGIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGIoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGEoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRiKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcGFyc2VBcmdGcm9tSHJlZiA9IChocmVmLCBhcmdOYW1lKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zLmdldChhcmdOYW1lKTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1wb2NreXQtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1blBvY2t5dDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyQ5KGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJDkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRhKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyQ5KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kOShg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyQ5KGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyQ5KGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kYShg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyQ5KGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZkxlZ2FjeTNEU1BhdGgodXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyh7IHJlcXVpcmVkX3VzZXJfYWN0aW9uczogW3VzZXJBY3Rpb25dIH0sIGJhc2VVcmwpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgM0RTIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgfVxufTtcbmNvbnN0IGNoZWNrSWZMZWdhY3kzRFNQYXRoID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgdHJ5IHtcbiAgICBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShbdXNlckFjdGlvbl0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uID0gKHBmUmVzdWx0KSA9PiB7XG4gIGlmICghcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgaWYgKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgdXNlckFjdGlvbiA9IFVzZXJBY3Rpb25GRVBheWxvYWQuc2FmZVBhcnNlKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gIGlmICghdXNlckFjdGlvbi5zdWNjZXNzKSB7XG4gICAgZXJyX18kYShcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gICAgZXJyX18kYShcIlBhcnNpbmcgZXJyb3JcIiwgdXNlckFjdGlvbi5lcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5kYXRhXG4gIH07XG59O1xuY29uc3QgcmV0dXJuU3VjY2Vzc1Jlc3VsdCA9IChwcmVmaWxsTW9kZSwgcGZSZXN1bHQpID0+IHtcbiAgaWYgKHByZWZpbGxNb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBjb25zdCBwYXltZW50TWV0aG9kSWQgPSBwZlJlc3VsdC5jY19wbV9pZCA/PyBwZlJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXS5pZDtcbiAgICBpZiAoIXBheW1lbnRNZXRob2RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBwYXltZW50X21ldGhvZF9pZDogcGF5bWVudE1ldGhvZElkXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGDilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJhY2soXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgICBjb25zdCB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gPSBwcmVmaWxsLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncz8uW1widW5pZmllZF9jY1wiXSA/PyAwO1xuICAgIGxvZ19fJDgoYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZCh1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gKiAxMDApfSVgKTtcbiAgICBjb25zdCByb2xsID0gTWF0aC5yYW5kb20oKTtcbiAgICBjb25zdCB1c2VVbmlmaWVkQ0NGbG93ID0gcm9sbCA8IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbztcbiAgICBjb25zdCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSA9IHtcbiAgICAgIHJvbGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8sXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93XG4gICAgfTtcbiAgICBpZiAodXNlVW5pZmllZENDRmxvdykge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7cm9sbH0gdnMgJHt1bmlmaWVkQ0NSb2xsb3V0UmF0aW99KWApO1xuICAgICAgdHJhY2soXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICAgIHJldHVybiB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3coe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtcyxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSk7XG4gICAgfVxuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiBmYWxzZSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kOChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQ4KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDgoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyQ4KGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kOChcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kOChg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkVXNlU3RyaXBlRmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAgIGlmICghcmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRVc2VTdHJpcGVGbG93KSB7XG4gICAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgc3RyaXBlQ0MzRFNGbG93KHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNjUG1JZCA9IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQ7XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2NjUG1JZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kOChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAkeyFzaG91bGRVc2VTdHJpcGVGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcyxcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogc2hvdWxkVXNlU3RyaXBlRmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQ5KGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDkoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uM0RTQWN0aW9uVHlwZXMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl07XG5jb25zdCBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXF1aXJlZF91c2VyX2FjdGlvbnMpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gY29tbW9uM0RTQWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIGxvZ19fJDgoYOKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgdHJhY2soXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ19fJDgoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgdHJhY2soXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICBsb2dfXyQ4KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRyYWNrKFwiM2RzX2NhbmNlbGxlZFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0cmFjayhcIjNkc19mYWlsdXJlXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIHRyYWNrKFwiY29tbW9uXzNkc19jb21wbGV0ZWRcIik7XG59O1xuXG5jb25zdCBMb29wQ3J5cHRvQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNywgZXJyX186IGVycl9fJDggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwibG9vcC1jcnlwdG9cIik7XG5jb25zdCBpbml0TG9vcEZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQ3KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExvb3BDcnlwdG9DcG0pO1xuICAgIGxvZ19fJDcoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeShjaGVja291dFBheW1lbnRNZXRob2QpfWApO1xuICAgIGxvZ19fJDcoYFN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5gKTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChcbiAgICAgIGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIHByZWZpbGwudG9rZW4sXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFpc1NldHVwTW9kZSAmJiAhY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHByZWZpbGwuY3VycmVuY3kpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEN1cnJlbmN5ICR7cHJlZmlsbC5jdXJyZW5jeX0gbm90IGVuYWJsZWQgZm9yIExvb3AuIEVuYWJsZWQgY3VycmVuY2llczogJHtjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIHx8ICFwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhLm5leHRfYWN0aW9uX21ldGFkYXRhKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudFNldHVwSW5mbyA9IHByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgbGV0IHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBwYXltZW50U2V0dXBJbmZvW1wiYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgbGV0IG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBwYXltZW50U2V0dXBJbmZvW1wibWluX2F1dGhvcml6YXRpb25fYW1vdW50XCJdO1xuICAgIGNvbnN0IGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGggPSBwYXltZW50U2V0dXBJbmZvW1wiYWxsb3dfY3VzdG9tZXJfdG9fY2hvb3NlX2F1dGhcIl07XG4gICAgbGV0IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gMDtcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBNYXRoLm1heChzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IChpbml0aWFsUHJldmlldyA/IGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20gOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tKSAqIHBheW1lbnRTZXR1cEluZm9bXCJ0b2tlbl9wcmljZVwiXTtcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBNYXRoLm1heChtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50LCBjaGFyZ2VBbW91bnRVc2RBdG9tKTtcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBNYXRoLm1heChzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50KTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudFVzZEFtb3VudCA9IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgY29uc3QgY3VzdG9tZXJSZWZJZCA9IHY0KCk7XG4gICAgY29uc3Qgd2lkZ2V0UHJvcHMgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50LFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCxcbiAgICAgIGN1c3RvbWVyUmVmSWQsXG4gICAgICBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aFxuICAgIH07XG4gICAgY29uc3QgaW5pdExvb3BDb25uZWN0UHJvcHMgPSB7XG4gICAgICBhcGlLZXk6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHdpZGdldFByb3BzLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuTG9vcEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBSdW5uaW5nIExvb3AgZmxvdy4uLmApO1xuICAgIGxvZ19fJDcoXCJjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgIGxvZ19fJDcoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ3KFwibm9uQ2RlRm9ybUlucHV0c1wiLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICBsb2dfXyQ3KFwiZmxvd0NhbGxiYWNrc1wiLCBmb3JtQ2FsbGJhY2tzKTtcbiAgICBsb2dfXyQ3KFwiY3VzdG9tUGFyYW1zXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ3KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgcHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBpc0NoZWNrb3V0TW9kZSA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGN1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgfVxuICAgIGlmICghY3VzdG9tUGFyYW1zLnN1Y2Nlc3MpIHtcbiAgICAgIHRyYWNrKFwibG9vcF9wYXlfZmxvd19mYWlsdXJlXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIFN1Y2Nlc3MgaXMgbm90IHRydWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIC4uLmN1c3RvbWVyRmllbGRzLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc0NoZWNrb3V0TW9kZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNDaGVja291dE1vZGUgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQsXG4gICAgICAvLyBOT1RFOiB3ZSBkbyBoYXZlIHRoZSBjaGVja291dCBhdHRlbXB0IGlkIGhlcmUgZXZlbiBpZiBpdHMgYSBzZXR1cCwgYnV0IGZvciBub3cgd2UgZG9uJ3QgaW5jbHVkZSBpdFxuICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNoZWNrb3V0IGF0dGVtcHQgc3VwcG9ydCBmb3Igc2V0dXAgaW50ZW50cy5cbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzQ2hlY2tvdXRNb2RlID8gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogY3VzdG9tUGFyYW1zLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBjdXN0b21QYXJhbXMuc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJDcoYENvbmZpcm0gcmVzdWx0OiAke2NvbmZpcm1SZXN1bHR9YCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ3KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBsb2dfXyQ3KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIGxvZ19fJDcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNyhgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ4KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwYXlwYWxcIik7XG5jb25zdCBQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5jb25zdCBpbml0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUGF5cGFsQ3BtKTtcbiAgaWYgKCFwYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgbG9nX18kNihgUnVubmluZyBQYXlQYWwgZmxvdy4uLmApO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgeyBpc0Fub255bW91cywgdXNlUmVkaXJlY3RGbG93IH0gPSBjdXN0b21QYXJhbXMuc2V0dGluZ3MgPz8ge307XG4gICAgICBsb2dfXyQ2KGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgICBjb25zdCBjcG0gPSBQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICAgIGxvZ19fJDYoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5pc0Fub255bW91cyA/IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgbG9nX18kNihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cHJlZmlsbC5tb2RlfWApO1xuICAgICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QgPSB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiB1c2VSZWRpcmVjdEZsb3csXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgICAgfSxcbiAgICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmICh1c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgICAgbG9nX18kNihcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgICByZWRpcmVjdFVybFxuICAgICAgKTtcbiAgICAgIGxvZ19fJDYoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgICBjb25zdCBhcHByb3ZhbFNlc3Npb25JZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIik7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogaXNQYXlGaXJzdEZsb3cgPyBhcHByb3ZhbFNlc3Npb25JZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ2KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogY3BtLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogaXNQYXlGaXJzdEZsb3dcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kNyhcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBlcnIgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDUsIGVycl9fOiBlcnJfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvY2t5dC1wYXlwYWxcIik7XG5jb25zdCBQb2NreXRQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6LnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0UG9ja3l0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwb2NreXRQYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG9ja3l0UGF5cGFsQ3BtKTtcbiAgaWYgKCFwb2NreXRQYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgfVxuICBjb25zdCBzdGFydEZsb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcG9ja3l0UGF5cGFsQ3BtLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3dcbiAgfTtcbn07XG5jb25zdCBydW5Qb2NreXRQYXlwYWxGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNShgUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDUoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICBjb25zdCBjcG0gPSBQb2NreXRQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ1KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzYCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjdXN0b21QYXJhbXM/LnNldHRpbmdzO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHNldHRpbmdzPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBsb2dfXyQ1KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgY29uc3QgaXNQYXlGaXJzdEZsb3cgPSBwcmVmaWxsLm1vZGUgIT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhIWN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3dcbiAgICAgIH0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH07XG4gICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgbG9nX18kNShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB9XG4gICAgbG9nX18kNShcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKTtcbiAgICBsb2dfXyQ1KGBPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5gKTtcbiAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgIHJlZGlyZWN0VXJsXG4gICAgKTtcbiAgICBsb2dfXyQ1KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWNoZWNrb3V0QXR0ZW1wdElkKSB7XG4gICAgICBlcnJfXyQ2KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ1KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke3ZhdWx0SWR9YCk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdmF1bHRJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBsb2dfXyQ1KFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDYoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IE9KU19TVFJJUEVfTElOS19CVE5fSUQgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIjtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDQsIGVycl9fOiBlcnJfXyQ1IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1saW5rXCIpO1xuY29uc3QgU3RyaXBlTGlua0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUxpbmtGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgaW5pdFBhcmFtcyA9IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIGxvZ19fJDQoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uYCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgeyBlbGVtZW50cywgc3RyaXBlIH0gPSBhd2FpdCBjcmVhdGVTdHJpcGVFbGVtZW50cyhzdHJpcGVMaW5rQ3BtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uYCk7XG4gICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGluaXRQYXJhbXM/LmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBtb3VudEJ1dHRvbiA9ICgpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQubW91bnQoYCMke09KU19TVFJJUEVfTElOS19CVE5fSUR9YCk7XG4gICAgfTtcbiAgICBjb25zdCBkaXNtb3VudEJ1dHRvbiA9ICgpID0+IHtcbiAgICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQudW5tb3VudCgpO1xuICAgIH07XG4gICAgaWYgKGluaXRQYXJhbXM/LmRvTm90TW91bnRPbkluaXQpIHtcbiAgICAgIGxvZ19fJDQoYE5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uYCk7XG4gICAgICBtb3VudEJ1dHRvbigpO1xuICAgIH1cbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIik7XG4gICAgICBpZiAoaW5pdFBhcmFtcz8ub3ZlcnJpZGVMaW5rU3VibWl0KSB7XG4gICAgICAgIGNvbnN0IHNob3VsZFN1Ym1pdCA9IGF3YWl0IGluaXRQYXJhbXMub3ZlcnJpZGVMaW5rU3VibWl0KCk7XG4gICAgICAgIGlmICghc2hvdWxkU3VibWl0KSB7XG4gICAgICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY29uZmlybVwiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGV2ZW50KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZXZlbnQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgIGVycl9fJDUoXCJlcnJvclwiLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kNChcInBheW1lbnRNZXRob2RcIiwgcmVzdWx0LnBheW1lbnRNZXRob2QpO1xuICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUxpbmtDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHJlc3VsdC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b24sXG4gICAgICAgIGRpc21vdW50QnV0dG9uLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZ2V0RWxlbWVudEJ5SWRBc3luYyhPSlNfU1RSSVBFX0xJTktfQlROX0lEKVxuICAgICAgfVxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVMaW5rRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDQoYFJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNChgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0obm9uQ2RlRm9ybUlucHV0cywgY3VzdG9tUGFyYW1zLnN0cmlwZVBNKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDQoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBjdXN0b21QYXJhbXMuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBsb2dfXyQ0KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDQoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDQoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdHJpcGVQbVtcImxpbmtcIl0/LmVtYWlsIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICB9XG4gIGxvZ19fJDQoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLXByXCIpO1xuY29uc3QgU3RyaXBlUHJDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgaW5pdFN0cmlwZVByRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZVByQ3BtKTtcbiAgICBsb2dfXyQzKGBJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgbG9nX18kMyhgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3QgcHIgPSBhd2FpdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdChcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tLFxuICAgICAgaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBpc1NldHVwTW9kZVxuICAgICk7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudGApO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAoY2FuTWFrZVBheW1lbnQgPT09IG51bGwpIHtcbiAgICAgIGVycl9fJDQoYGNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxgKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIH1cbiAgICBsb2dfXyQzKGBTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRgLCBjYW5NYWtlUGF5bWVudCk7XG4gICAgY29uc3QgcnVuU3RyaXBlUHJGbG93MiA9IChwcm92aWRlciwgcGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgICBwcixcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LCBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheSB9LFxuICAgICAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHByLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlUHJGbG93JDEgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGluaXRSZXN1bHRcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDMoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBpZiAoY3VzdG9tUGFyYW1zLnByb3ZpZGVyICE9PSBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMyhgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIGNvbnN0IGFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSB0eXBlb2Ygb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PT0gXCJmdW5jdGlvblwiID8gb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgdXBkYXRlUHJXaXRoQW1vdW50KHByLCBvdmVycmlkZS5hbW91bnQsIG92ZXJyaWRlLnBlbmRpbmcsIGFwcGxlUGF5UGF5bWVudFJlcXVlc3QsIG92ZXJyaWRlLmxhYmVsKTtcbiAgICB9XG4gICAgbG9nX18kMyhgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDMoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDMoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQzKGBQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmAsIG5vbkNkZUZvcm1GaWVsZHMpO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBmaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgbG9nX18kMyhgQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLmApO1xuICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlblxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kMyhgUGVyZm9ybWluZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbUV2dCkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG1FdnQucGF5ZXJOYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnBheW1lbnRNZXRob2Q/LmJpbGxpbmdfZGV0YWlscz8uYWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQuc2hpcHBpbmdBZGRyZXNzO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBzaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcz8uY291bnRyeSB8fCBzaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiXCI7XG4gIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgaWYgKGZpcnN0TmFtZSB8fCBsYXN0TmFtZSkge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBmaXJzdE5hbWU7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICB9XG4gIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZywgc3RyaXBlQXBwbGVQYXksIGxhYmVsKSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogbGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSxcbiAgICBjdXJyZW5jeTogYW1vdW50LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IHN0cmlwZUFwcGxlUGF5XG4gIH0pO1xufTtcbmNvbnN0IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7cmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIH1cbiAgcmV0dXJuIFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59O1xuXG5jb25zdCBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0ID0gKGNwbXMsIHdpdGhQcm92aWRlciwgd2l0aFByb2Nlc3NvcikgPT4ge1xuICBjb25zdCBtYXRjaGVzID0gY3Btcy5maWx0ZXIoKGNwbSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXNQcm9jZXNzb3IgPSB3aXRoUHJvY2Vzc29yID09PSB2b2lkIDAgPyB0cnVlIDogY3BtLnByb2Nlc3Nvcl9uYW1lID09PSB3aXRoUHJvY2Vzc29yO1xuICAgIGNvbnN0IG1hdGNoZXNQcm92aWRlciA9IGNwbS5wcm92aWRlciA9PT0gd2l0aFByb3ZpZGVyO1xuICAgIHJldHVybiBtYXRjaGVzUHJvY2Vzc29yICYmIG1hdGNoZXNQcm92aWRlcjtcbiAgfSk7XG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgICB0cmFjayhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICAgIHByb3ZpZGVyOiB3aXRoUHJvdmlkZXIsXG4gICAgICBwcm9jZXNzb3I6IHdpdGhQcm9jZXNzb3IsXG4gICAgICBjcG1zXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVQckZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVQckZsb3ckMVxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUxpbmtGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IGluaXRQb2NreXRQYXlwYWxGbG93LFxuICAgIHJ1bjogcnVuUG9ja3l0UGF5cGFsRmxvd1xuICB9LFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5QYXlwYWxGbG93XG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QXBwbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QUNIRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhFRlQ6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEVGVEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QkFDUzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4QkFDU0Zsb3dcbiAgfSxcbiAgYWlyd2FsbGV4U0VQQToge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4U0VQQUZsb3dcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogaW5pdExvb3BGbG93LFxuICAgIHJ1bjogcnVuTG9vcEZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRBcHBsZVBheUZsb3dcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5Hb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5Hb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QWR5ZW5BcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkFwcGxlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMiwgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICBjb25zdCBwdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAoaW5pdFBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHB1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IGluaXRGbG93KGluaXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQyKGDinJQgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpbml0UmVzdWx0KTtcbiAgICAgICAgcHVibGlzaGVyLnNldChpbml0UmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fJDMoYPCdma0gJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGdldEVycm9yTWVzc2FnZShlcnJvciksIFwiRGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICBwdWJsaXNoZXIudGhyb3coZXJyb3IsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFsbEluaXRGbG93cyA9IGFzeW5jIChmbG93cywgY29udGV4dCwgZm9ybUNhbGxiYWNrcykgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGZsb3dzKS5tYXAoKGZsb3cpID0+IGZsb3cuaW5pdGlhbGl6ZSh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkpKTtcbn07XG5jb25zdCBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgICAvLyBTdHJpcGUgUFJcbiAgICBzdHJpcGVQUjogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdCksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBMaW5rXCIsIE9qc0Zsb3dzLnN0cmlwZUxpbmsuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICAgIGFpcndhbGxleEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgICBhaXJ3YWxsZXhBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gTG9vcFxuICAgIGxvb3A6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiTG9vcFwiLCBPanNGbG93cy5sb29wQ3J5cHRvLmluaXQpLFxuICAgIC8vIFBheVBhbFxuICAgIHBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQYXlQYWxcIiwgT2pzRmxvd3MucGF5cGFsLmluaXQpLFxuICAgIC8vIFBvY2t5dCBQYXlQYWxcbiAgICBwb2NreXRQYXlwYWw6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiUG9ja3l0IFBheVBhbFwiLCBPanNGbG93cy5wb2NreXRQYXlwYWwuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgICBhdXRob3JpemVOZXRBcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEdvb2dsZVBheVxuICAgIGFkeWVuR29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFkeWVuIEdvb2dsZVBheVwiLCBPanNGbG93cy5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBZHllbiBBcHBsZVBheVxuICAgIGFkeWVuQXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gQXBwbGVQYXlcIiwgT2pzRmxvd3MuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMik7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZWN0RnJhbWV3b3JrKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChuZXh0V2luZG93Py5uZXh0IHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpIHtcbiAgICAgIHJldHVybiBcIm5leHRqc1wiIC8qIE5leHRKUyAqLztcbiAgICB9XG4gICAgY29uc3QgbnV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAobnV4dFdpbmRvdz8uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpIHtcbiAgICAgIHJldHVybiBcIm51eHRcIiAvKiBOdXh0ICovO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwicmVhY3RcIikpIHx8ICEhQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBfcmVhY3RSb290Q29udGFpbmVyIGRvZXNuJ3QgZXhpc3RcbiAgICAgIChub2RlKSA9PiBub2RlLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICApKSB7XG4gICAgICByZXR1cm4gXCJyZWFjdFwiIC8qIFJlYWN0ICovO1xuICAgIH1cbiAgICBjb25zdCB2dWVXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKHZ1ZVdpbmRvdz8uVnVlIHx8IHZ1ZVdpbmRvdz8uX19WVUVfXykge1xuICAgICAgcmV0dXJuIFwidnVlXCIgLyogVnVlICovO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKSkge1xuICAgICAgcmV0dXJuIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi87XG4gICAgfVxuICAgIHJldHVybiBcInZhbmlsbGFcIiAvKiBWYW5pbGxhICovO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcInVua25vd25cIiAvKiBVbmtub3duICovO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yaykge1xuICB0cnkge1xuICAgIHN3aXRjaCAoZnJhbWV3b3JrKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIiAvKiBSZWFjdCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJuZXh0anNcIiAvKiBOZXh0SlMgKi86IHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgICAgICBjb25zdCBuZXh0V2luZG93ID0gd2luZG93O1xuICAgICAgICByZXR1cm4gbmV4dFdpbmRvdz8ubmV4dD8udmVyc2lvbiB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fPy5idWlsZElkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiIC8qIE51eHQgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwidnVlXCIgLyogVnVlICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovOiB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50MiA9IGdldFdpbmRvd1NhZmUoKT8uZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IG5nVmVyc2lvbkVsID0gZG9jdW1lbnQyPy5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbmdWZXJzaW9uRWwgPyBuZ1ZlcnNpb25FbC5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrSW5mbygpIHtcbiAgY29uc3QgZnJhbWV3b3JrID0gZGV0ZWN0RnJhbWV3b3JrKCk7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRGcmFtZXdvcmtWZXJzaW9uKGZyYW1ld29yayk7XG4gIHJldHVybiB7IGZyYW1ld29yaywgdmVyc2lvbiB9O1xufVxuXG5jb25zdCBnZXRGcmF1ZE1ldGFkYXRhID0gKCkgPT4ge1xuICBjb25zdCBzY3JlZW5faGVpZ2h0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmhlaWdodCA6IG51bGw7XG4gIGNvbnN0IHNjcmVlbl93aWR0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGw7XG4gIGNvbnN0IGNvbG9yX2RlcHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLmNvbG9yRGVwdGggOiBudWxsO1xuICBjb25zdCBqYXZhX2VuYWJsZWQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlO1xuICBjb25zdCB1c2VyX2FnZW50ID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gIGNvbnN0IGFjY2VwdF9oZWFkZXIgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IGxhbmd1YWdlID0gbnVsbDtcbiAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgbGFuZ3VhZ2UgPSB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlID8gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA6IHdpbmRvdy5uYXZpZ2F0b3IuYnJvd3Nlckxhbmd1YWdlO1xuICB9XG4gIGNvbnN0IHRpbWVfem9uZV9vZmZzZXQgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGgsXG4gICAgamF2YV9lbmFibGVkLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBzY3JlZW5faGVpZ2h0LFxuICAgIHNjcmVlbl93aWR0aCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0LFxuICAgIHVzZXJfYWdlbnQsXG4gICAgYWNjZXB0X2hlYWRlclxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xudmFyIFBheW1lbnRQcm92aWRlclR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXltZW50UHJvdmlkZXJUeXBlMikgPT4ge1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFDSFwiXSA9IFwiYWNoXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiRUZUXCJdID0gXCJlZnRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJCQUNTXCJdID0gXCJiYWNzXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU0VQQVwiXSA9IFwic2VwYVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkFQUExFX1BBWVwiXSA9IFwiYXBwbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JFRElUX0NBUkRcIl0gPSBcImNyZWRpdF9jYXJkXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiR09PR0xFX1BBWVwiXSA9IFwiZ29vZ2xlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNUUklQRV9MSU5LXCJdID0gXCJzdHJpcGVfbGlua1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSWVBUT1wiXSA9IFwiY3J5cHRvXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiUEFZUEFMXCJdID0gXCJwYXlwYWxcIjtcbiAgcmV0dXJuIFBheW1lbnRQcm92aWRlclR5cGUyO1xufSkoUGF5bWVudFByb3ZpZGVyVHlwZSB8fCB7fSk7XG5cbmNvbnN0IGdldEFwcGxlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYXBwbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXksIGluaXRGbG93cy5hZHllbkFwcGxlUGF5XTtcbiAgY29uc3QgYXBwbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBhcHBsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNBcHBsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgaWYgKGlzQXBwbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhcHBsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYXBwbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBcHBsZVBheUZsb3coYXBwbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXksIGluaXRGbG93cy5hZHllbkdvb2dsZVBheV07XG4gIGNvbnN0IGdvb2dsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGdvb2dsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzR29vZ2xlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgaWYgKGlzR29vZ2xlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGdvb2dsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEdvb2dsZVBheUZsb3coZ29vZ2xlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QXBwbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IHN0YXJ0R29vZ2xlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInRyYWNlclwiKTtcbmNvbnN0IGluaXRUcmFjZXJTYWZlID0gKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgdHJ5IHtcbiAgICBpbml0VHJhY2VyVW5zYWZlKHZlcnNpb24sIGJhc2VVcmwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVycl9fJDEoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7ZXJyb3J9YCk7XG4gIH1cbn07XG5sZXQgZ2xvYmFsVHJhY2VyO1xuY29uc3QgaW5pdFRyYWNlclVuc2FmZSA9IGFzeW5jICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBjb25zdCBzZGtUcmFjZVdlYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDZ9fi5qcycpO1xuICBjb25zdCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFdlYlRyYWNlclByb3ZpZGVyIH0gPSBzZGtUcmFjZVdlYjtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uRmV0Y2ggPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBlfX4uanMnKTtcbiAgY29uc3QgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9ID0gaW5zdHJ1bWVudGF0aW9uRmV0Y2g7XG4gIGNvbnN0IGNvbnRleHRab25lID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZH1+LmpzJyk7XG4gIGNvbnN0IHsgWm9uZUNvbnRleHRNYW5hZ2VyIH0gPSBjb250ZXh0Wm9uZTtcbiAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwaH1+LmpzJyk7XG4gIGNvbnN0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gPSBpbnN0cnVtZW50YXRpb247XG4gIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGp9fi5qcycpO1xuICBjb25zdCB7IFJlc291cmNlIH0gPSByZXNvdXJjZXM7XG4gIGNvbnN0IGRldGVjdFJlc291cmNlcyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLSF+ezAwbH1+LmpzJykudGhlbihuID0+IG4uZCk7XG4gIGNvbnN0IHsgZGV0ZWN0UmVzb3VyY2VzU3luYyB9ID0gZGV0ZWN0UmVzb3VyY2VzO1xuICBjb25zdCBleHBvcnRlclRyYWNlT3RscCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMG19fi5qcycpO1xuICBjb25zdCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gPSBleHBvcnRlclRyYWNlT3RscDtcbiAgY29uc3QgcHJvcGFnYXRvckIzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwaX1+LmpzJyk7XG4gIGNvbnN0IHsgQjNQcm9wYWdhdG9yLCBCM0luamVjdEVuY29kaW5nIH0gPSBwcm9wYWdhdG9yQjM7XG4gIGNvbnN0IHNka1RyYWNlQmFzZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMDF9fi5qcycpO1xuICBjb25zdCB7IEJhdGNoU3BhblByb2Nlc3NvciB9ID0gc2RrVHJhY2VCYXNlO1xuICBsb2dfXyQxKGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke3ZlcnNpb259IGFuZCBiYXNlVXJsICR7YmFzZVVybH1gKTtcbiAgY29uc3QgY29sbGVjdG9yVXJsID0gZ2V0Q29sbGVjdG9yVXJsKGJhc2VVcmwpO1xuICBsb2dfXyQxKGBVc2luZyBjb2xsZWN0b3IgVVJMICR7Y29sbGVjdG9yVXJsfWApO1xuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7IHVybDogY29sbGVjdG9yVXJsIH0pO1xuICBjb25zdCBiYXNlQXR0cnMgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogdmVyc2lvbixcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYlRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZTogbmV3IFJlc291cmNlKGJhc2VBdHRycykubWVyZ2UoZGV0ZWN0UmVzb3VyY2VzU3luYygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IobmV3IENvbnNvbGVTcGFuRXhwb3J0ZXIoKSksXG4gICAgICBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgcHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgWm9uZUNvbnRleHRNYW5hZ2VyKCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBCM0luamVjdEVuY29kaW5nLk1VTFRJX0hFQURFUiB9KVxuICB9KTtcbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgRmV0Y2hJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBnbG9iYWxUcmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICBsb2dfXyQxKGBUcmFjZXIgaW5pdGlhbGl6ZWRgKTtcbiAgcmV0dXJuIGdsb2JhbFRyYWNlcjtcbn07XG5jb25zdCBnZXRDb2xsZWN0b3JVcmwgPSAoZnJvbUJhc2VVcmwpID0+IHtcbiAgY29uc3QgYmFzZUhvc3RuYW1lID0gbmV3IFVSTChmcm9tQmFzZVVybCkuaG9zdG5hbWU7XG4gIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIjtcbiAgfSBlbHNlIGlmIChiYXNlSG9zdG5hbWUgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCI7XG4gIH1cbiAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChnZXRDbGVhbk9yaWdpbihldmVudC5vcmlnaW4pICE9PSBnZXRDbGVhbk9yaWdpbih0aGlzLmJhc2VVcmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wic291cmNlXCJdICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGV2ZW50RGF0YSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHBheWxvYWQub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbZWxlbWVudElkXSA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmFsaWRhdGVFdmVudCA9IChldmVudERhdGEpID0+IHtcbiAgICAgIGlmIChldmVudERhdGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgZXZlbnREYXRhLmZvcm1JZCk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzID0ge307XG4gICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUlkO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gZm9ybUNhbGxiYWNrcztcbiAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaW50ZXJuYWxDYWxsYmFja3M7XG4gIH1cbn1cbmNvbnN0IGdldENsZWFuT3JpZ2luID0gKHVybCkgPT4ge1xuICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNvbnN0IHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyA9IChpbml0UHJGbG93cywgY29udGV4dCwgY2FsbGJhY2tzKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFIgfSA9IGluaXRQckZsb3dzO1xuICBzdHJpcGVQUi5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHJlc3VsdC5sb2FkZWRWYWx1ZTtcbiAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkFwcGxlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJhcHBsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICBydW5TdHJpcGVQckZsb3coXCJnb29nbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsbGJhY2tzLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChmaW5hbFN0YXR1cyk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5TdHJpcGVQckZsb3cgPSAocHJvdmlkZXIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MsIHBhcmFtcykgPT4ge1xuICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgaW5pdFJlc3VsdFxuICB9KTtcbn07XG5cbmNvbnN0IEdFTkVSSUNfQ09OTl9FUlIgPSBgVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuYDtcbmNvbnN0IHsgbG9nX18sIGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLWZvcm1cIik7XG5jbGFzcyBPcGVuUGF5Rm9ybSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgLy8gJ2Vudmlyb25tZW50JzogLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsnOiBmcmFtZXdvcmssXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yay52ZXJzaW9uJzogdmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGV4dC53aXRoKHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3BhbiksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjZGVCcmlkZ2VJZnJhbWUgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIjtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCI7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjZGVCcmlkZ2VJZnJhbWUubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm1vdW50KFwiYm9keVwiKTtcbiAgICAgICAgICBsb2dfXyhcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlTG9hZGVkID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogR0VORVJJQ19DT05OX0VSUlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIik7XG4gICAgICAgICAgbG9nX18oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgY2RlQ29ublNwYW4gPSB0cmFjZXI/LnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2RlQ29ublNwYW4/LmVuZCgpO1xuICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKTtcbiAgICAgICAgICBhd2FpdCBzZXRVc2VyRGV2aWNlVG9rZW4oYW55Q2RlQ29ubiwgdGhpcy5kZXZpY2VUb2tlbik7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGNkZUxvYWRlZCxcbiAgICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgICBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgbG9nX18oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIik7XG4gICAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoY2RlTG9hZGVkLnRvdGFsQW1vdW50QXRvbXMsIGNkZUxvYWRlZC5jdXJyZW5jeSk7XG4gICAgICAgICAgbG9nX18oXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICB0cmFjayhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB0cmFjayhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNwYW4/LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChoZWlnaHQpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC50eXBlID09PSBFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZGVkXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlcnJNc2cpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGVyck1zZyksIGVyck1zZyk7XG4gICAgICAgIHRyYWNrKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJNc2dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZWxlbWVudFZhbHVlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIik7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpO1xuICAgICAgICAgIHRyYWNrKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogdHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogZWxlbWVudC50eXBlLCBub2RlOiBlbGVtZW50Lm5vZGUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgICBpZiAob3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgICB9XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKTtcbiAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSk7XG4gICAgICAgICAgY29ubi50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgICAgICBpZiAoIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSB7XG4gICAgICAgICAgICB0aGlzLmFueUNkZUNvbm4uc2V0KGNvbm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKS5jYXRjaCgoZXJyKSA9PiBlcnJfXyhcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgZXJyKSk7XG4gICAgfTtcbiAgICB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogcGFyYW1zPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJzdWJtaXRfY2FyZFwiLCB7IC4uLnBhcmFtcyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICB7XG4gICAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGFwcGxlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzQXBwbGVQYXlBdmFpbGFibGUgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IGdvb2dsZVBheVByb2Nlc3NvcnMsIGlzQXZhaWxhYmxlOiBpc0dvb2dsZVBheUF2YWlsYWJsZSB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhcbiAgICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBjb25zdCBwYXlwYWxBdmFpbGFibGUgPSBwYXlwYWxGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBwb2NreXRQYXlwYWxBdmFpbGFibGUgPSBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgICAobWV0aG9kKSA9PiBtZXRob2QucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgbWV0aG9kLnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsb29wRmxvd1Jlc3VsdCA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IGxvb3BDcnlwdG9BdmFpbGFibGUgPSBsb29wRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWV0aG9kcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5hcHBsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogYXBwbGVQYXlQcm9jZXNzb3JzLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogaXNBcHBsZVBheUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5nb29nbGVQYXksXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0dvb2dsZVBheUF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5wYXlwYWwsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IHBheXBhbEF2YWlsYWJsZSA/IFtQYXltZW50UHJvY2Vzc29yLkVudW0ucGF5cGFsXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogcGF5cGFsQXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcG9ja3l0UGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wb2NreXRdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwb2NreXRQYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0byxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogbG9vcENyeXB0b0F2YWlsYWJsZSA/IFtQYXltZW50UHJvY2Vzc29yLkVudW0ubG9vcF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGxvb3BDcnlwdG9BdmFpbGFibGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGluaXRGbG93TmFtZU1hcCA9IHtcbiAgICAgICAgICAgIHBheXBhbDogU3VibWl0TWV0aG9kcy5wYXlwYWwsXG4gICAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgICBhZHllbkdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICAgIGFkeWVuQXBwbGVQYXk6IFN1Ym1pdE1ldGhvZHMuYWR5ZW5BcHBsZVBheVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgbWV0aG9kc19vbGQgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChba2V5LCBmbG93XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRGbG93TmFtZU1hcFtrZXldID8/IGtleTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogZmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUgPz8gZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5tZXRob2RzX29sZCwgLi4ubWV0aG9kc107XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAobWV0aG9kLCBzZXR0aW5ncykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVycl9fKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyYWNrKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZCwgc2V0dGluZ3MgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5ncyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmxvb3BDcnlwdG86IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRBcHBsZVBheVByb2Nlc3NvcnModGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdyB9ID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhHb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFpcndhbGxleEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWlyd2FsbGV4QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml6ZU5ldEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZU5ldEFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0QXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgICAgIGVycl9fKFxuICAgICAgICAgICAgICAgICAgICBgYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml6ZU5ldEFwcGxlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5Hb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZHllbkdvb2dsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR5ZW5BcHBsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYWR5ZW5BcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuQXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnROZXZlcihtZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZGVzdHJveVwiKTtcbiAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKSB7XG4gICAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG4gICAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgICBkZXRhY2hFcnJvckxpc3RlbmVycygpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICAgIHRyYWNrKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChuZXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MobmV3Q2FsbGJhY2tzKTtcbiAgICB9O1xuICAgIE9wZW5QYXlGb3JtLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpO1xuICAgIHRoaXMub2pzVmVyc2lvbiA9IFwiMC41LjRcIjtcbiAgICB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCIwLjUuNFwiO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfTtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3QoY29uZmlnKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gO1xuICAgIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9O1xuICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmRldmljZVRva2VuID0gZ2V0RGV2aWNlVG9rZW4oKTtcbiAgICBhdHRhY2hFcnJvckxpc3RlbmVycygpO1xuICAgIGNvbnN0IHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH0gPSBnZXRGcmFtZXdvcmtJbmZvKCk7XG4gICAgZ2V0Q3VycmVudEVudih0aGlzLmJhc2VVcmwpLnRoZW4oKGVudmlyb25tZW50KSA9PiB7XG4gICAgICBpZiAoIW1ldHJpY3NQdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbnRleHQgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgICBmcmFtZXdvcmssXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIG1ldHJpY3NQdWJsaXNoZXIuc2V0KG1ldHJpY3NDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cmFjayhcImZvcm1faW5pdFwiKTtcbiAgICBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbik7XG4gICAgaWYgKGNvbmZpZy5hbGxvd1RyYWNpbmcgPT09IHRydWUpIHtcbiAgICAgIGluaXRUcmFjZXJTYWZlKHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKTtcbiAgICB9XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMub2pzRmxvd3MgPSBPanNGbG93cztcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYXNzaWduQXNTaW5nbGV0b24gPSAoZm9ybSkgPT4ge1xuICAgICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgICB9XG4gICAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpbmRvd1tcIm9qc1wiXSA/PyBudWxsO1xuICAgIH07XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAoY29uZmlnLCBjZGVMb2FkZWRQYXlsb2FkLCBhbnlDZGVDb25uZWN0aW9uLCBmb3JtRGl2KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiBjb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgYmFzZVVybDogbmV3IFVSTChjb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgICBmb3JtRGl2LFxuICAgICAgICBlbGVtZW50c1Nlc3Npb25JZDogY2RlTG9hZGVkUGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGNkZUxvYWRlZFBheWxvYWQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY3VzdG9tSW5pdFBhcmFtczogY29uZmlnLmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gICAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogY29uZmlnLnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoY2FsbGVyID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCBjdXJyZW50SW5zdGFuY2UgPSBPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlYnVnSW5mbyA9IHtcbiAgICAgIGNhbGxlcixcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogY3VycmVudEluc3RhbmNlPy5mb3JtSWQgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9O1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHtjYWxsZXJ9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke2RlYnVnSW5mby50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke2RlYnVnSW5mby5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7ZGVidWdJbmZvLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtkZWJ1Z0luZm8uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50SW5zdGFuY2UgfHwgY3VycmVudEluc3RhbmNlLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBDb250ZXh0QVBJIGFzIEMsIERpYWdBUEkgYXMgRCwgRmllbGROYW1lIGFzIEYsIElOVkFMSURfU1BBTl9DT05URVhUIGFzIEksIE9wZW5QYXlGb3JtIGFzIE8sIFByb3h5VHJhY2VyIGFzIFAsIFJPT1RfQ09OVEVYVCBhcyBSLCBTcGFuS2luZCBhcyBTLCBUcmFjZUZsYWdzIGFzIFQsIERpYWdMb2dMZXZlbCBhcyBhLCBjcmVhdGVDb250ZXh0S2V5IGFzIGIsIGNvbnRleHQgYXMgYywgaXNWYWxpZFRyYWNlSWQgYXMgZCwgaXNWYWxpZFNwYW5JZCBhcyBlLCBTcGFuU3RhdHVzQ29kZSBhcyBmLCBnZXRHbG9iYWwgYXMgZywgSU5WQUxJRF9TUEFOSUQgYXMgaCwgaXNTcGFuQ29udGV4dFZhbGlkIGFzIGksIElOVkFMSURfVFJBQ0VJRCBhcyBqLCBQcm94eVRyYWNlclByb3ZpZGVyIGFzIGssIFN1Ym1pdE1ldGhvZHMgYXMgbCwgcmVnaXN0ZXJHbG9iYWwgYXMgciwgdHJhY2UgYXMgdCwgdW5yZWdpc3Rlckdsb2JhbCBhcyB1IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBRW5CLFNBQVNDLEdBQVNDLEdBQVFDLEdBQVc7QUFDbkMsTUFBSUMsSUFBaUIsT0FBTztBQUM1QixFQUFBQSxJQUFpQkEsRUFBZUYsR0FBUUMsQ0FBUyxJQUFJRCxFQUFPLFlBQVlDO0FBQzFFO0FBQ0EsU0FBU0UsR0FBU0gsR0FBUUksR0FBSTtBQUM1QixFQUFJQSxNQUFPLFdBQ1RBLElBQUtKLEVBQU87QUFHZCxNQUFJSyxJQUFvQixNQUFNO0FBQzlCLEVBQUFBLEtBQXFCQSxFQUFrQkwsR0FBUUksQ0FBRTtBQUNuRDtBQUVBLElBQUlFLEtBQWMsMkJBQVk7QUFDNUIsTUFBSUMsSUFBaUIsU0FBdUJDLEdBQUdDLEdBQUc7QUFDaEQsV0FBQUYsSUFBaUIsT0FBTyxrQkFBa0I7QUFBQSxNQUN4QyxXQUFXLENBQUM7QUFBQSxJQUNkLGFBQWEsU0FBUyxTQUFVQyxHQUFHQyxHQUFHO0FBQ3BDLE1BQUFELEVBQUUsWUFBWUM7QUFBQSxJQUNoQixLQUFLLFNBQVVELEdBQUdDLEdBQUc7QUFDbkIsZUFBU0MsS0FBS0Q7QUFDWixRQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEdBQUdDLENBQUMsTUFBR0YsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDO0FBQUEsSUFFOUQsR0FFT0gsRUFBZUMsR0FBR0MsQ0FBQztBQUFBLEVBQzVCO0FBRUEsU0FBTyxTQUFVRCxHQUFHQyxHQUFHO0FBQ3JCLFFBQUksT0FBT0EsS0FBTSxjQUFjQSxNQUFNLEtBQU0sT0FBTSxJQUFJLFVBQVUseUJBQXlCLE9BQU9BLENBQUMsSUFBSSwrQkFBK0I7QUFFbkksSUFBQUYs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QyxHQUFrQnBhLEdBQWtCakosT0FDL0Q7QUFBQSxFQUNMLHFCQUFxQmxlLEVBQU87QUFBQSxFQUM1QixTQUFTLElBQUksSUFBSUEsRUFBTyxXQUFXeWIsRUFBYyxFQUFFO0FBQUEsRUFDbkQsU0FBQXlDO0FBQUEsRUFDQSxtQkFBbUJxakIsRUFBaUI7QUFBQSxFQUNwQyx3QkFBd0JBLEVBQWlCO0FBQUEsRUFDekMsa0JBQUFwYTtBQUFBLEVBQ0Esa0JBQWtCbm5CLEVBQU8sb0JBQW9CLENBQUM7QUFBQSxFQUM5QyxtQ0FBbUNBLEVBQU87QUFDNUM7QUF0bUJOLElBQU13aEMsS0FBTnhDOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJFbGVtZW50VHlwZSIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkVsZW1lbnRFdmVudCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgIlRocmVlRFNTdGF0dXMiLCAiVGhyZWVEU1N0YXR1czIiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJBV1hCYW5rIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgIkVGVEZvcm1EYXRhIiwgIkJBQ1NGb3JtRGF0YSIsICJTRVBBRm9ybURhdGEiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJpc1N1Ym1pdHRpbmciLCAicGFyYW1zIiwgIl9hIiwgIl9iIiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgIk9qc0Vudmlyb25tZW50IiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJlbnZDYWNoZSIsICJnZXRDdXJyZW50RW52IiwgImJhc2VVcmwiLCAicmVzcG9uc2UiLCAicmVzIiwgImV4Y2x1ZGVQcm9wcyIsICJwcm9wcyIsICJrZXkiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJHMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJ0cmFjayIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAib25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciIsICJlcnJvck1lc3NhZ2UiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIm9uVW5jYXVnaHRFcnJvciIsICJhdHRhY2hFcnJvckxpc3RlbmVycyIsICJkZXRhY2hFcnJvckxpc3RlbmVycyIsICJTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEiLCAib3VyQ3VycmVuY3lUb1RoZWlycyIsICJnZXRMb2FkZWRTdHJpcGUiLCAicHVibGlzaGFibGVLZXkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJyZXN1bHRTdGF0dXMiLCAiX2dsb2JhbFRoaXMiLCAiVkVSU0lPTiIsICJyZSIsICJfbWFrZUNvbXBhdGliaWxpdHlDaGVjayIsICJvd25WZXJzaW9uIiwgImFjY2VwdGVkVmVyc2lvbnMiLCAicmVqZWN0ZWRWZXJzaW9ucyIsICJteVZlcnNpb25NYXRjaCIsICJvd25WZXJzaW9uUGFyc2VkIiwgImdsb2JhbFZlcnNpb24iLCAiX3JlamVjdCIsICJ2IiwgIl9hY2NlcHQiLCAiZ2xvYmFsVmVyc2lvbk1hdGNoIiwgImdsb2JhbFZlcnNpb25QYXJzZWQiLCAiaXNDb21wYXRpYmxlIiwgIm1ham9yIiwgIkdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkiLCAiX2dsb2JhbCIsICJyZWdpc3Rlckdsb2JhbCIsICJ0eXBlIiwgImRpYWciLCAiYWxsb3dPdmVycmlkZSIsICJhcGkiLCAiZ2V0R2xvYmFsIiwgInVucmVnaXN0ZXJHbG9iYWwiLCAiX19yZWFkJDMiLCAibyIsICJuIiwgIm0iLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5JDMiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiRGlhZ0NvbXBvbmVudExvZ2dlciIsICJsb2dQcm94eSIsICJmdW5jTmFtZSIsICJuYW1lc3BhY2UiLCAibG9nZ2VyIiwgIkRpYWdMb2dMZXZlbCIsICJjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIiLCAibWF4TGV2ZWwiLCAiX2ZpbHRlckZ1bmMiLCAidGhlTGV2ZWwiLCAidGhlRnVuYyIsICJfX3JlYWQkMiIsICJfX3NwcmVhZEFycmF5JDIiLCAiQVBJX05BTUUkMiIsICJEaWFnQVBJIiwgIl9sb2dQcm94eSIsICJzZWxmIiwgInNldExvZ2dlciIsICJvcHRpb25zT3JMb2dMZXZlbCIsICJvbGRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgInN0YWNrIiwgIm9wdGlvbnMiLCAiY3JlYXRlQ29udGV4dEtleSIsICJkZXNjcmlwdGlvbiIsICJCYXNlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgIlJPT1RfQ09OVEVYVCIsICJfX3JlYWQkMSIsICJfX3NwcmVhZEFycmF5JDEiLCAiTm9vcENvbnRleHRNYW5hZ2VyIiwgIl9jb250ZXh0IiwgInRhcmdldCIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJBUElfTkFNRSQxIiwgIk5PT1BfQ09OVEVYVF9NQU5BR0VSIiwgIkNvbnRleHRBUEkiLCAiY29udGV4dE1hbmFnZXIiLCAiVHJhY2VGbGFncyIsICJJTlZBTElEX1NQQU5JRCIsICJJTlZBTElEX1RSQUNFSUQiLCAiSU5WQUxJRF9TUEFOX0NPTlRFWFQiLCAiTm9uUmVjb3JkaW5nU3BhbiIsICJfc3BhbkNvbnRleHQiLCAiX2tleSIsICJfYXR0cmlidXRlcyIsICJfbmFtZSIsICJfbGluayIsICJfbGlua3MiLCAiX3N0YXR1cyIsICJfZW5kVGltZSIsICJfZXhjZXB0aW9uIiwgIl90aW1lIiwgIlNQQU5fS0VZIiwgImdldFNwYW4iLCAiZ2V0QWN0aXZlU3BhbiIsICJzZXRTcGFuIiwgInNwYW4iLCAiZGVsZXRlU3BhbiIsICJzZXRTcGFuQ29udGV4dCIsICJzcGFuQ29udGV4dCIsICJnZXRTcGFuQ29udGV4dCIsICJWQUxJRF9UUkFDRUlEX1JFR0VYIiwgIlZBTElEX1NQQU5JRF9SRUdFWCIsICJpc1ZhbGlkVHJhY2VJZCIsICJ0cmFjZUlkIiwgImlzVmFsaWRTcGFuSWQiLCAic3BhbklkIiwgImlzU3BhbkNvbnRleHRWYWxpZCIsICJ3cmFwU3BhbkNvbnRleHQiLCAiY29udGV4dEFwaSIsICJOb29wVHJhY2VyIiwgIm5hbWUiLCAicm9vdCIsICJwYXJlbnRGcm9tQ29udGV4dCIsICJpc1NwYW5Db250ZXh0IiwgImFyZzIiLCAiYXJnMyIsICJhcmc0IiwgIm9wdHMiLCAiY3R4IiwgImNvbnRleHRXaXRoU3BhblNldCIsICJOT09QX1RSQUNFUiIsICJQcm94eVRyYWNlciIsICJfcHJvdmlkZXIiLCAidmVyc2lvbiIsICJfb3B0aW9ucyIsICJfZm4iLCAidHJhY2VyIiwgIk5vb3BUcmFjZXJQcm92aWRlciIsICJfdmVyc2lvbiIsICJOT09QX1RSQUNFUl9QUk9WSURFUiIsICJQcm94eVRyYWNlclByb3ZpZGVyIiwgIlNwYW5LaW5kIiwgIlNwYW5TdGF0dXNDb2RlIiwgIkFQSV9OQU1FIiwgIlRyYWNlQVBJIiwgInByb3ZpZGVyIiwgInN1Y2Nlc3MiLCAidHJhY2UiLCAiY3JlYXRlQ0RFU3BhbiIsICJjZGVDb25uIiwgImRhdGEiLCAib3BlcmF0aW9uIiwgInJlc3VsdCIsICJjcmVhdGVUcmFja2luZ1NwYW4iLCAiQ2RlRXJyb3IiLCAiQ3VzdG9tRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgInJlc3BvbnNlU2NoZW1hIiwgInRyYWNraW5nS2V5IiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSIsICJzY2hlbWEiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJnZXRQcmVmaWxsIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInBheWxvYWQiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCIsICJDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlIiwgImdldENoZWNrb3V0VmFsdWUiLCAic2VjdXJlVG9rZW4iLCAicHJvbW9Db2RlIiwgImNoZWNrb3V0UHJldmlldyIsICJjdXJyZW5jaWVzIiwgImludiIsICJhbW91bnRBdG9tIiwgInN1bSIsICJnZXRDaGVja291dFByZXZpZXdBbW91bnQiLCAiaXNTZXR1cE1vZGUiLCAidG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyIsICJhbGxDZGVDb25uZWN0aW9ucyIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJjaGVja291dENhcmRFbGVtZW50cyIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJzZXR1cENoZWNrb3V0IiwgInBlcmZvcm1DaGVja291dCIsICJDREVfUE9MTElOR19JTlRFUlZBTCIsICJwaW5nQ2RlRm9yU3RhdHVzIiwgImlmcmFtZSIsICJjaGlsZE9yaWdpbiIsICJyZXNwb25zZU1vZGVsIiwgImNvbm5lY3Rpb25PYmoiLCAiY29ubmVjdFRvQ2hpbGQiLCAicHJlcGFyZVBheW1lbnRGbG93IiwgIlByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInNhZmVseUdldFN0YW5kYXJkaXplZEVycm9yQ29kZSIsICJDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSIsICJzZXRVc2VyRGV2aWNlVG9rZW4iLCAiZGV2aWNlVG9rZW4iLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdCIsICJwaW5nIiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJGUkFNRV9CQVNFX1VSTCIsICJFTkNPRElORyIsICJFTkNPRElOR19MRU4iLCAiUkFORE9NX0xFTiIsICJUSU1FX0xFTiIsICJUSU1FX01BWCIsICJVTElERXJyb3JDb2RlIiwgIlVMSURFcnJvciIsICJlcnJvckNvZGUiLCAibWVzc2FnZSIsICJyYW5kb21DaGFyIiwgInBybmciLCAicmFuZCIsICJkZXRlY3RQUk5HIiwgInJvb3RMb29rdXAiLCAiZGV0ZWN0Um9vdCIsICJnbG9iYWxDcnlwdG8iLCAiYnVmZmVyIiwgImluV2ViV29ya2VyIiwgImVuY29kZVJhbmRvbSIsICJsZW4iLCAic3RyIiwgImVuY29kZVRpbWUiLCAibW9kIiwgImN1cnJlbnRMZW4iLCAidWxpZCIsICJzZWVkVGltZSIsICJjdXJyZW50UFJORyIsICJzZWVkIiwgIkNPT0tJRV9OQU1FIiwgImdldERldmljZVRva2VuIiwgImV4aXN0aW5nQ29va2llIiwgImNvb2tpZSIsICJ0b2tlbiIsICJzZXREZXZpY2VUb2tlbiIsICJvbmVZZWFyRnJvbU5vdyIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAiZmllbGROYW1lIiwgIkZpZWxkTmFtZUVudW0iLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJFbGVtZW50RXZlbnQiLCAiZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMiLCAiZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMiLCAiZmllbGRzIiwgIkZpZWxkTmFtZSIsICJnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMiLCAiY2hlY2tvdXRfc2V0dGluZ3MiLCAiZ2V0RnVsbE5hbWUiLCAiZmlyc3ROYW1lIiwgImxhc3ROYW1lIiwgInN0eWxlcyIsICJ3aWR0aCIsICJoZWlnaHQiLCAiYmFua1NlbGVjdG9yU3R5bGVzIiwgImNyZWF0ZUFuZE9wZW5GcmFtZSIsICJ1cmwiLCAidGl0bGUiLCAidGVtcGxhdGUiLCAiaG9zdCIsICJzaGFkb3dSb290IiwgImNhbmNlbEJ1dHRvbiIsICJjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yIiwgImJhbmtzIiwgImJhbmtMaXN0SHRtbCIsICJiYW5rIiwgImxvZ29IdG1sIiwgImJhbmtJdGVtcyIsICJjbGVhbnVwIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAiVGhyZWVEU1N0YXR1cyIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJwYXJhbXMiLCAiZnJhbWVXaWR0aCIsICJmcmFtZUhlaWdodCIsICJmcmFtZVRpdGxlIiwgImNsZWFudXBFdmVudExpc3RlbmVycyIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAiZXJyX18iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAiZGV0ZWN0TGFuZ3VhZ2UiLCAibGFuZ3VhZ2VzIiwgImxhbmd1YWdlIiwgImxvZ19fJHIiLCAiZXJyX18kcSIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgImxvZ19fJHEiLCAiZXJyX18kcCIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJBbGxGaWVsZE5hbWVzIiwgImxvZ19fJHAiLCAiZXJyX18kbyIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9hZFNjcmlwdCIsICJzY3JpcHRJZCIsICJzcmMiLCAiY2hlY2tMb2FkZWRGbiIsICJldmVudExpc3RlbmVyQ29udHJvbGxlciIsICJzY3JpcHQiLCAiZXhpc3RpbmdTY3JpcHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiaW5pdGlhbFByZXZpZXciLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJjb21tb25BY3Rpb24iLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgImZvcm1JbnB1dHMiLCAicGF5bWVudERhdGEiLCAiaW5wdXRzIiwgImJpbGxpbmdBZGRyZXNzIiwgInNoaXBwaW5nQWRkcmVzcyIsICJwYXllckZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAibG9nX18kbyIsICJlcnJfXyRuIiwgInJ1bkFpcndhbGxleEJBQ1NGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmb3JtQ2FsbGJhY2tzIiwgImN1c3RvbVBhcmFtcyIsICJub25DZGVGb3JtRmllbGRzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAidmVyaWZpY2F0aW9uTWV0aG9kIiwgInN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydEZsb3dOZXh0QWN0aW9ucyIsICJjb25zZW50SWQiLCAiYXZhaWxhYmxlQmFua3MiLCAic2VsZWN0ZWRCYW5rIiwgImRpcmVjdERlYml0RGF0YSIsICJyZWRpcmVjdFVybCIsICJuZXdDb25maXJtUmVzdWx0IiwgImxvZ19fJG4iLCAiZXJyX18kbSIsICJydW5BaXJ3YWxsZXhFRlRGbG93IiwgImxvZ19fJG0iLCAiZXJyX18kbCIsICJydW5BaXJ3YWxsZXhTRVBBRmxvdyIsICJsb2dfXyRsIiwgImVycl9fJGsiLCAiQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMiIsICJlcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3VsdCIsICJmcmllbmRseUVyciIsICJkZXZFcnIiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJocmVmIiwgImludGVudElkIiwgInJ1bkFpcndhbGxleDNkc0Zsb3ciLCAiaGVhZGVycyIsICJpbml0aWFsSW50ZW50SWQiLCAiQXBwbGVQYXlDcG0kMiIsICJHb29nbGVQYXlDcG0kMiIsICJsb2FkQXBwbGVQYXlTY3JpcHQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheSIsICJhcHBsZVBheVBheW1lbnQiLCAicG1CaWxsaW5nQ29udGFjdCIsICJiaWxsaW5nQ29udGFjdCIsICJzaGlwcGluZ0NvbnRhY3QiLCAiY3JlYXRlUmVjdXJyaW5nUGF5bWVudFJlcXVlc3QiLCAidG90YWwiLCAibGluZUl0ZW0iLCAiY3JlYXRlQXBwbGVQYXlUb3RhbCIsICJkZWZhdWx0TGFiZWwiLCAiYW1vdW50IiwgImdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJBZHllbkxvY2FsZSIsICJsb2dfXyRrIiwgImVycl9fJGoiLCAiQWR5ZW4zZHNSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJkZWNvZGVBZHllbkFjdGlvbiIsICJpc0FkeWVuQXZhaWxhYmxlIiwgImdldEFkeWVuQ2hlY2tvdXQiLCAiaGFuZGxlQWR5ZW4zZHMiLCAibG9jYWxlIiwgImNvdW50cnlDb2RlIiwgImNvbXBvbmVudCIsICJvbkNhbmNlbCIsICJvblBheW1lbnRGYWlsZWQiLCAib25BZGRpdGlvbmFsRGV0YWlscyIsICJfIiwgIl9fIiwgImFkeWVuQ2hlY2tvdXQiLCAiY2hlY2tvdXQiLCAiZGV0ZXJtaW5lTG9jYWxlIiwgInByZWZpbGxMb2NhbGUiLCAiYnJvd3NlckxvY2FsZSIsICJjaGVja0lmUmVxdWlyZXNBZHllbjNkcyIsICJydW5BZHllbjNkc0Zsb3ciLCAiQXBwbGVQYXlDcG0kMSIsICJHb29nbGVQYXlDcG0kMSIsICJsb2dfXyRqIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMiIsICJwYXltZW50U2Vzc2lvblJlc3BvbnNlIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkJDIiLCAiZ2V0RnJhdWRNZXRhZGF0YSIsICJsb2dfXyRpIiwgImVycl9fJGkiLCAiaW5pdEFkeWVuQXBwbGVQYXlGbG93IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAidW5hdmFpbGFibGVSZXN1bHQiLCAiYXBwbGVQYXlDcG0iLCAib25BcHBsZVBheVN0YXJ0RmxvdyIsICJPanNGbG93cyIsICJydW5BZHllbkFwcGxlUGF5RmxvdyIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgInVwZGF0ZSIsICJsb2dfXyRoIiwgImVycl9fJGgiLCAiaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyIsICJnb29nbGVQYXlDcG0iLCAicHJvY2Vzc29yQWNjb3VudCIsICJjbGllbnQiLCAiaXNSZWFkeVRvUGF5IiwgIm9uR29vZ2xlUGF5U3RhcnRGbG93IiwgInJ1bkFkeWVuR29vZ2xlUGF5RmxvdyIsICJfZSIsICJfZiIsICJfZyIsICJfaCIsICJtZXJnZWRJbnB1dHMiLCAib3VyUG1JZCIsICJsb2dfXyRnIiwgImVycl9fJGciLCAicnVuQWlyd2FsbGV4QUNIRmxvdyIsICJsb2dfXyRmIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMSIsICJoYW5kbGUzRFMiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMSIsICJsb2dfXyRlIiwgImVycl9fJGYiLCAiaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3ciLCAibG9nX18kZCIsICJlcnJfXyRlIiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgIkFwcGxlUGF5Q3BtIiwgIkdvb2dsZVBheUNwbSIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgIm1vYmlsZVdhbGxldFBheW1lbnREYXRhIiwgImxvZ19fJGMiLCAiZXJyX18kZCIsICJpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyIsICJydW5BdXRobmV0QXBwbGVQYXlGbG93IiwgImxvZ19fJGIiLCAiZXJyX18kYyIsICJpbml0QXV0aG5ldEdvb2dsZVBheUZsb3ciLCAicnVuQXV0aG5ldEdvb2dsZVBheUZsb3ciLCAibG9nX18kYSIsICJlcnJfXyRiIiwgIlBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlVmF1bHRJZEZyb20zZHNIcmVmIiwgInZhdWx0SWQiLCAicGFyc2VBcmdGcm9tSHJlZiIsICJhcmdOYW1lIiwgImNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyIsICJydW5Qb2NreXQzZHNGbG93IiwgInN0cmlwZUxvZ19fIiwgIlN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCIsICJzdHJpcGVDQzNEU0Zsb3ciLCAicGFyc2VVc2VyRkVQYXlsb2FkIiwgIk1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyIsICJsb2dfXyQ5IiwgImVycl9fJGEiLCAidW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAic3RhcnRQZlJlc3VsdCIsICJyZXR1cm5TdWNjZXNzUmVzdWx0IiwgInJ1bkNvbmZpcm1Mb29wIiwgImNoZWNrb3V0QXR0ZW1wdElkIiwgInBmUmVzdWx0IiwgInVzZXJBY3Rpb24iLCAidmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24iLCAidXNlckFjdGlvblJlc3VsdCIsICJydW5SZXF1aXJlZFVzZXJBY3Rpb24iLCAiY2hlY2tJZkxlZ2FjeTNEU1BhdGgiLCAiY29tbW9uQ0MzRFNGbG93IiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlVzZXJBY3Rpb25GRVBheWxvYWQiLCAicHJlZmlsbE1vZGUiLCAicGF5bWVudE1ldGhvZElkIiwgImxvZ19fJDgiLCAiZXJyX18kOSIsICJydW5Db21tb25DY0Zsb3ciLCAidW5pZmllZENDUm9sbG91dFJhdGlvIiwgInJvbGwiLCAidXNlVW5pZmllZENDRmxvdyIsICJ1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSIsICJlcnJIZWFkZXJzIiwgInJlcXVpcmVzUG9ja3l0M2RzIiwgInBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCIsICJhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjY1BtSWQiLCAic3RyaXBlQWN0aW9uIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInJlcXVpcmVkX3VzZXJfYWN0aW9ucyIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiTG9vcENyeXB0b0NwbSIsICJsb2dfXyQ3IiwgImVycl9fJDgiLCAiaW5pdExvb3BGbG93IiwgInByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEiLCAicGF5bWVudFNldHVwSW5mbyIsICJzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50IiwgIm1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJpc0NoZWNrb3V0TW9kZSIsICJjdXN0b21lckZpZWxkcyIsICJsb2dfXyQ2IiwgImVycl9fJDciLCAiUGF5cGFsQ3BtIiwgImluaXRQYXlwYWxGbG93IiwgInBheXBhbENwbSIsICJydW5QYXlwYWxGbG93IiwgImlzQW5vbnltb3VzIiwgInVzZVJlZGlyZWN0RmxvdyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93IiwgImlzUGF5Rmlyc3RGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0IiwgInByZUFjdGlvblVybCIsICJlbmNvZGVkUmVxdWVzdCIsICJzZWFyY2hQYXJhbXMiLCAicGF5cGFsRmxvd1Jlc3VsdCIsICJhcHByb3ZhbFNlc3Npb25JZCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgImluaXRQb2NreXRQYXlwYWxGbG93IiwgInBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJvdXJFeGlzdGluZ1BtSWQiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJhcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAibWF0Y2hlc1Byb2Nlc3NvciIsICJtYXRjaGVzUHJvdmlkZXIiLCAibG9nX18kMiIsICJlcnJfXyQzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiZXJyX18kMiIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIndpbmRvdyIsICJuZXh0V2luZG93IiwgIm51eHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAiZG9jdW1lbnQyIiwgIm5nVmVyc2lvbkVsIiwgImdldEZyYW1ld29ya0luZm8iLCAic2NyZWVuX2hlaWdodCIsICJzY3JlZW5fd2lkdGgiLCAiY29sb3JfZGVwdGgiLCAiamF2YV9lbmFibGVkIiwgInVzZXJfYWdlbnQiLCAiYWNjZXB0X2hlYWRlciIsICJ0aW1lX3pvbmVfb2Zmc2V0IiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUGF5bWVudFByb3ZpZGVyVHlwZSIsICJQYXltZW50UHJvdmlkZXJUeXBlMiIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgImNvbm5lY3Rpb24iLCAic2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzIiwgImluaXRQckZsb3dzIiwgImNhbGxiYWNrcyIsICJzdHJpcGVQUiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAiR0VORVJJQ19DT05OX0VSUiIsICJsb2dfXyIsICJfT3BlblBheUZvcm0iLCAiY2RlQnJpZGdlSWZyYW1lIiwgIkVsZW1lbnRUeXBlRW51bSIsICJjZGVMb2FkZWQiLCAiY2RlQ29ublNwYW4iLCAiYW55Q2RlQ29ubiIsICJvanNDb250ZXh0IiwgImVsZW1lbnRWYWx1ZSIsICJFbGVtZW50VHlwZSIsICJmcmFtZSIsICJxdWVyeVN0cmluZyIsICJzZWxlY3RvciIsICJjb25uIiwgImNvbnRleHQyIiwgImFwcGxlUGF5UHJvY2Vzc29ycyIsICJpc0FwcGxlUGF5QXZhaWxhYmxlIiwgImdvb2dsZVBheVByb2Nlc3NvcnMiLCAiaXNHb29nbGVQYXlBdmFpbGFibGUiLCAicGF5cGFsQXZhaWxhYmxlIiwgInBvY2t5dFBheXBhbEF2YWlsYWJsZSIsICJtZXRob2QiLCAibG9vcEZsb3dSZXN1bHQiLCAibG9vcENyeXB0b0F2YWlsYWJsZSIsICJtZXRob2RzIiwgImluaXRGbG93TmFtZU1hcCIsICJmbG93UmVzdWx0IiwgInN0YXJ0RmxvdyIsICJhaXJ3YWxsZXhHb29nbGVQYXkiLCAiYWlyd2FsbGV4QXBwbGVQYXkiLCAiYXV0aG9yaXplTmV0R29vZ2xlUGF5IiwgImF1dGhvcml6ZU5ldEFwcGxlUGF5IiwgImFkeWVuR29vZ2xlUGF5IiwgImFkeWVuQXBwbGVQYXkiLCAibmV3Q2FsbGJhY2tzIiwgIm1ldHJpY3NDb250ZXh0IiwgImNhbGxlciIsICJjdXJyZW50SW5zdGFuY2UiLCAiZGVidWdJbmZvIiwgImZvcm0iLCAiY2RlTG9hZGVkUGF5bG9hZCIsICJPcGVuUGF5Rm9ybSJdCn0K
6800
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA1fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgaXNMb2FkaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZCQ0KG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkkNCh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkkNChfX3NwcmVhZEFycmF5JDQoW10sIF9fcmVhZCQ0KGVycm9ycykpLCBfX3JlYWQkNChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBlbnZDYWNoZSA9IHt9O1xuY29uc3QgZ2V0Q3VycmVudEVudiA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gIGlmIChlbnZDYWNoZVtiYXNlVXJsXSkge1xuICAgIHJldHVybiBlbnZDYWNoZVtiYXNlVXJsXTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgY29uc3QgZW52ID0gT2pzRW52aXJvbm1lbnQucGFyc2UocmVzcG9uc2UuZW52aXJvbm1lbnQpO1xuICAgIGVudkNhY2hlW2Jhc2VVcmxdID0gZW52O1xuICAgIHJldHVybiBlbnY7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJHMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRzKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRzKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fJHMoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyRzKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG1ldHJpY3NRdWV1ZSA9IG5ldyBNZXRyaWNzUXVldWUoKTtcbmNvbnN0IHRyYWNrID0gKGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykgPT4ge1xuICBtZXRyaWNzUXVldWUuYWRkRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKTtcbn07XG5jb25zdCBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUgPSAoKSA9PiB7XG4gIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbn07XG5jb25zdCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5yZWFzb24pO1xuICB0cmFjayhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5yZWFzb25cbiAgfSk7XG59O1xuY29uc3Qgb25VbmNhdWdodEVycm9yID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShldmVudC5lcnJvcik7XG4gIHRyYWNrKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICBlcnJvcl9uYW1lOiBldmVudC5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZXZlbnQuZXJyb3I/LnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGV2ZW50LmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBldmVudC5jb2xub1xuICB9KTtcbn07XG5jb25zdCBhdHRhY2hFcnJvckxpc3RlbmVycyA9ICgpID0+IHtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25VbmNhdWdodEVycm9yKTtcbiAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IpO1xufTtcbmNvbnN0IGRldGFjaEVycm9yTGlzdGVuZXJzID0gKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG59O1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9jb3JlIHRvby5cbi8qKlxuICogLSBnbG9iYWxUaGlzIChOZXcgc3RhbmRhcmQpXG4gKiAtIHNlbGYgKFdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHdpbmRvdyBpbnN0YW5jZSBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzKVxuICogLSB3aW5kb3cgKGZhbGxiYWNrIGZvciBvbGRlciBicm93c2VyIGltcGxlbWVudGF0aW9ucylcbiAqIC0gZ2xvYmFsIChOb2RlSlMgaW1wbGVtZW50YXRpb24pXG4gKiAtIDxvYmplY3Q+IChXaGVuIGFsbCBlbHNlIGZhaWxzKVxuICovXG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucywgbm8tdW5kZWZcbnZhciBfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgID8gZ2xvYmFsVGhpc1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xudmFyIFZFUlNJT04gPSAnMS45LjAnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHJlID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byB0ZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3ZpZGVkIG93blZlcnNpb24uXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNlbWFudGljczpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gb3duVmVyc2lvbiB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2sob3duVmVyc2lvbikge1xuICAgIHZhciBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIHZhciByZWplY3RlZFZlcnNpb25zID0gbmV3IFNldCgpO1xuICAgIHZhciBteVZlcnNpb25NYXRjaCA9IG93blZlcnNpb24ubWF0Y2gocmUpO1xuICAgIGlmICghbXlWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyByZXR1cm4gbm9vcFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgfVxuICAgIHZhciBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25NYXRjaCA9IGdsb2JhbFZlcnNpb24ubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWdsb2JhbFZlcnNpb25NYXRjaCkge1xuICAgICAgICAgICAgLy8gY2Fubm90IHBhcnNlIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgbm9vcFxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgICAgICBtYWpvcjogK2dsb2JhbFZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgICAgIG1pbm9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICAgICAgcGF0Y2g6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBnbG9iYWxWZXJzaW9uTWF0Y2hbNF0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIGdsb2JhbFZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAoZ2xvYmFsVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2hcbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgIT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWFqb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yID09PSAwKSB7XG4gICAgICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA9PT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vciAmJlxuICAgICAgICAgICAgICAgIG93blZlcnNpb25QYXJzZWQucGF0Y2ggPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5wYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vcikge1xuICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgfTtcbn1cbi8qKlxuICogVGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgQVBJLlxuICpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiB2ZXJzaW9uIG9mIHRoZSBBUEkgcmVxdWVzdGluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2xvYmFsIEFQSVxuICovXG52YXIgaXNDb21wYXRpYmxlID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2soVkVSU0lPTik7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbWFqb3IgPSBWRVJTSU9OLnNwbGl0KCcuJylbMF07XG52YXIgR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIG1ham9yKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoYWxsb3dPdmVycmlkZSA9PT0gdm9pZCAwKSB7IGFsbG93T3ZlcnJpZGUgPSBmYWxzZTsgfVxuICAgIHZhciBhcGkgPSAoX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyB0eXBlKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gVkVSU0lPTikge1xuICAgICAgICAvLyBBbGwgcmVnaXN0ZXJlZCBBUElzIG11c3QgYmUgb2YgdGhlIHNhbWUgdmVyc2lvbiBleGFjdGx5XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGFwaS52ZXJzaW9uICsgXCIgZm9yIFwiICsgdHlwZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgVkVSU0lPTik7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBnbG9iYWxWZXJzaW9uID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb247XG4gICAgaWYgKCFnbG9iYWxWZXJzaW9uIHx8ICFpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKF9iID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3R5cGVdO1xufVxuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICB2YXIgYXBpID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXTtcbiAgICBpZiAoYXBpKSB7XG4gICAgICAgIGRlbGV0ZSBhcGlbdHlwZV07XG4gICAgfVxufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xudmFyIERpYWdDb21wb25lbnRMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlhZ0NvbXBvbmVudExvZ2dlcihwcm9wcykge1xuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2UgfHwgJ0RpYWdDb21wb25lbnRMb2dnZXInO1xuICAgIH1cbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZXJyb3InLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2luZm8nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3ZlcmJvc2UnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdDb21wb25lbnRMb2dnZXI7XG59KCkpO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KG5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDMoW10sIF9fcmVhZCQzKGFyZ3MpLCBmYWxzZSkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBhdmFpbGFibGUgaW50ZXJuYWwgbG9nZ2luZyBsZXZlbHMgZm9yIHRoZSBkaWFnbm9zdGljIGxvZ2dlciwgdGhlIG51bWVyaWMgdmFsdWVzXG4gKiBvZiB0aGUgbGV2ZWxzIGFyZSBkZWZpbmVkIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgaW5pdGlhbCBMb2dMZXZlbCB0byBhdm9pZFxuICogY29tcGF0aWJpbGl0eS9taWdyYXRpb24gaXNzdWVzIGZvciBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBhc3N1bWUgdGhlIG51bWVyaWMgb3JkZXJpbmcuXG4gKi9cbnZhciBEaWFnTG9nTGV2ZWw7XG4oZnVuY3Rpb24gKERpYWdMb2dMZXZlbCkge1xuICAgIC8qKiBEaWFnbm9zdGljIExvZ2dpbmcgbGV2ZWwgc2V0dGluZyB0byBkaXNhYmxlIGFsbCBsb2dnaW5nIChleGNlcHQgYW5kIGZvcmNlZCBsb2dzKSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvciBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IDMwXSA9IFwiRVJST1JcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhIHdhcm5pbmcgc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiV0FSTlwiXSA9IDUwXSA9IFwiV0FSTlwiO1xuICAgIC8qKiBHZW5lcmFsIGluZm9ybWF0aW9uYWwgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiSU5GT1wiXSA9IDYwXSA9IFwiSU5GT1wiO1xuICAgIC8qKiBHZW5lcmFsIGRlYnVnIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkRFQlVHXCJdID0gNzBdID0gXCJERUJVR1wiO1xuICAgIC8qKlxuICAgICAqIERldGFpbGVkIHRyYWNlIGxldmVsIGxvZ2dpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQsIHNob3VsZCBvbmx5IGJlIHNldFxuICAgICAqIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIlZFUkJPU0VcIl0gPSA4MF0gPSBcIlZFUkJPU0VcIjtcbiAgICAvKiogVXNlZCB0byBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgdG8gaW5jbHVkZSBhbGwgbG9nZ2luZyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJBTExcIl0gPSA5OTk5XSA9IFwiQUxMXCI7XG59KShEaWFnTG9nTGV2ZWwgfHwgKERpYWdMb2dMZXZlbCA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIobWF4TGV2ZWwsIGxvZ2dlcikge1xuICAgIGlmIChtYXhMZXZlbCA8IERpYWdMb2dMZXZlbC5OT05FKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gRGlhZ0xvZ0xldmVsLkFMTCkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5BTEw7XG4gICAgfVxuICAgIC8vIEluIGNhc2UgdGhlIGxvZ2dlciBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGxvZ2dlciA9IGxvZ2dlciB8fCB7fTtcbiAgICBmdW5jdGlvbiBfZmlsdGVyRnVuYyhmdW5jTmFtZSwgdGhlTGV2ZWwpIHtcbiAgICAgICAgdmFyIHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgRGlhZ0xvZ0xldmVsLkVSUk9SKSxcbiAgICAgICAgd2FybjogX2ZpbHRlckZ1bmMoJ3dhcm4nLCBEaWFnTG9nTGV2ZWwuV0FSTiksXG4gICAgICAgIGluZm86IF9maWx0ZXJGdW5jKCdpbmZvJywgRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgRGlhZ0xvZ0xldmVsLkRFQlVHKSxcbiAgICAgICAgdmVyYm9zZTogX2ZpbHRlckZ1bmMoJ3ZlcmJvc2UnLCBEaWFnTG9nTGV2ZWwuVkVSQk9TRSksXG4gICAgfTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQyID0gJ2RpYWcnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IGludGVybmFsXG4gKiBkaWFnbm9zdGljIEFQSVxuICovXG52YXIgRGlhZ0FQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIGludGVybmFsIGNvbnN0cnVjdG9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEaWFnQVBJKCkge1xuICAgICAgICBmdW5jdGlvbiBfbG9nUHJveHkoZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDIoW10sIF9fcmVhZCQyKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2luZyBzZWxmIGxvY2FsIHZhcmlhYmxlIGZvciBtaW5pZmljYXRpb24gcHVycG9zZXMgYXMgJ3RoaXMnIGNhbm5vdCBiZSBtaW5pZmllZFxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIERpYWdBUEkgc3BlY2lmaWMgZnVuY3Rpb25zXG4gICAgICAgIHZhciBzZXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAob3B0aW9uc09yTG9nTGV2ZWwgPT09IHZvaWQgMCkgeyBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IERpYWdMb2dMZXZlbC5JTkZPIH07IH1cbiAgICAgICAgICAgIGlmIChsb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIExvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgbWlnaHQgYnJlYWsgdGhlIHVzZXIgYXBwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvZyB0byBzZWxmLiBJZiBhIGxvZ2dlciB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbG9nLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZExvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgdmFyIG5ld0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcigoX2IgPSBvcHRpb25zT3JMb2dMZXZlbC5sb2dMZXZlbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IChfYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPic7XG4gICAgICAgICAgICAgICAgb2xkTG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQyLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgRGlhZ0FQSS5pbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRGlhZ0FQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbnZhciBCYXNlQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29udGV4dCB3aGljaCBpbmhlcml0cyB2YWx1ZXMgZnJvbSBhbiBvcHRpb25hbCBwYXJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDb250ZXh0IGEgY29udGV4dCBmcm9tIHdoaWNoIHRvIGluaGVyaXQgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFzZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgICAvLyBmb3IgbWluaWZpY2F0aW9uXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpOyB9O1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEJhc2VDb250ZXh0O1xufSgpKTtcbi8qKiBUaGUgcm9vdCBjb250ZXh0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29udGV4dCAqL1xudmFyIFJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIE5vb3BDb250ZXh0TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUk9PVF9DT05URVhUO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKF9jb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheSQxKFt0aGlzQXJnXSwgX19yZWFkJDEoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBOb29wQ29udGV4dE1hbmFnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMSA9ICdjb250ZXh0JztcbnZhciBOT09QX0NPTlRFWFRfTUFOQUdFUiA9IG5ldyBOb29wQ29udGV4dE1hbmFnZXIoKTtcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBDb250ZXh0IEFQSVxuICovXG52YXIgQ29udGV4dEFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHRBUEkoKSB7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBDb250ZXh0QVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBDb250ZXh0QVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgbWFuYWdlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgbWFuYWdlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uIChjb250ZXh0TWFuYWdlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgY29udGV4dE1hbmFnZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtjb250ZXh0LCBmbiwgdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBjb250ZXh0IHRvIGEgdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmluZCB0byB0aGUgZXZlbnQgZW1pdHRlciBvciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlciB0byBiaW5kXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChjb250ZXh0LCB0YXJnZXQpO1xuICAgIH07XG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FJDEpIHx8IE5PT1BfQ09OVEVYVF9NQU5BR0VSO1xuICAgIH07XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dEFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhY2VGbGFncztcbihmdW5jdGlvbiAoVHJhY2VGbGFncykge1xuICAgIC8qKiBSZXByZXNlbnRzIG5vIGZsYWcgc2V0LiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBCaXQgdG8gcmVwcmVzZW50IHdoZXRoZXIgdHJhY2UgaXMgc2FtcGxlZCBpbiB0cmFjZSBmbGFncy4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJTQU1QTEVEXCJdID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFRyYWNlRmxhZ3MgfHwgKFRyYWNlRmxhZ3MgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIElOVkFMSURfU1BBTklEID0gJzAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfVFJBQ0VJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogSU5WQUxJRF9UUkFDRUlELFxuICAgIHNwYW5JZDogSU5WQUxJRF9TUEFOSUQsXG4gICAgdHJhY2VGbGFnczogVHJhY2VGbGFncy5OT05FLFxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIE5vblJlY29yZGluZ1NwYW4gaXMgdGhlIGRlZmF1bHQge0BsaW5rIFNwYW59IHRoYXQgaXMgdXNlZCB3aGVuIG5vIFNwYW5cbiAqIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS4gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wIGluY2x1ZGluZyBjb250ZXh0XG4gKiBwcm9wYWdhdGlvbi5cbiAqL1xudmFyIE5vblJlY29yZGluZ1NwYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9uUmVjb3JkaW5nU3Bhbihfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKF9zcGFuQ29udGV4dCA9PT0gdm9pZCAwKSB7IF9zcGFuQ29udGV4dCA9IElOVkFMSURfU1BBTl9DT05URVhUOyB9XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBSZXR1cm5zIGEgU3BhbkNvbnRleHQuXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKF9rZXksIF92YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbiAoX25hbWUsIF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uIChfbGluaykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24gKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24gKF9zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbiAoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChfZW5kVGltZSkgeyB9O1xuICAgIC8vIGlzUmVjb3JkaW5nIGFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBOb25SZWNvcmRpbmdTcGFuLlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfdGltZSkgeyB9O1xuICAgIHJldHVybiBOb25SZWNvcmRpbmdTcGFuO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogc3BhbiBrZXlcbiAqL1xudmFyIFNQQU5fS0VZID0gY3JlYXRlQ29udGV4dEtleSgnT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOJyk7XG4vKipcbiAqIFJldHVybiB0aGUgc3BhbiBpZiBvbmUgZXhpc3RzXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNQQU5fS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEdldHMgdGhlIHNwYW4gZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBvbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICAgIHJldHVybiBnZXRTcGFuKENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG4vKipcbiAqIFNldCB0aGUgc3BhbiBvbiBhIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHVzZSBhcyBwYXJlbnRcbiAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gc2V0IGFjdGl2ZVxuICovXG5mdW5jdGlvbiBzZXRTcGFuKGNvbnRleHQsIHNwYW4pIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTUEFOX0tFWSwgc3Bhbik7XG59XG4vKipcbiAqIFJlbW92ZSBjdXJyZW50IHNwYW4gc3RvcmVkIGluIHRoZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBkZWxldGUgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNQQU5fS0VZKTtcbn1cbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpKTtcbn1cbi8qKlxuICogR2V0IHRoZSBzcGFuIGNvbnRleHQgb2YgdGhlIHNwYW4gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGdldFNwYW4oY29udGV4dCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGFuQ29udGV4dCgpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1RSQUNFSURfUkVHRVggPSAvXihbMC05YS1mXXszMn0pJC9pO1xudmFyIFZBTElEX1NQQU5JRF9SRUdFWCA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaXNWYWxpZFRyYWNlSWQodHJhY2VJZCkge1xuICAgIHJldHVybiBWQUxJRF9UUkFDRUlEX1JFR0VYLnRlc3QodHJhY2VJZCkgJiYgdHJhY2VJZCAhPT0gSU5WQUxJRF9UUkFDRUlEO1xufVxuZnVuY3Rpb24gaXNWYWxpZFNwYW5JZChzcGFuSWQpIHtcbiAgICByZXR1cm4gVkFMSURfU1BBTklEX1JFR0VYLnRlc3Qoc3BhbklkKSAmJiBzcGFuSWQgIT09IElOVkFMSURfU1BBTklEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICogQHJldHVybiB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIChpc1ZhbGlkVHJhY2VJZChzcGFuQ29udGV4dC50cmFjZUlkKSAmJiBpc1ZhbGlkU3BhbklkKHNwYW5Db250ZXh0LnNwYW5JZCkpO1xufVxuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgY29udGV4dEFwaSA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcbi8qKlxuICogTm8tb3AgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBUcmFjZXJ9LlxuICovXG52YXIgTm9vcFRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyKCkge1xuICAgIH1cbiAgICAvLyBzdGFydFNwYW4gc3RhcnRzIGEgbm9vcCBzcGFuLlxuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHsgY29udGV4dCA9IGNvbnRleHRBcGkuYWN0aXZlKCk7IH1cbiAgICAgICAgdmFyIHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudEZyb21Db250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHBhcmVudEZyb21Db250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAobmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICB2YXIgb3B0cztcbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBjdHggIT09IG51bGwgJiYgY3R4ICE9PSB2b2lkIDAgPyBjdHggOiBjb250ZXh0QXBpLmFjdGl2ZSgpO1xuICAgICAgICB2YXIgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICB2YXIgY29udGV4dFdpdGhTcGFuU2V0ID0gc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRBcGkud2l0aChjb250ZXh0V2l0aFNwYW5TZXQsIGZuLCB1bmRlZmluZWQsIHNwYW4pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXI7XG59KCkpO1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAodHlwZW9mIHNwYW5Db250ZXh0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3NwYW5JZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUZsYWdzJ10gPT09ICdudW1iZXInKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyKCk7XG4vKipcbiAqIFByb3h5IHRyYWNlciBwcm92aWRlZCBieSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyXG4gKi9cbnZhciBQcm94eVRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChfbmFtZSwgX29wdGlvbnMsIF9jb250ZXh0LCBfZm4pIHtcbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcnkgdG8gZ2V0IGEgdHJhY2VyIGZyb20gdGhlIHByb3h5IHRyYWNlciBwcm92aWRlci5cbiAgICAgKiBJZiB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyIGhhcyBubyBkZWxlZ2F0ZSwgcmV0dXJuIGEgbm9vcCB0cmFjZXIuXG4gICAgICovXG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBUcmFjZXJQcm92aWRlcn0gd2hpY2ggcmV0dXJucyBhbiBpbXBvdGVudFxuICogVHJhY2VyIGZvciBhbGwgY2FsbHMgdG8gYGdldFRyYWNlcmAuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wLlxuICovXG52YXIgTm9vcFRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgTm9vcFRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BUcmFjZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSX1BST1ZJREVSID0gbmV3IE5vb3BUcmFjZXJQcm92aWRlcigpO1xuLyoqXG4gKiBUcmFjZXIgcHJvdmlkZXIgd2hpY2ggcHJvdmlkZXMge0BsaW5rIFByb3h5VHJhY2VyfXMuXG4gKlxuICogQmVmb3JlIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXJzIHByb3ZpZGVkIGFyZSBOb09wLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXMgYXJlIHByb3ZpZGVkIGZyb20gdGhlIGRlbGVnYXRlLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0IGFmdGVyIHRyYWNlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQsXG4gKiAgIGFsbCB0cmFjZXJzIGFscmVhZHkgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGRlbGVnYXRlIGltcGxlbWVudGF0aW9uLlxuICovXG52YXIgUHJveHlUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgUHJveHlUcmFjZXJ9XG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfVFJBQ0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSB0cmFjZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZS4gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gaXMgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiSU5URVJOQUxcIl0gPSAwXSA9IFwiSU5URVJOQUxcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgc2VydmVyLXNpZGUgaGFuZGxpbmcgb2YgYW4gUlBDIG9yIG90aGVyXG4gICAgICogcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJTRVJWRVJcIl0gPSAxXSA9IFwiU0VSVkVSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHRoZSBjbGllbnQtc2lkZSB3cmFwcGVyIGFyb3VuZCBhbiBSUEMgb3JcbiAgICAgKiBvdGhlciByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNMSUVOVFwiXSA9IDJdID0gXCJDTElFTlRcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgcHJvZHVjZXIgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiUFJPRFVDRVJcIl0gPSAzXSA9IFwiUFJPRFVDRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgY29uc3VtZXIgcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCB8fCAoU3BhbktpbmQgPSB7fSkpO1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xudmFyIFNwYW5TdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChTcGFuU3RhdHVzQ29kZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN0YXR1cy5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIlVOU0VUXCJdID0gMF0gPSBcIlVOU0VUXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yXG4gICAgICogT3BlcmF0b3IgdG8gaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiT0tcIl0gPSAxXSA9IFwiT0tcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiRVJST1JcIl0gPSAyXSA9IFwiRVJST1JcIjtcbn0pKFNwYW5TdGF0dXNDb2RlIHx8IChTcGFuU3RhdHVzQ29kZSA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbnZhciBjb250ZXh0ID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG52YXIgVHJhY2VBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBUcmFjZUFQSSgpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGlzU3BhbkNvbnRleHRWYWxpZDtcbiAgICAgICAgdGhpcy5kZWxldGVTcGFuID0gZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gZ2V0U3BhbjtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBzZXRTcGFuO1xuICAgICAgICB0aGlzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgVHJhY2UgQVBJICovXG4gICAgVHJhY2VBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGdsb2JhbCB0cmFjZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0cmFjZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRyYWNlciBmcm9tIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVHJhY2VBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIHRyYWNlIEFQSSAqL1xudmFyIHRyYWNlID0gVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKTtcblxuY29uc3QgY3JlYXRlQ0RFU3BhbiA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBjZGUuJHtkYXRhLnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgLi4uY2RlQ29ubi50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KGRhdGEucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjcmVhdGVUcmFja2luZ1NwYW4gPSBhc3luYyAob3B0aW9ucywgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke29wdGlvbnMuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogb3B0aW9ucy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBvcHRpb25zLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogb3B0aW9ucy5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogb3B0aW9ucy5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBvcHRpb25zLnJlZmVycmVyLFxuICAgICAgICAuLi5vcHRpb25zLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IG9wdGlvbnMucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bhbi5lbmQoKTtcbiAgfVxufTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUNERVNwYW4oY2RlQ29ubiwgZGF0YSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICAgIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICB0cmFjayhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gICAgfVxuICAgIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBpZiAodHJhY2tpbmdLZXkpIHtcbiAgICAgIHRyYWNrKHRyYWNraW5nS2V5LCB7XG4gICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9KTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSxcbiAgICBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSxcbiAgICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuICApO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyYWNrKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ucGF5bG9hZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yZXN1bHRcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sXG4gICAgU2V0dXBDaGVja291dFJlc3BvbnNlLFxuICAgIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuICApO1xufTtcbmNvbnN0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSxcbiAgICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikgJiYgIXByb21vQ29kZSkge1xuICAgICAgcHJvbW9Db2RlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sXG4gICAgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsXG4gICAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiAgKTtcbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSwgXCJzZXR1cF9jaGVja291dFwiKTtcbn07XG5jb25zdCBwZXJmb3JtQ2hlY2tvdXQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UsIFwicGVyZm9ybV9jaGVja291dFwiKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3JTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlIH0sIHJlc3BvbnNlTW9kZWwpO1xuICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgcHJlcGFyZVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSxcbiAgICBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSxcbiAgICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUgPSBhc3luYyAoY2RlQ29ubiwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHsgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBxdWVyeUNERShcbiAgICAgIGNkZUNvbm4sXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQgfSxcbiAgICAgIENoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIHJldHVybiBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmNvbnN0IHNldFVzZXJEZXZpY2VUb2tlbiA9IGFzeW5jIChjZGVDb25uLCBkZXZpY2VUb2tlbikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBkZXZpY2VUb2tlbiB9IH0sXG4gICAgU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2VcbiAgKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG4vLyBUaGVzZSB2YWx1ZXMgc2hvdWxkIE5FVkVSIGNoYW5nZS4gVGhlIHZhbHVlcyBhcmUgcHJlY2lzZWx5IGZvclxuLy8gZ2VuZXJhdGluZyBVTElEcy5cbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiOyAvLyBDcm9ja2ZvcmQncyBCYXNlMzJcbmNvbnN0IEVOQ09ESU5HX0xFTiA9IDMyOyAvLyBmcm9tIEVOQ09ESU5HLmxlbmd0aDtcbmNvbnN0IFJBTkRPTV9MRU4gPSAxNjtcbmNvbnN0IFRJTUVfTEVOID0gMTA7XG5jb25zdCBUSU1FX01BWCA9IDI4MTQ3NDk3NjcxMDY1NTsgLy8gZnJvbSBNYXRoLnBvdygyLCA0OCkgLSAxO1xuXG52YXIgVUxJREVycm9yQ29kZTtcbihmdW5jdGlvbiAoVUxJREVycm9yQ29kZSkge1xuICAgIFVMSURFcnJvckNvZGVbXCJCYXNlMzJJbmNvcnJlY3RFbmNvZGluZ1wiXSA9IFwiQjMyX0VOQ19JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyXCJdID0gXCJERUNfVElNRV9DSEFSXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVOZWdhdGl2ZVwiXSA9IFwiRU5DX1RJTUVfTkVHXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVTaXplRXhjZWVkZWRcIl0gPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZFwiXSA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlBSTkdEZXRlY3RGYWlsdXJlXCJdID0gXCJQUk5HX0RFVEVDVFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVTElESW52YWxpZFwiXSA9IFwiVUxJRF9JTlZBTElEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVuZXhwZWN0ZWRcIl0gPSBcIlVORVhQRUNURURcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVVVJREludmFsaWRcIl0gPSBcIlVVSURfSU5WQUxJRFwiO1xufSkoVUxJREVycm9yQ29kZSB8fCAoVUxJREVycm9yQ29kZSA9IHt9KSk7XG5jbGFzcyBVTElERXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKGAke21lc3NhZ2V9ICgke2Vycm9yQ29kZX0pYCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVUxJREVycm9yXCI7XG4gICAgICAgIHRoaXMuY29kZSA9IGVycm9yQ29kZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJhbmRvbUNoYXIocHJuZykge1xuICAgIGxldCByYW5kID0gTWF0aC5mbG9vcihwcm5nKCkgKiBFTkNPRElOR19MRU4pO1xuICAgIGlmIChyYW5kID09PSBFTkNPRElOR19MRU4pIHtcbiAgICAgICAgcmFuZCA9IEVOQ09ESU5HX0xFTiAtIDE7XG4gICAgfVxuICAgIHJldHVybiBFTkNPRElORy5jaGFyQXQocmFuZCk7XG59XG4vKipcbiAqIERldGVjdCB0aGUgYmVzdCBQUk5HIChwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IpXG4gKiBAcGFyYW0gcm9vdCBUaGUgcm9vdCB0byBjaGVjayBmcm9tIChnbG9iYWwvd2luZG93KVxuICogQHJldHVybnMgVGhlIFBSTkcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UFJORyhyb290KSB7XG4gICAgY29uc3Qgcm9vdExvb2t1cCA9IGRldGVjdFJvb3QoKTtcbiAgICBjb25zdCBnbG9iYWxDcnlwdG8gPSAocm9vdExvb2t1cCAmJiAocm9vdExvb2t1cC5jcnlwdG8gfHwgcm9vdExvb2t1cC5tc0NyeXB0bykpIHx8XG4gICAgICAgIChudWxsKTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbENyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgICAgICAgZ2xvYmFsQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhidWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAvIDB4ZmY7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LnJhbmRvbUJ5dGVzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IGdsb2JhbENyeXB0by5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDB4ZmY7XG4gICAgfVxuICAgIGVsc2UgO1xuICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5QUk5HRGV0ZWN0RmFpbHVyZSwgXCJGYWlsZWQgdG8gZmluZCBhIHJlbGlhYmxlIFBSTkdcIik7XG59XG5mdW5jdGlvbiBkZXRlY3RSb290KCkge1xuICAgIGlmIChpbldlYldvcmtlcigpKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZW5jb2RlUmFuZG9tKGxlbiwgcHJuZykge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkge1xuICAgICAgICBzdHIgPSByYW5kb21DaGFyKHBybmcpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBFbmNvZGUgdGhlIHRpbWUgcG9ydGlvbiBvZiBhIFVMSURcbiAqIEBwYXJhbSBub3cgVGhlIGN1cnJlbnQgdGltZXN0YW1wXG4gKiBAcGFyYW0gbGVuIExlbmd0aCB0byBnZW5lcmF0ZVxuICogQHJldHVybnMgVGhlIGVuY29kZWQgdGltZVxuICovXG5mdW5jdGlvbiBlbmNvZGVUaW1lKG5vdywgbGVuID0gVElNRV9MRU4pIHtcbiAgICBpZiAoaXNOYU4obm93KSkge1xuICAgICAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGEgbnVtYmVyOiAke25vd31gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gVElNRV9NQVgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQsIGBDYW5ub3QgZW5jb2RlIGEgdGltZSBsYXJnZXIgdGhhbiAke1RJTUVfTUFYfTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVOZWdhdGl2ZSwgYFRpbWUgbXVzdCBiZSBwb3NpdGl2ZTogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIobm93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhbiBpbnRlZ2VyOiAke25vd31gKTtcbiAgICB9XG4gICAgbGV0IG1vZCwgc3RyID0gXCJcIjtcbiAgICBmb3IgKGxldCBjdXJyZW50TGVuID0gbGVuOyBjdXJyZW50TGVuID4gMDsgY3VycmVudExlbi0tKSB7XG4gICAgICAgIG1vZCA9IG5vdyAlIEVOQ09ESU5HX0xFTjtcbiAgICAgICAgc3RyID0gRU5DT0RJTkcuY2hhckF0KG1vZCkgKyBzdHI7XG4gICAgICAgIG5vdyA9IChub3cgLSBtb2QpIC8gRU5DT0RJTkdfTEVOO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gaW5XZWJXb3JrZXIoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVMSURcbiAqIEBwYXJhbSBzZWVkVGltZSBPcHRpb25hbCB0aW1lIHNlZWRcbiAqIEBwYXJhbSBwcm5nIE9wdGlvbmFsIFBSTkcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgVUxJRCBzdHJpbmdcbiAqIEBleGFtcGxlXG4gKiAgdWxpZCgpOyAvLyBcIjAxSE5aWEQwN001Q0VONVhBNjZFTVpTUlpXXCJcbiAqL1xuZnVuY3Rpb24gdWxpZChzZWVkVGltZSwgcHJuZykge1xuICAgIGNvbnN0IGN1cnJlbnRQUk5HID0gZGV0ZWN0UFJORygpO1xuICAgIGNvbnN0IHNlZWQgPSBEYXRlLm5vdygpIDtcbiAgICByZXR1cm4gZW5jb2RlVGltZShzZWVkLCBUSU1FX0xFTikgKyBlbmNvZGVSYW5kb20oUkFORE9NX0xFTiwgY3VycmVudFBSTkcpO1xufVxuXG5jb25zdCBDT09LSUVfTkFNRSA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiO1xuY29uc3QgZ2V0RGV2aWNlVG9rZW4gPSAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQ29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKS5maW5kKChjb29raWUpID0+IGNvb2tpZS5pbmNsdWRlcyhDT09LSUVfTkFNRSkpO1xuICBpZiAoZXhpc3RpbmdDb29raWUpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb29raWUuc3BsaXQoXCI9XCIpWzFdO1xuICB9XG4gIGNvbnN0IHRva2VuID0gdWxpZCgpO1xuICBzZXREZXZpY2VUb2tlbih0b2tlbik7XG4gIHJldHVybiB0b2tlbjtcbn07XG5jb25zdCBzZXREZXZpY2VUb2tlbiA9ICh0b2tlbikgPT4ge1xuICBjb25zdCBvbmVZZWFyRnJvbU5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICBvbmVZZWFyRnJvbU5vdy5zZXRGdWxsWWVhcihvbmVZZWFyRnJvbU5vdy5nZXRGdWxsWWVhcigpICsgMSk7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke0NPT0tJRV9OQU1FfT0ke3Rva2VufTsgcGF0aD0vOyBleHBpcmVzPSR7b25lWWVhckZyb21Ob3cudG9VVENTdHJpbmcoKX1gO1xufTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudHlwZSA9PT0gXCJjaGVja2JveFwiID8gaW5wdXQuY2hlY2tlZCA6IGlucHV0LnZhbHVlO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzID0gKCkgPT4ge1xuICBjb25zdCBpZCA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7aWR9YCxcbiAgICBlbWFpbDogYHh4XyR7aWR9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7aWR9YCxcbiAgICBjb3VudHJ5OiBgVVNgXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLkxJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMgPSAoZmllbGRzLCBjaGVja291dF9zZXR0aW5ncykgPT4ge1xuICBpZiAoIWNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSByZXR1cm47XG4gIHJldHVybiB7XG4gICAgbGluZTE6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdLFxuICAgIGxpbmUyOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSxcbiAgICBsaW5lMzogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10sXG4gICAgY2l0eTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSxcbiAgICBzdGF0ZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0sXG4gICAgY291bnRyeTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSxcbiAgICB6aXBfY29kZTogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV1cbiAgfTtcbn07XG5jb25zdCBnZXRGdWxsTmFtZSA9IChmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PiB7XG4gIHJldHVybiBbZmlyc3ROYW1lLCBsYXN0TmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xufTtcblxuY29uc3Qgc3R5bGVzID0gKHsgd2lkdGgsIGhlaWdodCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHt3aWR0aCA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke2hlaWdodCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGJhbmtTZWxlY3RvclN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHtoZWlnaHQgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYDtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5GcmFtZSA9ICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBpZCwgdGl0bGUsIHdpZHRoLCBoZWlnaHQgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtzdHlsZXMoeyB3aWR0aCwgaGVpZ2h0IH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke2lkID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke3RpdGxlID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gIGNvbnN0IGlmcmFtZSA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIik7XG4gIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICByZXR1cm4geyBob3N0LCBpZnJhbWUsIGNhbmNlbEJ1dHRvbiB9O1xufTtcbmNvbnN0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IgPSAoYmFua3MsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0aXRsZSB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICBjb25zdCBiYW5rTGlzdEh0bWwgPSBiYW5rcy5tYXAoKGJhbmssIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBsb2dvSHRtbCA9IGJhbmsucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHtiYW5rLnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke2JhbmsuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke2JhbmsuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtpbmRleH1cIj5cbiAgICAgICAgICAke2xvZ29IdG1sfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7YmFuay5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHtiYW5rLmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke2JhbmtTZWxlY3RvclN0eWxlcyh7IHdpZHRoLCBoZWlnaHQgfSl9XG4gICAgICA8L3N0eWxlPlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstc2VsZWN0b3ItaGVhZGVyXCI+JHt0aXRsZSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtiYW5rTGlzdEh0bWx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICAgIGNvbnN0IGJhbmtJdGVtcyA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIik7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaG9zdCk7XG4gICAgfTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIikpO1xuICAgIH0pO1xuICAgIGJhbmtJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlc29sdmUoYmFua3NbaW5kZXhdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kciwgZXJyX186IGVycl9fJHEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2Rcbn0pID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJHIoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHEsIGVycl9fOiBlcnJfXyRwIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzO1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyRwKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRxKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHAsIGVycl9fOiBlcnJfXyRvIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJG8oYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcyksXG4gICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKVxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAgPSBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXzIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKGFyZ3MubG9nUHJlZml4KTtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYXJncy5hbnlDZGVDb25uZWN0aW9uKTtcbiAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGxvZ19fMihgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLmApO1xuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gYXdhaXQgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QoYXJncy5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogc2V0dXBSZXN1bHQgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYXJncy51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGxvZ19fMihgVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICAgIGlmICghYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJG8oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogYXJncy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfTtcbiAgICBsb2dfXzIoYERvaW5nIGNoZWNrb3V0Li4uYCwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBzaGlwcGluZ0FkZHJlc3NSZXF1aXJlZDogcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIGJhc2VSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGJhc2VSZXF1ZXN0KSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnYgPSBhd2FpdCBnZXRDdXJyZW50RW52KGJhc2VVcmwpO1xuICByZXR1cm4gZW52ID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSBhc3luYyAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gcGF5bWVudERhdGEuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTFdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUyXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FM10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczMgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoc2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmxvY2FsaXR5IHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBzaGlwcGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbywgZXJyX186IGVycl9fJG4gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWJhY3NcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhCQUNTRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtzID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgc2VsZWN0ZWRCYW5rO1xuICAgIGlmIChhdmFpbGFibGVCYW5rcyAmJiBhdmFpbGFibGVCYW5rcy5sZW5ndGggPj0gMSkge1xuICAgICAgbG9nX18kbyhcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0ZWRCYW5rID0gYXdhaXQgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvcihhdmFpbGFibGVCYW5rcywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kbyhgQmFuayBzZWxlY3RlZDogJHtzZWxlY3RlZEJhbmsuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbyhcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImJhY3NfZGlyZWN0X2RlYml0XCIsXG4gICAgICBiYWNzX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBUcnVlTGF5ZXJcbiAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXVxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogY3VzdG9tUGFyYW1zLmFjY291bnROdW1iZXIsXG4gICAgICAgIC8vIHNvcnRfY29kZTogY3VzdG9tUGFyYW1zLnNvcnRDb2RlLFxuICAgICAgICAvLyBhZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogZGlyZWN0RGViaXREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJG8oXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRvKGDilbAgQkFDUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRuKFwiQkFDUyBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG4sIGVycl9fOiBlcnJfXyRtIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1lZnRcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhFRlRGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF1cbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIC8vIGluc3RpdHV0aW9uX251bWJlcjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gdHJhbnNpdF9udW1iZXI6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIC8vIGFjY291bnRfbnVtYmVyOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRuKFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiRUZUIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG4oYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1lZnRcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbShcIkVGVCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG0sIGVycl9fOiBlcnJfXyRsIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1zZXBhXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4U0VQQUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAoYXZhaWxhYmxlQmFua3MgJiYgYXZhaWxhYmxlQmFua3MubGVuZ3RoID49IDEpIHtcbiAgICAgIGxvZ19fJG0oXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlbGVjdGVkQmFuayA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IoYXZhaWxhYmxlQmFua3MsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG0oYEJhbmsgc2VsZWN0ZWQ6ICR7c2VsZWN0ZWRCYW5rLmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJG0oXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiB2ZXJpZmljYXRpb25NZXRob2QsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIHNlcGFfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvLyB0cnVlbGF5ZXJcbiAgICAgICAgICAgIGJhbmtfbmFtZTogc2VsZWN0ZWRCYW5rPy5iYW5rX25hbWUsXG4gICAgICAgICAgICBjb3VudHJ5X2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICAgICAgLy8gbWljcm9kZXBvc2l0XG4gICAgICAgICAgICBvd25lcl9uYW1lOiBnZXRGdWxsTmFtZShub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSwgbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSksXG4gICAgICAgICAgICBvd25lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdXG4gICAgICAgICAgICAvLyBpYmFuOiBjdXN0b21QYXJhbXMuaWJhbixcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kbShcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG0oYOKVsCBTRVBBIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGwoXCJTRVBBIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCwgZXJyX186IGVycl9fJGsgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kayhkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRsKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRrKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMihlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJGsoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICAgIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGFwcGxlUGF5UGF5bWVudCkgPT4ge1xuICBjb25zdCBwbUJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBzaGlwcGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuc2hpcHBpbmdDb250YWN0O1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgaWYgKHBtQmlsbGluZ0NvbnRhY3QgfHwgYmlsbGluZ0NvbnRhY3QgfHwgc2hpcHBpbmdDb250YWN0KSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwbUJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgYmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBzaGlwcGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9ICh7XG4gIHRvdGFsLFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7cHJlZmlsbC50b2tlbn1gLCBGUkFNRV9CQVNFX1VSTCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cbiAgY29uc3QgbGluZUl0ZW0gPSBwcmVmaWxsLmxpbmVfaXRlbXM/LlswXTtcbiAgaWYgKCFsaW5lSXRlbSkgcmV0dXJuIHZvaWQgMDtcbiAgcmV0dXJuIHtcbiAgICBwYXltZW50RGVzY3JpcHRpb246IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgIGxhYmVsOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ID8/IHZvaWQgMCxcbiAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICB9LFxuICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtwcmVmaWxsLnRva2VufWBcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVBcHBsZVBheVRvdGFsID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbCA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCBhbW91bnQgPSAoYW1vdW50QXRvbSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5sYWJlbCA/PyBkZWZhdWx0TGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICBpbml0aWFsUHJldmlldyxcbiAgICBwcmVmaWxsLFxuICAgIGRlZmF1bHRMYWJlbFxuICB9KTtcbiAgbGV0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KVxuICB9O1xuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRrLCBlcnJfXzogZXJyX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRqKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kayhcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRqKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRrKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJGsoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kayhcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRqKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJGooXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kaihgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJGsoYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDEoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJGsoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kaiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRqKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaSwgZXJyX186IGVycl9fJGkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kaShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGkoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kaShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGkoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kaShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5wYXltZW50UmVxdWVzdC50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kaShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGgsIGVycl9fOiBlcnJfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaChcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGgoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRoKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kaChcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGgoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kaChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRoKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRoKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kaChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kaChcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kaChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRoKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRoKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGgoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGcsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hY2hcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhBQ0hGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGN1c3RvbVBhcmFtcy5pc0J1c2luZXNzQWNjb3VudCA/PyBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF1cbiAgICAgICAgICAgIC8vQUNIIG1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgLy8gYWNjb3VudF9udW1iZXI6IGFjaFJlc3VsdD8ucGF5bG9hZD8uYWNjb3VudE51bWJlcixcbiAgICAgICAgICAgIC8vIGFiYV9yb3V0aW5nX251bWJlcjogYWNoUmVzdWx0Py5wYXlsb2FkPy5yb3V0aW5nTnVtYmVyLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRnKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBQ0ggdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgbG9nX18kZyhg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdDb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWFjaFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRnKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KSB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgfVxuICBsb2dfXyRmKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gIH0pO1xuICBsb2dfXyRmKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICBsb2dfXyRmKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gIHJldHVybiBjb25maXJtUmVzdWx0O1xufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCByZXF1aXJlZFVzZXJBY3Rpb25zID0gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXTtcbiAgICBjb25zdCBjb25zZW50SWQgPSByZXF1aXJlZFVzZXJBY3Rpb25zLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJGYoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBsZXQgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhPy5yZWRpcmVjdF91cmwgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkKSB7XG4gICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgaGFuZGxlM0RTKG5leHRBY3Rpb25NZXRhZGF0YSwgY29udGV4dCk7XG4gICAgICBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgfVxuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGUsIGVycl9fOiBlcnJfXyRmIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRlKFwiQXBwbGUgUGF5IExvYWRlZFwiKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBmb3JtQ2FsbGJhY2tzXG4gIH0pID0+IHtcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSQyKTtcbiAgICBjb25zdCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsIGluaXRpYWxQcmV2aWV3IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnByZWZpbGxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGxvZ19fJGUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnBheW1lbnRSZXF1ZXN0LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkJDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGVycl9fJGYoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRkLCBlcnJfXzogZXJyX18kZSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoY29udGV4dC5iYXNlVXJsKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwiUFJPRFVDVElPTlwiICYmICFwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpIHtcbiAgICAgIGVycl9fJGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRkKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIHByZWZpbGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHsgcmVzdWx0OiBpc1JlYWR5VG9QYXkgfSA9IGF3YWl0IGNsaWVudC5pc1JlYWR5VG9QYXkocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGlmICghaXNSZWFkeVRvUGF5KSB7XG4gICAgICAgIGxvZ19fJGQoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKTtcbiAgICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGVycik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoYW55Q2RlQ29ubmVjdGlvbiwgcHJlZmlsbC50b2tlbiwgaXNTZXR1cE1vZGUsIHZvaWQgMCk7XG4gICAgY29uc3Qgb25Hb29nbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZ29vZ2xlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kZChcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgcHJlZmlsbCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICB0cmFjayhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBnb29nbGVQYXlDcG0ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBleGNsdWRlUHJvcHMocHJlZmlsbCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEdvb2dsZVBheW1lbnRzQ2xpZW50KGNvbnRleHQuYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCBjbGllbnQubG9hZFBheW1lbnREYXRhKHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBsb2dfXyRkKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkobm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgICBtZXJnZWRJbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBjdXN0b21QYXJhbXM/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGxvZ19fJGQoXCJfX19cIiwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJGQoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBzdGFydEZsb3dOZXh0QWN0aW9ucyk7XG4gICAgICBsZXQgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJGQoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRkKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgR29vZ2xlUGF5Q3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IG1vYmlsZVdhbGxldFBheW1lbnREYXRhID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH07XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogbW9iaWxlV2FsbGV0UGF5bWVudERhdGFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGMsIGVycl9fOiBlcnJfXyRkIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtYXBwbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBpZiAoIWFwcGxlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGMoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpIHtcbiAgICAgIGxvZ19fJGMoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7XG4gICAgaWYgKCFjYW5NYWtlUGF5bWVudHMpIHtcbiAgICAgIGxvZ19fJGMoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBhcHBsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uQXBwbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhcHBsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBBcHBsZVBheUNwbSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBwcmVmaWxsLFxuICAgICAgZGVmYXVsdExhYmVsOiBhcHBsZVBheUNwbT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kYyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHBheW1lbnRSZXF1ZXN0LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kZChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpO1xuY29uc3QgaW5pdEF1dGhuZXRHb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kYihcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlUmVzdWx0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0pO1xuICAgIGlmICghZ29vZ2xlUGF5Q3BtKSB7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGIoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyRjKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kYihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIik7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kYyhcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGIoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kYihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRjKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kYyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25Hb29nbGVQYXlTdGFydEZsb3dcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuQXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0gPSBjdXN0b21QYXJhbXM7XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGIoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGIoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKGVuY3J5cHRlZFBheW1lbnRUb2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kYyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJGIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LWNjXCIpO1xuY29uc3QgUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IHBhcnNlUmVzdWx0ID0gUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMuc2FmZVBhcnNlKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZnJpZW5kbHlFcnIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCI7XG4gICAgY29uc3QgZGV2RXJyID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gO1xuICAgIGVycl9fJGIoZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmID0gKGhyZWYpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YXVsdElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgfVxuICAgIGxvZ19fJGEoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3ZhdWx0SWR9XWApO1xuICAgIHJldHVybiB2YXVsdElkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyck1zZyA9IGBFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRiKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcGFyc2VBcmdGcm9tSHJlZiA9IChocmVmLCBhcmdOYW1lKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zLmdldChhcmdOYW1lKTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgcmV0dXJuIGVycm9yUmVzcG9uc2VIZWFkZXJzPy5bXCJvcC1wb2NreXQtM2RzLXVybFwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1blBvY2t5dDNkc0Zsb3cgPSBhc3luYyAoYmFzZVVybCwgZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyQ5KGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJDkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRhKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyQ5KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kOShg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyQ5KGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyQ5KGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kYShg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyQ5KGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZkxlZ2FjeTNEU1BhdGgodXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyh7IHJlcXVpcmVkX3VzZXJfYWN0aW9uczogW3VzZXJBY3Rpb25dIH0sIGJhc2VVcmwpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgM0RTIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh1c2VyQWN0aW9uKX1gKTtcbiAgfVxufTtcbmNvbnN0IGNoZWNrSWZMZWdhY3kzRFNQYXRoID0gKHVzZXJBY3Rpb24pID0+IHtcbiAgdHJ5IHtcbiAgICBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YShbdXNlckFjdGlvbl0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uID0gKHBmUmVzdWx0KSA9PiB7XG4gIGlmICghcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgaWYgKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgdXNlckFjdGlvbiA9IFVzZXJBY3Rpb25GRVBheWxvYWQuc2FmZVBhcnNlKHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gIGlmICghdXNlckFjdGlvbi5zdWNjZXNzKSB7XG4gICAgZXJyX18kYShcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIHBmUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gICAgZXJyX18kYShcIlBhcnNpbmcgZXJyb3JcIiwgdXNlckFjdGlvbi5lcnJvcik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5kYXRhXG4gIH07XG59O1xuY29uc3QgcmV0dXJuU3VjY2Vzc1Jlc3VsdCA9IChwcmVmaWxsTW9kZSwgcGZSZXN1bHQpID0+IHtcbiAgaWYgKHByZWZpbGxNb2RlID09PSBcInNldHVwXCIpIHtcbiAgICBjb25zdCBwYXltZW50TWV0aG9kSWQgPSBwZlJlc3VsdC5jY19wbV9pZCA/PyBwZlJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXS5pZDtcbiAgICBpZiAoIXBheW1lbnRNZXRob2RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBwYXltZW50X21ldGhvZF9pZDogcGF5bWVudE1ldGhvZElkXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kOCwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ4KGDilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLmAsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kIH0pO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgdHJhY2soXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByZWZpbGxcbiAgICB9KTtcbiAgICBjb25zdCB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gPSBwcmVmaWxsLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncz8uW1widW5pZmllZF9jY1wiXSA/PyAwO1xuICAgIGxvZ19fJDgoYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZCh1bmlmaWVkQ0NSb2xsb3V0UmF0aW8gKiAxMDApfSVgKTtcbiAgICBjb25zdCByb2xsID0gTWF0aC5yYW5kb20oKTtcbiAgICBjb25zdCB1c2VVbmlmaWVkQ0NGbG93ID0gcm9sbCA8IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbztcbiAgICBjb25zdCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSA9IHtcbiAgICAgIHJvbGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW8sXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93XG4gICAgfTtcbiAgICBpZiAodXNlVW5pZmllZENDRmxvdykge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7cm9sbH0gdnMgJHt1bmlmaWVkQ0NSb2xsb3V0UmF0aW99KWApO1xuICAgICAgdHJhY2soXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICAgIHJldHVybiB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3coe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtcyxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kOChg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCB1Y2NSb2xsVHJhY2tpbmdNZXRhZGF0YSk7XG4gICAgfVxuICAgIGxvZ19fJDgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiBmYWxzZSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kOChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQ4KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDgoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDgoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyQ4KGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kOChcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB0cmFjayhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAuLi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAuLi5lcnJvci5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZXJySGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgaWYgKFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBlcnJIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZCA9IGVyckhlYWRlcnNbXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtjb21tb25DaGVja291dFBhcmFtcy5leGlzdGluZ19jY19wbV9pZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNQb2NreXQzZHMgPSBjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzUG9ja3l0M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5Qb2NreXQzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcInBvY2t5dFwiXSA9IHBvY2t5dE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWlyd2FsbGV4M2RzID0gY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzKGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGlmIChyZXF1aXJlc0FpcndhbGxleDNkcykge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuYCk7XG4gICAgICAgICAgICBjb25zdCBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWlyd2FsbGV4M2RzRmxvdyhjb250ZXh0LmJhc2VVcmwsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhaXJ3YWxsZXhcIl0gPSBhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc0FkeWVuM2RzID0gY2hlY2tJZlJlcXVpcmVzQWR5ZW4zZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWR5ZW4zZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFkeWVuM2RzRmxvdyhcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICAgIHByZWZpbGwubG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJhZHllblwiXSA9IGFkeWVuTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kOChg4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkVXNlU3RyaXBlRmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAgIGlmICghcmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRVc2VTdHJpcGVGbG93KSB7XG4gICAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgc3RyaXBlQ0MzRFNGbG93KHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNjUG1JZCA9IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQ7XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2NjUG1JZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kOChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAkeyFzaG91bGRVc2VTdHJpcGVGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcyxcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogc2hvdWxkVXNlU3RyaXBlRmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQ5KGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDkoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uM0RTQWN0aW9uVHlwZXMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl07XG5jb25zdCBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXF1aXJlZF91c2VyX2FjdGlvbnMpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gY29tbW9uM0RTQWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uLnR5cGUpKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIGxvZ19fJDgoYOKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgdHJhY2soXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ19fJDgoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgdHJhY2soXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICBsb2dfXyQ4KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRyYWNrKFwiM2RzX2NhbmNlbGxlZFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0cmFjayhcIjNkc19mYWlsdXJlXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG4gIHRyYWNrKFwiY29tbW9uXzNkc19jb21wbGV0ZWRcIik7XG59O1xuXG5jb25zdCBMb29wQ3J5cHRvQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNywgZXJyX186IGVycl9fJDggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwibG9vcC1jcnlwdG9cIik7XG5jb25zdCBpbml0TG9vcEZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQ3KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uYCk7XG4gICAgY29uc3QgY2hlY2tvdXRQYXltZW50TWV0aG9kID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExvb3BDcnlwdG9DcG0pO1xuICAgIGxvZ19fJDcoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeShjaGVja291dFBheW1lbnRNZXRob2QpfWApO1xuICAgIGxvZ19fJDcoYFN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5gKTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChcbiAgICAgIGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIHByZWZpbGwudG9rZW4sXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFpc1NldHVwTW9kZSAmJiAhY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHByZWZpbGwuY3VycmVuY3kpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEN1cnJlbmN5ICR7cHJlZmlsbC5jdXJyZW5jeX0gbm90IGVuYWJsZWQgZm9yIExvb3AuIEVuYWJsZWQgY3VycmVuY2llczogJHtjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhIHx8ICFwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhLm5leHRfYWN0aW9uX21ldGFkYXRhKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudFNldHVwSW5mbyA9IHByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgbGV0IHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBwYXltZW50U2V0dXBJbmZvW1wiYXV0aG9yaXphdGlvbl9hbW91bnRcIl07XG4gICAgbGV0IG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBwYXltZW50U2V0dXBJbmZvW1wibWluX2F1dGhvcml6YXRpb25fYW1vdW50XCJdO1xuICAgIGNvbnN0IGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGggPSBwYXltZW50U2V0dXBJbmZvW1wiYWxsb3dfY3VzdG9tZXJfdG9fY2hvb3NlX2F1dGhcIl07XG4gICAgbGV0IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgICBjaGFyZ2VBbW91bnRVc2RBdG9tID0gMDtcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBNYXRoLm1heChzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IChpbml0aWFsUHJldmlldyA/IGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20gOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tKSAqIHBheW1lbnRTZXR1cEluZm9bXCJ0b2tlbl9wcmljZVwiXTtcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBNYXRoLm1heChtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50LCBjaGFyZ2VBbW91bnRVc2RBdG9tKTtcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQgPSBNYXRoLm1heChzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50LCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50KTtcbiAgICB9XG4gICAgY29uc3QgcGF5bWVudFVzZEFtb3VudCA9IGNoYXJnZUFtb3VudFVzZEF0b207XG4gICAgY29uc3QgY3VzdG9tZXJSZWZJZCA9IHY0KCk7XG4gICAgY29uc3Qgd2lkZ2V0UHJvcHMgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50LFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCxcbiAgICAgIGN1c3RvbWVyUmVmSWQsXG4gICAgICBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50LFxuICAgICAgYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aFxuICAgIH07XG4gICAgY29uc3QgaW5pdExvb3BDb25uZWN0UHJvcHMgPSB7XG4gICAgICBhcGlUb2tlbjogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW50aXR5X2lkLFxuICAgICAgbWVyY2hhbnRJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLm1lcmNoYW50X2lkLFxuICAgICAgZW52aXJvbm1lbnQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgd2lkZ2V0UHJvcHMsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wc1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5Mb29wRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDcoYFJ1bm5pbmcgTG9vcCBmbG93Li4uYCk7XG4gICAgbG9nX18kNyhcImNvbnRleHRcIiwgY29udGV4dCk7XG4gICAgbG9nX18kNyhcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCBjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDcoXCJub25DZGVGb3JtSW5wdXRzXCIsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgIGxvZ19fJDcoXCJmbG93Q2FsbGJhY2tzXCIsIGZvcm1DYWxsYmFja3MpO1xuICAgIGxvZ19fJDcoXCJjdXN0b21QYXJhbXNcIiwgY3VzdG9tUGFyYW1zKTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IGlzQ2hlY2tvdXRNb2RlID0gcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCI7XG4gICAgY29uc3QgY3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghY3VzdG9tUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICB9XG4gICAgaWYgKCFjdXN0b21QYXJhbXMuc3VjY2Vzcykge1xuICAgICAgdHJhY2soXCJsb29wX3BheV9mbG93X2ZhaWx1cmVcIiwgY3VzdG9tUGFyYW1zKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gU3VjY2VzcyBpcyBub3QgdHJ1ZS5cIik7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgLi4uY3VzdG9tZXJGaWVsZHMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzQ2hlY2tvdXRNb2RlLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc0NoZWNrb3V0TW9kZSA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNDaGVja291dE1vZGUgPyBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBjdXN0b21QYXJhbXMuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5bWVudF9tZXRob2Q6IGN1c3RvbVBhcmFtcy5wYXltZW50TWV0aG9kLFxuICAgICAgICBsb29wX3N1Y2Nlc3M6IGN1c3RvbVBhcmFtcy5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kNyhgQ29uZmlybSByZXN1bHQ6ICR7Y29uZmlybVJlc3VsdH1gKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDcoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGxvZ19fJDcoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbG9nX18kNyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ3KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgaWYgKCFjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJDgoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDYsIGVycl9fOiBlcnJfXyQ3IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBheXBhbFwiKTtcbmNvbnN0IFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IGluaXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQYXlwYWxDcG0pO1xuICBpZiAoIXBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ2KGBSdW5uaW5nIFBheVBhbCBmbG93Li4uYCk7XG4gICAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCB7IGlzQW5vbnltb3VzLCB1c2VSZWRpcmVjdEZsb3cgfSA9IGN1c3RvbVBhcmFtcy5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIGxvZ19fJDYoYFZlcmlmeWluZyBDUE0uLi5gKTtcbiAgICAgIGNvbnN0IGNwbSA9IFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgICAgbG9nX18kNihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmlzQW5vbnltb3VzID8gZ2VuZXJhdGVBbm9ueW1vdXNWYWx1ZXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBsb2dfXyQ2KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtwcmVmaWxsLm1vZGV9YCk7XG4gICAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCI7XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVxdWVzdCA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGlzUGF5Rmlyc3RGbG93LFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IHVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgICB9LFxuICAgICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRSZXF1ZXN0ID0gYnRvYShKU09OLnN0cmluZ2lmeShzdGFydFBheW1lbnRGbG93UmVxdWVzdCkpO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgICByOiBlbmNvZGVkUmVxdWVzdFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKHVzZVJlZGlyZWN0Rmxvdykge1xuICAgICAgICBsb2dfXyQ2KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgICBhd2FpdCBzbGVlcCgyMCAqIDFlMyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICAgIHJlZGlyZWN0VXJsXG4gICAgICApO1xuICAgICAgbG9nX18kNihcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0QXR0ZW1wdElkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiY2F0dFwiKTtcbiAgICAgIGNvbnN0IGFwcHJvdmFsU2Vzc2lvbklkID0gcGFyc2VBcmdGcm9tSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzUGF5Rmlyc3RGbG93ID8gY2hlY2tvdXRBdHRlbXB0SWQgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBpc1BheUZpcnN0RmxvdyA/IGFwcHJvdmFsU2Vzc2lvbklkIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDYoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBjcG0sXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBpc1BheUZpcnN0Rmxvd1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ3KFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IGVyciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9ja3l0LXBheXBhbFwiKTtcbmNvbnN0IFBvY2t5dFBheXBhbENwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRQb2NreXRQYXlwYWxGbG93ID0gYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gIGNvbnN0IHBvY2t5dFBheXBhbENwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQb2NreXRQYXlwYWxDcG0pO1xuICBpZiAoIXBvY2t5dFBheXBhbENwbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwb2NreXRQYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGN1c3RvbVBhcmFtcz8uc2V0dGluZ3M7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgc2V0dGluZ3M/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGxvZ19fJDUoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3ByZWZpbGwubW9kZX1gKTtcbiAgICBjb25zdCBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93ID0gdjQoKTtcbiAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY3BtLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogaXNQYXlGaXJzdEZsb3csXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGlzUGF5Rmlyc3RGbG93ID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0Rmxvd1xuICAgICAgfSxcbiAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgfTtcbiAgICBjb25zdCBwcmVBY3Rpb25VcmwgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBjb250ZXh0LmJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcHJlZmlsbC50b2tlbixcbiAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgJHtwcmVBY3Rpb25Vcmx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICBsb2dfXyQ1KFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIH1cbiAgICBsb2dfXyQ1KFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpO1xuICAgIGxvZ19fJDUoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93LFxuICAgICAgcmVkaXJlY3RVcmxcbiAgICApO1xuICAgIGxvZ19fJDUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgcGF5cGFsRmxvd1Jlc3VsdCk7XG4gICAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghY2hlY2tvdXRBdHRlbXB0SWQpIHtcbiAgICAgIGVycl9fJDYoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHBheXBhbEZsb3dSZXN1bHQuaHJlZik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgfVxuICAgIGxvZ19fJDUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICAgICAgZXJyX18kNihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBjb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kNChgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ0KGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kNChgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kNShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNChgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ0KGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kNChgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGN1c3RvbVBhcmFtcy5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGxvZ19fJDQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucy5wYXJzZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgICBjb25zdCBvdXJFeGlzdGluZ1BtSWQgPSBuZXh0QWN0aW9uTWV0YWRhdGFbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kNChgRG9pbmcgcGF5bWVudCBzZXR1cC4uLmApO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG91ckV4aXN0aW5nUG1JZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNChgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kNChgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCBnZXRFbGVtZW50QnlJZEFzeW5jID0gKGlkKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICBjb25zdCBnZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlc29sdmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShnZXRFbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGdldEVsZW1lbnQoKTtcbn0pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQzLCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDMoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQzKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNChgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDMoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICBjb25zdCBydW5TdHJpcGVQckZsb3cyID0gKHByb3ZpZGVyLCBwYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICAgIHByLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5IH0sXG4gICAgICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgcHIsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGNhbk1ha2VQYXltZW50LmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGNhbk1ha2VQYXltZW50Lmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogcnVuU3RyaXBlUHJGbG93MlxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVQckZsb3ckMSA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMyhgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHIgPSBpbml0UmVzdWx0LnByO1xuICAgIGlmIChjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG92ZXJyaWRlID0gY3VzdG9tUGFyYW1zLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBsb2dfXyQzKGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgY29uc3QgYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9IHR5cGVvZiBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09PSBcImZ1bmN0aW9uXCIgPyBvdmVycmlkZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgYXBwbGVQYXlQYXltZW50UmVxdWVzdCwgb3ZlcnJpZGUubGFiZWwpO1xuICAgIH1cbiAgICBsb2dfXyQzKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kMyhgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDMoYFBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uYCwgbm9uQ2RlRm9ybUZpZWxkcyk7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvclBSKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBsb2dfXyQzKGBDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uYCk7XG4gICAgYXdhaXQgY29uZmlybVN0cmlwZVByUE0obmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgbG9nX18kMyhgQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQzKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQucGF5bWVudE1ldGhvZD8uYmlsbGluZ19kZXRhaWxzPy5hZGRyZXNzO1xuICBjb25zdCBzaGlwcGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgc3RyaXBlUG1FdnQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IHNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IGJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IHNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgcGF5ZXJGaXJzdE5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcGF5ZXJMYXN0TmFtZSB8fCBcIlwiO1xuICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGZpcnN0TmFtZTtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBsYXN0TmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IFwiXCI7XG4gIH1cbiAgbG9nX18kMyhgRmluYWwgZm9ybSBpbnB1dHM6YCwgaW5wdXRzKTtcbiAgcmV0dXJuIGlucHV0cztcbn07XG5jb25zdCB1cGRhdGVQcldpdGhBbW91bnQgPSAocHIsIGFtb3VudCwgaXNQZW5kaW5nLCBzdHJpcGVBcHBsZVBheSwgbGFiZWwpID0+IHtcbiAgcHIudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBsYWJlbCA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBpc1BlbmRpbmdcbiAgICB9LFxuICAgIGN1cnJlbmN5OiBhbW91bnQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogc3RyaXBlQXBwbGVQYXlcbiAgfSk7XG59O1xuY29uc3QgcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgfVxuICByZXR1cm4gUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn07XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGNwbXMpO1xuICAgIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIHRyYWNrKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgICAgcHJvdmlkZXI6IHdpdGhQcm92aWRlcixcbiAgICAgIHByb2Nlc3Nvcjogd2l0aFByb2Nlc3NvcixcbiAgICAgIGNwbXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvdyQxXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlTGlua0Zsb3csXG4gICAgcnVuOiBydW5TdHJpcGVMaW5rRmxvd1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogaW5pdFBvY2t5dFBheXBhbEZsb3csXG4gICAgcnVuOiBydW5Qb2NreXRQYXlwYWxGbG93XG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBheXBhbEZsb3dcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBcHBsZVBheUZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4QUNIOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhBQ0hGbG93XG4gIH0sXG4gIGFpcndhbGxleEVGVDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQWlyd2FsbGV4RUZURmxvd1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhCQUNTRmxvd1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhTRVBBRmxvd1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBpbml0TG9vcEZsb3csXG4gICAgcnVuOiBydW5Mb29wRmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0QXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQXV0aG5ldEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0R29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBZHllbkdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BZHllbkdvb2dsZVBheUZsb3dcbiAgfSxcbiAgYWR5ZW5BcHBsZVBheToge1xuICAgIGluaXQ6IGluaXRBZHllbkFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuQXBwbGVQYXlGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQyLCBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIgPSAoZmxvd05hbWUsIGluaXRGbG93KSA9PiB7XG4gIGNvbnN0IHB1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChpbml0UGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgaW5pdEZsb3coaW5pdFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKclCAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGluaXRSZXN1bHQpO1xuICAgICAgICBwdWJsaXNoZXIuc2V0KGluaXRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMyhg8J2ZrSAke2Zsb3dOYW1lfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSwgXCJEZXRhaWxzOlwiLCBlcnJvcik7XG4gICAgICAgIHB1Ymxpc2hlci50aHJvdyhlcnJvciwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWxsSW5pdEZsb3dzID0gYXN5bmMgKGZsb3dzLCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZmxvd3MpLm1hcCgoZmxvdykgPT4gZmxvdy5pbml0aWFsaXplKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSkpO1xufTtcbmNvbnN0IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAgIC8vIFN0cmlwZSBQUlxuICAgIHN0cmlwZVBSOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlN0cmlwZSBQUlwiLCBPanNGbG93cy5zdHJpcGVQUi5pbml0KSxcbiAgICAvLyBTdHJpcGUgTGlua1xuICAgIHN0cmlwZUxpbms6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIExpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KSxcbiAgICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gICAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgICAvLyBMb29wXG4gICAgbG9vcDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJMb29wXCIsIE9qc0Zsb3dzLmxvb3BDcnlwdG8uaW5pdCksXG4gICAgLy8gUGF5UGFsXG4gICAgcGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBheVBhbFwiLCBPanNGbG93cy5wYXlwYWwuaW5pdCksXG4gICAgLy8gUG9ja3l0IFBheVBhbFxuICAgIHBvY2t5dFBheXBhbDogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJQb2NreXQgUGF5UGFsXCIsIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgQXBwbGVQYXlcIiwgT2pzRmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gICAgYWR5ZW5Hb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFkeWVuIEFwcGxlUGF5XG4gICAgYWR5ZW5BcHBsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBBcHBsZVBheVwiLCBPanNGbG93cy5hZHllbkFwcGxlUGF5LmluaXQpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcbn07XG5cbmNvbnN0IHsgZXJyX186IGVycl9fJDIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyQyKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlY3RGcmFtZXdvcmsoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG5leHRXaW5kb3c/Lm5leHQgfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibmV4dGpzXCIgLyogTmV4dEpTICovO1xuICAgIH1cbiAgICBjb25zdCBudXh0V2luZG93ID0gd2luZG93O1xuICAgIGlmIChudXh0V2luZG93Py5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSkge1xuICAgICAgcmV0dXJuIFwibnV4dFwiIC8qIE51eHQgKi87XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoa2V5KSA9PiBrZXkuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgISFBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG5vZGUpID0+IG5vZGUuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpIHtcbiAgICAgIHJldHVybiBcInJlYWN0XCIgLyogUmVhY3QgKi87XG4gICAgfVxuICAgIGNvbnN0IHZ1ZVdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAodnVlV2luZG93Py5WdWUgfHwgdnVlV2luZG93Py5fX1ZVRV9fKSB7XG4gICAgICByZXR1cm4gXCJ2dWVcIiAvKiBWdWUgKi87XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpKSB7XG4gICAgICByZXR1cm4gXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLztcbiAgICB9XG4gICAgcmV0dXJuIFwidmFuaWxsYVwiIC8qIFZhbmlsbGEgKi87XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiIC8qIFVua25vd24gKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChmcmFtZXdvcmspIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiIC8qIFJlYWN0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm5leHRqc1wiIC8qIE5leHRKUyAqLzoge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgICAgIGNvbnN0IG5leHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBuZXh0V2luZG93Py5uZXh0Py52ZXJzaW9uIHx8IG5leHRXaW5kb3c/Ll9fTkVYVF9EQVRBX18/LmJ1aWxkSWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCIgLyogTnV4dCAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJ2dWVcIiAvKiBWdWUgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYW5ndWxhclwiIC8qIEFuZ3VsYXIgKi86IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQyID0gZ2V0V2luZG93U2FmZSgpPy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgbmdWZXJzaW9uRWwgPSBkb2N1bWVudDI/LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiBuZ1ZlcnNpb25FbCA/IG5nVmVyc2lvbkVsLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZXdvcmtJbmZvKCkge1xuICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlY3RGcmFtZXdvcmsoKTtcbiAgY29uc3QgdmVyc2lvbiA9IGdldEZyYW1ld29ya1ZlcnNpb24oZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrLCB2ZXJzaW9uIH07XG59XG5cbmNvbnN0IGdldEZyYXVkTWV0YWRhdGEgPSAoKSA9PiB7XG4gIGNvbnN0IHNjcmVlbl9oZWlnaHQgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbDtcbiAgY29uc3Qgc2NyZWVuX3dpZHRoID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbDtcbiAgY29uc3QgY29sb3JfZGVwdGggPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGw7XG4gIGNvbnN0IGphdmFfZW5hYmxlZCA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogZmFsc2U7XG4gIGNvbnN0IHVzZXJfYWdlbnQgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbDtcbiAgY29uc3QgYWNjZXB0X2hlYWRlciA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgbGFuZ3VhZ2UgPSBudWxsO1xuICBpZiAod2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IpIHtcbiAgICBsYW5ndWFnZSA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2U7XG4gIH1cbiAgY29uc3QgdGltZV96b25lX29mZnNldCA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcl9kZXB0aCxcbiAgICBqYXZhX2VuYWJsZWQsXG4gICAgamF2YXNjcmlwdF9lbmFibGVkOiB0cnVlLFxuICAgIGxhbmd1YWdlLFxuICAgIHNjcmVlbl9oZWlnaHQsXG4gICAgc2NyZWVuX3dpZHRoLFxuICAgIHRpbWVfem9uZV9vZmZzZXQsXG4gICAgdXNlcl9hZ2VudCxcbiAgICBhY2NlcHRfaGVhZGVyXG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXBwbGVQYXlcIl0gPSBcImFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImdvb2dsZVBheVwiXSA9IFwiZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicGF5cGFsXCJdID0gXCJwYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkdvb2dsZVBheVwiXSA9IFwiYWR5ZW4tZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuQXBwbGVQYXlcIl0gPSBcImFkeWVuLWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFDSFwiXSA9IFwiYWlyd2FsbGV4LWFjaFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEVGVFwiXSA9IFwiYWlyd2FsbGV4LWVmdFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEJBQ1NcIl0gPSBcImFpcndhbGxleC1iYWNzXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4U0VQQVwiXSA9IFwiYWlyd2FsbGV4LXNlcGFcIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56Lm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG52YXIgUGF5bWVudFByb3ZpZGVyVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheW1lbnRQcm92aWRlclR5cGUyKSA9PiB7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQUNIXCJdID0gXCJhY2hcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJFRlRcIl0gPSBcImVmdFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkJBQ1NcIl0gPSBcImJhY3NcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTRVBBXCJdID0gXCJzZXBhXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQVBQTEVfUEFZXCJdID0gXCJhcHBsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUkVESVRfQ0FSRFwiXSA9IFwiY3JlZGl0X2NhcmRcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJHT09HTEVfUEFZXCJdID0gXCJnb29nbGVfcGF5XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiU1RSSVBFX0xJTktcIl0gPSBcInN0cmlwZV9saW5rXCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQ1JZUFRPXCJdID0gXCJjcnlwdG9cIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJQQVlQQUxcIl0gPSBcInBheXBhbFwiO1xuICByZXR1cm4gUGF5bWVudFByb3ZpZGVyVHlwZTI7XG59KShQYXltZW50UHJvdmlkZXJUeXBlIHx8IHt9KTtcblxuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kMSwgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwidHJhY2VyXCIpO1xuY29uc3QgaW5pdFRyYWNlclNhZmUgPSAodmVyc2lvbiwgYmFzZVVybCkgPT4ge1xuICB0cnkge1xuICAgIGluaXRUcmFjZXJVbnNhZmUodmVyc2lvbiwgYmFzZVVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZXJyX18kMShgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtlcnJvcn1gKTtcbiAgfVxufTtcbmxldCBnbG9iYWxUcmFjZXI7XG5jb25zdCBpbml0VHJhY2VyVW5zYWZlID0gYXN5bmMgKHZlcnNpb24sIGJhc2VVcmwpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGNvbnN0IHNka1RyYWNlV2ViID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwNn1+LmpzJyk7XG4gIGNvbnN0IHsgQ29uc29sZVNwYW5FeHBvcnRlciwgU2ltcGxlU3BhblByb2Nlc3NvciwgV2ViVHJhY2VyUHJvdmlkZXIgfSA9IHNka1RyYWNlV2ViO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb25GZXRjaCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGV9fi5qcycpO1xuICBjb25zdCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uIH0gPSBpbnN0cnVtZW50YXRpb25GZXRjaDtcbiAgY29uc3QgY29udGV4dFpvbmUgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBkfX4uanMnKTtcbiAgY29uc3QgeyBab25lQ29udGV4dE1hbmFnZXIgfSA9IGNvbnRleHRab25lO1xuICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBofX4uanMnKTtcbiAgY29uc3QgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgfSA9IGluc3RydW1lbnRhdGlvbjtcbiAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwan1+LmpzJyk7XG4gIGNvbnN0IHsgUmVzb3VyY2UgfSA9IHJlc291cmNlcztcbiAgY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtIX57MDBsfX4uanMnKS50aGVuKG4gPT4gbi5kKTtcbiAgY29uc3QgeyBkZXRlY3RSZXNvdXJjZXNTeW5jIH0gPSBkZXRlY3RSZXNvdXJjZXM7XG4gIGNvbnN0IGV4cG9ydGVyVHJhY2VPdGxwID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwbX1+LmpzJyk7XG4gIGNvbnN0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSA9IGV4cG9ydGVyVHJhY2VPdGxwO1xuICBjb25zdCBwcm9wYWdhdG9yQjMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBpfX4uanMnKTtcbiAgY29uc3QgeyBCM1Byb3BhZ2F0b3IsIEIzSW5qZWN0RW5jb2RpbmcgfSA9IHByb3BhZ2F0b3JCMztcbiAgY29uc3Qgc2RrVHJhY2VCYXNlID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwMX1+LmpzJyk7XG4gIGNvbnN0IHsgQmF0Y2hTcGFuUHJvY2Vzc29yIH0gPSBzZGtUcmFjZUJhc2U7XG4gIGxvZ19fJDEoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7dmVyc2lvbn0gYW5kIGJhc2VVcmwgJHtiYXNlVXJsfWApO1xuICBjb25zdCBjb2xsZWN0b3JVcmwgPSBnZXRDb2xsZWN0b3JVcmwoYmFzZVVybCk7XG4gIGxvZ19fJDEoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtjb2xsZWN0b3JVcmx9YCk7XG4gIGNvbnN0IGV4cG9ydGVyID0gbmV3IE9UTFBUcmFjZUV4cG9ydGVyKHsgdXJsOiBjb2xsZWN0b3JVcmwgfSk7XG4gIGNvbnN0IGJhc2VBdHRycyA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiB2ZXJzaW9uLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgV2ViVHJhY2VyUHJvdmlkZXIoe1xuICAgIHJlc291cmNlOiBuZXcgUmVzb3VyY2UoYmFzZUF0dHJzKS5tZXJnZShkZXRlY3RSZXNvdXJjZXNTeW5jKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgU2ltcGxlU3BhblByb2Nlc3NvcihuZXcgQ29uc29sZVNwYW5FeHBvcnRlcigpKSxcbiAgICAgIG5ldyBCYXRjaFNwYW5Qcm9jZXNzb3IoZXhwb3J0ZXIsIHtcbiAgICAgICAgc2NoZWR1bGVkRGVsYXlNaWxsaXM6IDUwMFxuICAgICAgfSlcbiAgICBdXG4gIH0pO1xuICBwcm92aWRlci5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyBab25lQ29udGV4dE1hbmFnZXIoKSxcbiAgICBwcm9wYWdhdG9yOiBuZXcgQjNQcm9wYWdhdG9yKHsgaW5qZWN0RW5jb2Rpbmc6IEIzSW5qZWN0RW5jb2RpbmcuTVVMVElfSEVBREVSIH0pXG4gIH0pO1xuICByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBGZXRjaEluc3RydW1lbnRhdGlvbih7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG4gIGdsb2JhbFRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGxvZ19fJDEoYFRyYWNlciBpbml0aWFsaXplZGApO1xuICByZXR1cm4gZ2xvYmFsVHJhY2VyO1xufTtcbmNvbnN0IGdldENvbGxlY3RvclVybCA9IChmcm9tQmFzZVVybCkgPT4ge1xuICBjb25zdCBiYXNlSG9zdG5hbWUgPSBuZXcgVVJMKGZyb21CYXNlVXJsKS5ob3N0bmFtZTtcbiAgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIpIHtcbiAgICByZXR1cm4gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiO1xuICB9IGVsc2UgaWYgKGJhc2VIb3N0bmFtZSA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIikge1xuICAgIHJldHVybiBcImh0dHBzOi8vb3RlbC5nZXRvcGVucGF5LmNvbS92MS90cmFjZXNcIjtcbiAgfVxuICByZXR1cm4gXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuXG5jbGFzcyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGZvcm1JZCwgYmFzZVVybCwgZm9ybUNhbGxiYWNrcywgaW50ZXJuYWxDYWxsYmFja3MpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJzb3VyY2VcIl0gJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZXZlbnREYXRhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHtcbiAgICAgICAgICAgIG9iZnVzY2F0ZWRWYWx1ZTogcGF5bG9hZC5vYmZ1c2NhdGVkVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tlbGVtZW50SWRdID0gZXZlbnQuc291cmNlO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBldmVudFR5cGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGV2ZW50RGF0YSkgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBldmVudERhdGEuZm9ybUlkKTtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdGhpcy5ldmVudFRhcmdldHMgPSB7fTtcbiAgICB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5mb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmZvcm1DYWxsYmFja3MgPSBmb3JtQ2FsbGJhY2tzO1xuICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpbnRlcm5hbENhbGxiYWNrcztcbiAgfVxufVxuY29uc3QgZ2V0Q2xlYW5PcmlnaW4gPSAodXJsKSA9PiB7XG4gIHJldHVybiBuZXcgVVJMKHVybCkub3JpZ2luO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihpZnJhbWUsIGNoaWxkT3JpZ2luKSB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgcmV0dXJuIGNvbm5lY3Rpb25PYmo7XG59XG5jbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24oaWQsIGNvbm5lY3Rpb24pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChpZCwgY29ubmVjdGlvbik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzID0gKGluaXRQckZsb3dzLCBjb250ZXh0LCBjYWxsYmFja3MpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUiB9ID0gaW5pdFByRmxvd3M7XG4gIHN0cmlwZVBSLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gcmVzdWx0LmxvYWRlZFZhbHVlO1xuICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuQXBwbGVQYXksXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGNhbkdvb2dsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgIHJ1blN0cmlwZVByRmxvdyhcImdvb2dsZV9wYXlcIiwgaW5pdFJlc3VsdCwgY29udGV4dCwgY2FsbGJhY2tzLCB1c2VyUGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjYWxsYmFja3MuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGZpbmFsU3RhdHVzKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgY29udGV4dCwgZm9ybUNhbGxiYWNrcywgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICBpbml0UmVzdWx0XG4gIH0pO1xufTtcblxuY29uc3QgR0VORVJJQ19DT05OX0VSUiA9IGBUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5gO1xuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtZm9ybVwiKTtcbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuY29udGV4dCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbml0Rmxvd3MgPSBjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzKCk7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpO1xuICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAvLyAnZW52aXJvbm1lbnQnOiAsXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yayc6IGZyYW1ld29yayxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrLnZlcnNpb24nOiB2ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZXh0LndpdGgodHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNkZUJyaWRnZUlmcmFtZSA9IHRoaXMuY3JlYXRlRWxlbWVudChFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIjtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGNkZUJyaWRnZUlmcmFtZS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubW91bnQoXCJib2R5XCIpO1xuICAgICAgICAgIGxvZ19fKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIik7XG4gICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjZGVDb25uU3BhbiA9IHRyYWNlcj8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBjb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICBjb25zdCBhbnlDZGVDb25uID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZGVDb25uU3Bhbj8uZW5kKCk7XG4gICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICAgIGF3YWl0IHNldFVzZXJEZXZpY2VUb2tlbihhbnlDZGVDb25uLCB0aGlzLmRldmljZVRva2VuKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCBvanNDb250ZXh0ID0gT3BlblBheUZvcm0uYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgICAgYW55Q2RlQ29ubixcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KG9qc0NvbnRleHQpO1xuICAgICAgICAgIHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgICBhd2FpdCBzdGFydEFsbEluaXRGbG93cyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjZGVMb2FkZWQudG90YWxBbW91bnRBdG9tcywgY2RlTG9hZGVkLmN1cnJlbmN5KTtcbiAgICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgICAgIHNwYW4/LnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgIHRyYWNrKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICAgIHNwYW4/LnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVycl9fKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIHRyYWNrKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc3Bhbj8uZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSByZXR1cm47XG4gICAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZGVkID0gKHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KHBheWxvYWQpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkZWRcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGVyck1zZykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZXJyTXNnKSwgZXJyTXNnKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyck1zZ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke2ZyYW1lLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nLnRvU3RyaW5nKCk7XG4gICAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFbGVtZW50ID0gdGhpcy5yZWdpc3RlcklmcmFtZSh0eXBlLCBmcmFtZSk7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZEVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKHR5cGUsIGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlOiBmcmFtZSxcbiAgICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSk7XG4gICAgICAgICAgdHJhY2soXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKTtcbiAgICAgICAgICBjb25uLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlbGVtZW50LnR5cGUsIGNvbm4pO1xuICAgICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHtcbiAgICAgICAgICAgIHRoaXMuYW55Q2RlQ29ubi5zZXQoY29ubik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApLmNhdGNoKChlcnIpID0+IGVycl9fKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBlcnIpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9O1xuICAgIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlcnJfXyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cmFjayhcInN1Ym1pdF9jYXJkXCIsIHsgLi4ucGFyYW1zIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYXBwbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBcHBsZVBheUF2YWlsYWJsZSB9ID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlIH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IHBheXBhbEF2YWlsYWJsZSA9IHBheXBhbEZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA9IGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAgIChtZXRob2QpID0+IG1ldGhvZC5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiBtZXRob2QucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxvb3BGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgbG9vcENyeXB0b0F2YWlsYWJsZSA9IGxvb3BGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaW5pdEZsb3dOYW1lTWFwID0ge1xuICAgICAgICAgICAgcGF5cGFsOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICAgIGFkeWVuR29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5LFxuICAgICAgICAgICAgYWR5ZW5BcHBsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzX29sZCA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbG93UmVzdWx0ID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5pdEZsb3dOYW1lTWFwW2tleV0gPz8ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gWy4uLm1ldGhvZHNfb2xkLCAuLi5tZXRob2RzXTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kLCBzZXR0aW5ncyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkeWVuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuR29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWR5ZW5BcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpO1xuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICAgIGRldGFjaEVycm9yTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgICBkZWxldGUgd2luZG93W1wib2pzXCJdO1xuICAgICAgdHJhY2soXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuNVwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuNS41LWFscGhhLjA5NGQ5M2RcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5kZXZpY2VUb2tlbiA9IGdldERldmljZVRva2VuKCk7XG4gICAgYXR0YWNoRXJyb3JMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yaywgdmVyc2lvbiB9ID0gZ2V0RnJhbWV3b3JrSW5mbygpO1xuICAgIGdldEN1cnJlbnRFbnYodGhpcy5iYXNlVXJsKS50aGVuKChlbnZpcm9ubWVudCkgPT4ge1xuICAgICAgaWYgKCFtZXRyaWNzUHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgZnJhbWV3b3JrLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBtZXRyaWNzUHVibGlzaGVyLnNldChtZXRyaWNzQ29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJhY2soXCJmb3JtX2luaXRcIik7XG4gICAgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pO1xuICAgIGlmIChjb25maWcuYWxsb3dUcmFjaW5nID09PSB0cnVlKSB7XG4gICAgICBpbml0VHJhY2VyU2FmZSh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IGNvbmZpZy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKGNhbGxlciA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBkZWJ1Z0luZm8gPSB7XG4gICAgICBjYWxsZXIsXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IGN1cnJlbnRJbnN0YW5jZT8uZm9ybUlkIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7Y2FsbGVyfVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtkZWJ1Z0luZm8udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtkZWJ1Z0luZm8uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke2RlYnVnSW5mby5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7ZGVidWdJbmZvLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dEFQSSBhcyBDLCBEaWFnQVBJIGFzIEQsIEZpZWxkTmFtZSBhcyBGLCBJTlZBTElEX1NQQU5fQ09OVEVYVCBhcyBJLCBPcGVuUGF5Rm9ybSBhcyBPLCBQcm94eVRyYWNlciBhcyBQLCBST09UX0NPTlRFWFQgYXMgUiwgU3BhbktpbmQgYXMgUywgVHJhY2VGbGFncyBhcyBULCBEaWFnTG9nTGV2ZWwgYXMgYSwgY3JlYXRlQ29udGV4dEtleSBhcyBiLCBjb250ZXh0IGFzIGMsIGlzVmFsaWRUcmFjZUlkIGFzIGQsIGlzVmFsaWRTcGFuSWQgYXMgZSwgU3BhblN0YXR1c0NvZGUgYXMgZiwgZ2V0R2xvYmFsIGFzIGcsIElOVkFMSURfU1BBTklEIGFzIGgsIGlzU3BhbkNvbnRleHRWYWxpZCBhcyBpLCBJTlZBTElEX1RSQUNFSUQgYXMgaiwgUHJveHlUcmFjZXJQcm92aWRlciBhcyBrLCBTdWJtaXRNZXRob2RzIGFzIGwsIHJlZ2lzdGVyR2xvYmFsIGFzIHIsIHRyYWNlIGFzIHQsIHVucmVnaXN0ZXJHbG9iYWwgYXMgdSB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsa0JBQUFBLFVBQXNCO0FBQy9CLFNBQVMsS0FBQUMsU0FBUztBQUNsQixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUVuQixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFPO0FBR2QsTUFBSUssSUFBb0IsTUFBTTtBQUM5QixFQUFBQSxLQUFxQkEsRUFBa0JMLEdBQVFJLENBQUU7QUFDbkQ7QUFFQSxJQUFJRSxLQUFjLDJCQUFZO0FBQzVCLE1BQUlDLElBQWlCLFNBQXVCQyxHQUFHQyxHQUFHO0FBQ2hELFdBQUFGLElBQWlCLE9BQU8sa0JBQWtCO0FBQUEsTUFDeEMsV0FBVyxDQUFDO0FBQUEsSUFDZCxhQUFhLFNBQVMsU0FBVUMsR0FBR0MsR0FBRztBQUNwQyxNQUFBRCxFQUFFLFlBQVlDO0FBQUEsSUFDaEIsS0FBSyxTQUFVRCxHQUFHQyxHQUFHO0FBQ25CLGVBQVNDLEtBQUtEO0FBQ1osUUFBSSxPQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFHQyxDQUFDLE1BQUdGLEVBQUVFLENBQUMsSUFBSUQsRUFBRUMsQ0FBQztBQUFBLElBRTlELEdBRU9ILEVBQWVDLEdBQUdDLENBQUM7QUFBQSxFQUM1QjtBQUVBLFNBQU8sU0FBVUQsR0FBR0MsR0FBRztBQUNyQixRQUFJLE9BQU9BLEtBQU0sY0FBY0EsTUFBTSxLQUFNLE9BQU0sSUFBSSxVQUFVLHlCQUF5QixPQUFPQSxDQUFDLElBQUksK0JB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LEtBQVMsQ0FBQyxFQUFFLE9BQUFDLEdBQU8sUUFBQUMsRUFBTyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUF5QnZCRCxLQUFTLE9BQU87QUFBQSxnQkFDZkMsS0FBVSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQVFsQkQsS0FBUyxPQUFPO0FBQUEsZ0JBQ2ZDLEtBQVUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBaUIzQkMsS0FBcUIsQ0FBQyxFQUFFLE9BQUFGLEdBQU8sUUFBQUMsRUFBTyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUF5Qm5DRCxLQUFTLE9BQU87QUFBQSxnQkFDZkMsS0FBVSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBVVpBLEtBQVUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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c0IsQ0FBQ2gvQixHQUFRdWhDLEdBQWtCcGEsR0FBa0JqSixPQUMvRDtBQUFBLEVBQ0wscUJBQXFCbGUsRUFBTztBQUFBLEVBQzVCLFNBQVMsSUFBSSxJQUFJQSxFQUFPLFdBQVd5YixFQUFjLEVBQUU7QUFBQSxFQUNuRCxTQUFBeUM7QUFBQSxFQUNBLG1CQUFtQnFqQixFQUFpQjtBQUFBLEVBQ3BDLHdCQUF3QkEsRUFBaUI7QUFBQSxFQUN6QyxrQkFBQXBhO0FBQUEsRUFDQSxrQkFBa0JubkIsRUFBTyxvQkFBb0IsQ0FBQztBQUFBLEVBQzlDLG1DQUFtQ0EsRUFBTztBQUM1QztBQXRtQk4sSUFBTXdoQyxLQUFOeEM7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInoiLCAiY2hhbGsiLCAidjQiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkFXWEJhbmsiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlQWRkcmVzcyIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJVc2VyQWN0aW9uRkVQYXlsb2FkIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UiLCAiWm9kRmllbGRFcnJvciIsICJab2RGaWVsZEVycm9ycyIsICJNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFIiwgImdldEh1bWFuRnJpZW5kbHlNZXNzYWdlIiwgIm9nRXJyb3JNZXNzYWdlIiwgImtleSIsICJpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCIsICJzdHIiLCAiY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJyZXNwb25zZSIsICJlcnIiLCAiY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyIsICJlcnJvcnMiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIm9iaiIsICJlMiIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgInN1bSIsICJhcnIiLCAiYSIsICJiZWZvcmVVbmxvYWRIYW5kbGVyIiwgImV2ZW50IiwgInByZXZlbnROYXZpZ2F0aW9uIiwgInN0b3BQcmV2ZW50TmF2aWdhdGlvbiIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJzaW1wbGVPanNGbG93IiwgImlzU3VibWl0dGluZyIsICJwYXJhbXMiLCAiX2EiLCAiX2IiLCAidHJhY2siLCAiZmxvd1Jlc3VsdCIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAiZXJyb3JNZXNzYWdlIiwgImVycm9yQ29kZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJpbml0IiwgImVycl9fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCQ0IiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiaSIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5JDQiLCAiX19yZWFkJDQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAiT2pzRW52aXJvbm1lbnQiLCAieiIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImVudkNhY2hlIiwgImdldEN1cnJlbnRFbnYiLCAiYmFzZVVybCIsICJyZXNwb25zZSIsICJyZXMiLCAiZXhjbHVkZVByb3BzIiwgInByb3BzIiwgImtleSIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18kcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgInRyYWNrIiwgImZvcmNlUHJvY2Vzc01ldHJpY3NRdWV1ZSIsICJvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yIiwgImVycm9yTWVzc2FnZSIsICJnZXRFcnJvck1lc3NhZ2UiLCAib25VbmNhdWdodEVycm9yIiwgImF0dGFjaEVycm9yTGlzdGVuZXJzIiwgImRldGFjaEVycm9yTGlzdGVuZXJzIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgInJlc3VsdFN0YXR1cyIsICJfZ2xvYmFsVGhpcyIsICJWRVJTSU9OIiwgInJlIiwgIl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrIiwgIm93blZlcnNpb24iLCAiYWNjZXB0ZWRWZXJzaW9ucyIsICJyZWplY3RlZFZlcnNpb25zIiwgIm15VmVyc2lvbk1hdGNoIiwgIm93blZlcnNpb25QYXJzZWQiLCAiZ2xvYmFsVmVyc2lvbiIsICJfcmVqZWN0IiwgInYiLCAiX2FjY2VwdCIsICJnbG9iYWxWZXJzaW9uTWF0Y2giLCAiZ2xvYmFsVmVyc2lvblBhcnNlZCIsICJpc0NvbXBhdGlibGUiLCAibWFqb3IiLCAiR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSIsICJfZ2xvYmFsIiwgInJlZ2lzdGVyR2xvYmFsIiwgInR5cGUiLCAiZGlhZyIsICJhbGxvd092ZXJyaWRlIiwgImFwaSIsICJnZXRHbG9iYWwiLCAidW5yZWdpc3Rlckdsb2JhbCIsICJfX3JlYWQkMyIsICJvIiwgIm4iLCAibSIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkMyIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJEaWFnQ29tcG9uZW50TG9nZ2VyIiwgImxvZ1Byb3h5IiwgImZ1bmNOYW1lIiwgIm5hbWVzcGFjZSIsICJsb2dnZXIiLCAiRGlhZ0xvZ0xldmVsIiwgImNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlciIsICJtYXhMZXZlbCIsICJfZmlsdGVyRnVuYyIsICJ0aGVMZXZlbCIsICJ0aGVGdW5jIiwgIl9fcmVhZCQyIiwgIl9fc3ByZWFkQXJyYXkkMiIsICJBUElfTkFNRSQyIiwgIkRpYWdBUEkiLCAiX2xvZ1Byb3h5IiwgInNlbGYiLCAic2V0TG9nZ2VyIiwgIm9wdGlvbnNPckxvZ0xldmVsIiwgIm9sZExvZ2dlciIsICJuZXdMb2dnZXIiLCAic3RhY2siLCAib3B0aW9ucyIsICJjcmVhdGVDb250ZXh0S2V5IiwgImRlc2NyaXB0aW9uIiwgIkJhc2VDb250ZXh0IiwgInBhcmVudENvbnRleHQiLCAiUk9PVF9DT05URVhUIiwgIl9fcmVhZCQxIiwgIl9fc3ByZWFkQXJyYXkkMSIsICJOb29wQ29udGV4dE1hbmFnZXIiLCAiX2NvbnRleHQiLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJDREVSZXNwb25zZUVycm9yIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgImdldFByZWZpbGwiLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAicGF5bG9hZCIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgImNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkIiwgIkNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UiLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAic3VtIiwgImdldENoZWNrb3V0UHJldmlld0Ftb3VudCIsICJpc1NldHVwTW9kZSIsICJ0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zIiwgImFsbENkZUNvbm5lY3Rpb25zIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgImNoZWNrb3V0Q2FyZEVsZW1lbnRzIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgInNldHVwQ2hlY2tvdXQiLCAicGVyZm9ybUNoZWNrb3V0IiwgIkNERV9QT0xMSU5HX0lOVEVSVkFMIiwgInBpbmdDZGVGb3JTdGF0dXMiLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgInJlc3BvbnNlTW9kZWwiLCAiY29ubmVjdGlvbk9iaiIsICJjb25uZWN0VG9DaGlsZCIsICJwcmVwYXJlUGF5bWVudEZsb3ciLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgIkNoZWNrb3V0U3RhbmRhcmRFcnJvclJlc3BvbnNlIiwgInNldFVzZXJEZXZpY2VUb2tlbiIsICJkZXZpY2VUb2tlbiIsICJTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIkZSQU1FX0JBU0VfVVJMIiwgIkVOQ09ESU5HIiwgIkVOQ09ESU5HX0xFTiIsICJSQU5ET01fTEVOIiwgIlRJTUVfTEVOIiwgIlRJTUVfTUFYIiwgIlVMSURFcnJvckNvZGUiLCAiVUxJREVycm9yIiwgImVycm9yQ29kZSIsICJtZXNzYWdlIiwgInJhbmRvbUNoYXIiLCAicHJuZyIsICJyYW5kIiwgImRldGVjdFBSTkciLCAicm9vdExvb2t1cCIsICJkZXRlY3RSb290IiwgImdsb2JhbENyeXB0byIsICJidWZmZXIiLCAiaW5XZWJXb3JrZXIiLCAiZW5jb2RlUmFuZG9tIiwgImxlbiIsICJzdHIiLCAiZW5jb2RlVGltZSIsICJtb2QiLCAiY3VycmVudExlbiIsICJ1bGlkIiwgInNlZWRUaW1lIiwgImN1cnJlbnRQUk5HIiwgInNlZWQiLCAiQ09PS0lFX05BTUUiLCAiZ2V0RGV2aWNlVG9rZW4iLCAiZXhpc3RpbmdDb29raWUiLCAiY29va2llIiwgInRva2VuIiwgInNldERldmljZVRva2VuIiwgIm9uZVllYXJGcm9tTm93IiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJmaWVsZE5hbWUiLCAiRmllbGROYW1lRW51bSIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgIkVsZW1lbnRFdmVudCIsICJnZW5lcmF0ZUFub255bW91c1ZhbHVlcyIsICJnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJmaWVsZHMiLCAiRmllbGROYW1lIiwgImdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyIsICJjaGVja291dF9zZXR0aW5ncyIsICJnZXRGdWxsTmFtZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAic3R5bGVzIiwgIndpZHRoIiwgImhlaWdodCIsICJiYW5rU2VsZWN0b3JTdHlsZXMiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0aXRsZSIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgImNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IiLCAiYmFua3MiLCAiYmFua0xpc3RIdG1sIiwgImJhbmsiLCAibG9nb0h0bWwiLCAiYmFua0l0ZW1zIiwgImNsZWFudXAiLCAic3RhcnRQb2xsaW5nIiwgIm9uU3VjY2VzcyIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAiaGFuZGxlRXZlbnRzIiwgImVsZW1lbnRzIiwgImhhbmRsZUNhbmNlbCIsICJUaHJlZURTU3RhdHVzIiwgInN0YXJ0M2RzVmVyaWZpY2F0aW9uIiwgInBhcmFtcyIsICJmcmFtZVdpZHRoIiwgImZyYW1lSGVpZ2h0IiwgImZyYW1lVGl0bGUiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCIsICJvcGVuUG9wdXBXaW5kb3ciLCAicG9wdXBOYW1lIiwgInBvcHVwV2luZG93IiwgInN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QiLCAiZXhwZWN0ZWRWZXJpZnlUb2tlbiIsICJlcnJfXyIsICJwb2xsaW5nIiwgInZlcmlmeVJlc3VsdCIsICJkZXRlY3RMYW5ndWFnZSIsICJsYW5ndWFnZXMiLCAibGFuZ3VhZ2UiLCAibG9nX18kciIsICJlcnJfXyRxIiwgImNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hIiwgInJlcXVpcmVfemlwX2NvZGUiLCAicmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyIsICJyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyIsICJwYXltZW50X21ldGhvZCIsICJjb25kaXRpb25hbEZpZWxkcyIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJpc3N1ZUtleXMiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIkFsbEZpZWxkTmFtZXMiLCAibG9nX18kcCIsICJlcnJfXyRvIiwgInBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UiLCAiZmluZENwbU1hdGNoaW5nVHlwZSIsICJhbGxDUE1zIiwgInpvZE1vZGVsIiwgImNwbSIsICJjcG0yIiwgImNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0iLCAicGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCIsICJsb2dfXzIiLCAicHJlZmlsbCIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJjaGVja291dFJlcXVlc3QiLCAiUGF5bWVudFByb2Nlc3NvciIsICJsb2FkU2NyaXB0IiwgInNjcmlwdElkIiwgInNyYyIsICJjaGVja0xvYWRlZEZuIiwgImV2ZW50TGlzdGVuZXJDb250cm9sbGVyIiwgInNjcmlwdCIsICJleGlzdGluZ1NjcmlwdCIsICJnZXRQYXltZW50RGF0YVJlcXVlc3QiLCAiZ2F0ZXdheSIsICJnYXRld2F5TWVyY2hhbnRJZCIsICJtZXJjaGFudE5hbWUiLCAibWVyY2hhbnRJZCIsICJpbml0aWFsUHJldmlldyIsICJvdmVycmlkZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsUHJpY2UiLCAiY3VycmVuY3lDb2RlIiwgImJhc2VSZXF1ZXN0IiwgImxvYWRHb29nbGVQYXlTY3JpcHQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAicGF5bWVudERhdGFSZXF1ZXN0IiwgImVudmlyb25tZW50IiwgInBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgImNvbW1vbkFjdGlvbiIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhHb29nbGVQYXkiLCAiZm9ybUlucHV0cyIsICJwYXltZW50RGF0YSIsICJpbnB1dHMiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgInBheWVyRmlyc3ROYW1lIiwgImxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJsb2dfXyRvIiwgImVycl9fJG4iLCAicnVuQWlyd2FsbGV4QkFDU0Zsb3ciLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kIiwgImZvcm1DYWxsYmFja3MiLCAiY3VzdG9tUGFyYW1zIiwgIm5vbkNkZUZvcm1GaWVsZHMiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJ2ZXJpZmljYXRpb25NZXRob2QiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgImNvbnNlbnRJZCIsICJhdmFpbGFibGVCYW5rcyIsICJzZWxlY3RlZEJhbmsiLCAiZGlyZWN0RGViaXREYXRhIiwgInJlZGlyZWN0VXJsIiwgIm5ld0NvbmZpcm1SZXN1bHQiLCAibG9nX18kbiIsICJlcnJfXyRtIiwgInJ1bkFpcndhbGxleEVGVEZsb3ciLCAibG9nX18kbSIsICJlcnJfXyRsIiwgInJ1bkFpcndhbGxleFNFUEFGbG93IiwgImxvZ19fJGwiLCAiZXJyX18kayIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJoZWFkZXJzIiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQyIiwgIkdvb2dsZVBheUNwbSQyIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJhbW91bnQiLCAiZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJGsiLCAiZXJyX18kaiIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQxIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgIm9uQ2FuY2VsIiwgIm9uUGF5bWVudEZhaWxlZCIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgIl8iLCAiX18iLCAiYWR5ZW5DaGVja291dCIsICJjaGVja291dCIsICJkZXRlcm1pbmVMb2NhbGUiLCAicHJlZmlsbExvY2FsZSIsICJicm93c2VyTG9jYWxlIiwgImNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzIiwgInJ1bkFkeWVuM2RzRmxvdyIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgImxvZ19fJGoiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMiIsICJnZXRGcmF1ZE1ldGFkYXRhIiwgImxvZ19fJGkiLCAiZXJyX18kaSIsICJpbml0QWR5ZW5BcHBsZVBheUZsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgIk9qc0Zsb3dzIiwgInJ1bkFkeWVuQXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAidXBkYXRlIiwgImxvZ19fJGgiLCAiZXJyX18kaCIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIl9lIiwgIl9mIiwgIl9nIiwgIl9oIiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJGciLCAiZXJyX18kZyIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGYiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGUiLCAiZXJyX18kZiIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRkIiwgImVycl9fJGUiLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAibG9nX18kYyIsICJlcnJfXyRkIiwgImluaXRBdXRobmV0QXBwbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRBcHBsZVBheUZsb3ciLCAibG9nX18kYiIsICJlcnJfXyRjIiwgImluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyIsICJydW5BdXRobmV0R29vZ2xlUGF5RmxvdyIsICJsb2dfXyRhIiwgImVycl9fJGIiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VWYXVsdElkRnJvbTNkc0hyZWYiLCAidmF1bHRJZCIsICJwYXJzZUFyZ0Zyb21IcmVmIiwgImFyZ05hbWUiLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAic3RyaXBlTG9nX18iLCAiU3RyaXBlM0RTTWV0YWRhdGFQYXlsb2FkIiwgInN0cmlwZUNDM0RTRmxvdyIsICJwYXJzZVVzZXJGRVBheWxvYWQiLCAiTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TIiwgImxvZ19fJDkiLCAiZXJyX18kYSIsICJ1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3ciLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJzdGFydFBmUmVzdWx0IiwgInJldHVyblN1Y2Nlc3NSZXN1bHQiLCAicnVuQ29uZmlybUxvb3AiLCAiY2hlY2tvdXRBdHRlbXB0SWQiLCAicGZSZXN1bHQiLCAidXNlckFjdGlvbiIsICJ2YWxpZGF0ZVBmUmVzdWx0VXNlckFjdGlvbiIsICJ1c2VyQWN0aW9uUmVzdWx0IiwgInJ1blJlcXVpcmVkVXNlckFjdGlvbiIsICJjaGVja0lmTGVnYWN5M0RTUGF0aCIsICJjb21tb25DQzNEU0Zsb3ciLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJwcmVmaWxsTW9kZSIsICJwYXltZW50TWV0aG9kSWQiLCAibG9nX18kOCIsICJlcnJfXyQ5IiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ1bmlmaWVkQ0NSb2xsb3V0UmF0aW8iLCAicm9sbCIsICJ1c2VVbmlmaWVkQ0NGbG93IiwgInVjY1JvbGxUcmFja2luZ01ldGFkYXRhIiwgImVyckhlYWRlcnMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFkeWVuTWV0YWRhdGFGb3JDaGVja291dCIsICJzaG91bGRVc2VTdHJpcGVGbG93IiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNjUG1JZCIsICJzdHJpcGVBY3Rpb24iLCAiY29tbW9uM0RTQWN0aW9uVHlwZXMiLCAicmVxdWlyZWRfdXNlcl9hY3Rpb25zIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJMb29wQ3J5cHRvQ3BtIiwgImxvZ19fJDciLCAiZXJyX18kOCIsICJpbml0TG9vcEZsb3ciLCAicHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSIsICJwYXltZW50U2V0dXBJbmZvIiwgInN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAibWluQXV0aG9yaXphdGlvblVzZEFtb3VudCIsICJhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoIiwgImNoYXJnZUFtb3VudFVzZEF0b20iLCAicGF5bWVudFVzZEFtb3VudCIsICJjdXN0b21lclJlZklkIiwgIndpZGdldFByb3BzIiwgImluaXRMb29wQ29ubmVjdFByb3BzIiwgInJ1bkxvb3BGbG93IiwgImlzQ2hlY2tvdXRNb2RlIiwgImN1c3RvbWVyRmllbGRzIiwgImxvZ19fJDYiLCAiZXJyX18kNyIsICJQYXlwYWxDcG0iLCAiaW5pdFBheXBhbEZsb3ciLCAicGF5cGFsQ3BtIiwgInJ1blBheXBhbEZsb3ciLCAiaXNBbm9ueW1vdXMiLCAidXNlUmVkaXJlY3RGbG93IiwgIm5ld0N1c3RvbWVyRmllbGRzIiwgImZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3ciLCAiaXNQYXlGaXJzdEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd1JlcXVlc3QiLCAicHJlQWN0aW9uVXJsIiwgImVuY29kZWRSZXF1ZXN0IiwgInNlYXJjaFBhcmFtcyIsICJwYXlwYWxGbG93UmVzdWx0IiwgImFwcHJvdmFsU2Vzc2lvbklkIiwgImxvZ19fJDUiLCAiZXJyX18kNiIsICJQb2NreXRQYXlwYWxDcG0iLCAiaW5pdFBvY2t5dFBheXBhbEZsb3ciLCAicG9ja3l0UGF5cGFsQ3BtIiwgInJ1blBvY2t5dFBheXBhbEZsb3ciLCAic2V0dGluZ3MiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQ0IiwgImVycl9fJDUiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiaW5pdFBhcmFtcyIsICJzdHJpcGVMaW5rQ3BtIiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAibW91bnRCdXR0b24iLCAiZGlzbW91bnRCdXR0b24iLCAiZ2V0RWxlbWVudEJ5SWRBc3luYyIsICJydW5TdHJpcGVMaW5rRmxvdyIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNIiwgIm91ckV4aXN0aW5nUG1JZCIsICJwYXllckxhc3ROYW1lUGFydHMiLCAiZ2V0RWxlbWVudCIsICJlbGVtZW50IiwgImxvZ19fJDMiLCAiZXJyX18kNCIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdzIiLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJydW5TdHJpcGVQckZsb3ckMSIsICJpbml0UmVzdWx0IiwgIm92ZXJyaWRlIiwgImFwcGxlUGF5UGF5bWVudFJlcXVlc3QiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiaXNQZW5kaW5nIiwgInN0cmlwZUFwcGxlUGF5IiwgImxhYmVsIiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJsb2dfXyQyIiwgImVycl9fJDMiLCAiY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIiLCAiZmxvd05hbWUiLCAiaW5pdEZsb3ciLCAicHVibGlzaGVyIiwgInN0YXJ0QWxsSW5pdEZsb3dzIiwgImZsb3dzIiwgImZsb3ciLCAiY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyIsICJlcnJfXyQyIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJkZXRlY3RGcmFtZXdvcmsiLCAid2luZG93IiwgIm5leHRXaW5kb3ciLCAibnV4dFdpbmRvdyIsICJub2RlIiwgInZ1ZVdpbmRvdyIsICJnZXRGcmFtZXdvcmtWZXJzaW9uIiwgImZyYW1ld29yayIsICJkb2N1bWVudDIiLCAibmdWZXJzaW9uRWwiLCAiZ2V0RnJhbWV3b3JrSW5mbyIsICJzY3JlZW5faGVpZ2h0IiwgInNjcmVlbl93aWR0aCIsICJjb2xvcl9kZXB0aCIsICJqYXZhX2VuYWJsZWQiLCAidXNlcl9hZ2VudCIsICJhY2NlcHRfaGVhZGVyIiwgInRpbWVfem9uZV9vZmZzZXQiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJQYXltZW50UHJvdmlkZXJUeXBlIiwgIlBheW1lbnRQcm92aWRlclR5cGUyIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93VmFsdWUiLCAic3RyaXBlUFJGbG93UmVzdWx0IiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJpbml0VHJhY2VyU2FmZSIsICJpbml0VHJhY2VyVW5zYWZlIiwgImdsb2JhbFRyYWNlciIsICJzZGtUcmFjZVdlYiIsICJDb25zb2xlU3BhbkV4cG9ydGVyIiwgIlNpbXBsZVNwYW5Qcm9jZXNzb3IiLCAiV2ViVHJhY2VyUHJvdmlkZXIiLCAiaW5zdHJ1bWVudGF0aW9uRmV0Y2giLCAiRmV0Y2hJbnN0cnVtZW50YXRpb24iLCAiY29udGV4dFpvbmUiLCAiWm9uZUNvbnRleHRNYW5hZ2VyIiwgImluc3RydW1lbnRhdGlvbiIsICJyZWdpc3Rlckluc3RydW1lbnRhdGlvbnMiLCAicmVzb3VyY2VzIiwgIlJlc291cmNlIiwgImRldGVjdFJlc291cmNlcyIsICJkZXRlY3RSZXNvdXJjZXNTeW5jIiwgImV4cG9ydGVyVHJhY2VPdGxwIiwgIk9UTFBUcmFjZUV4cG9ydGVyIiwgInByb3BhZ2F0b3JCMyIsICJCM1Byb3BhZ2F0b3IiLCAiQjNJbmplY3RFbmNvZGluZyIsICJzZGtUcmFjZUJhc2UiLCAiQmF0Y2hTcGFuUHJvY2Vzc29yIiwgImNvbGxlY3RvclVybCIsICJnZXRDb2xsZWN0b3JVcmwiLCAiZXhwb3J0ZXIiLCAiYmFzZUF0dHJzIiwgImZyb21CYXNlVXJsIiwgImJhc2VIb3N0bmFtZSIsICJPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlciIsICJmb3JtSWQiLCAiaW50ZXJuYWxDYWxsYmFja3MiLCAiZ2V0Q2xlYW5PcmlnaW4iLCAiZWxlbWVudElkIiwgImV2ZW50VHlwZSIsICJjcmVhdGVDb25uZWN0aW9uIiwgImlzVmFsaWRPYmplY3QiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAiY29ubmVjdGlvbiIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgImNhbkFwcGxlUGF5IiwgImNhbkdvb2dsZVBheSIsICJmaW5hbFN0YXR1cyIsICJ1c2VyUGFyYW1zIiwgInJ1blN0cmlwZVByRmxvdyIsICJHRU5FUklDX0NPTk5fRVJSIiwgImxvZ19fIiwgIl9PcGVuUGF5Rm9ybSIsICJjZGVCcmlkZ2VJZnJhbWUiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNkZUxvYWRlZCIsICJjZGVDb25uU3BhbiIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZWxlbWVudFZhbHVlIiwgIkVsZW1lbnRUeXBlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY29udGV4dDIiLCAiYXBwbGVQYXlQcm9jZXNzb3JzIiwgImlzQXBwbGVQYXlBdmFpbGFibGUiLCAiZ29vZ2xlUGF5UHJvY2Vzc29ycyIsICJpc0dvb2dsZVBheUF2YWlsYWJsZSIsICJwYXlwYWxBdmFpbGFibGUiLCAicG9ja3l0UGF5cGFsQXZhaWxhYmxlIiwgIm1ldGhvZCIsICJsb29wRmxvd1Jlc3VsdCIsICJsb29wQ3J5cHRvQXZhaWxhYmxlIiwgIm1ldGhvZHMiLCAiaW5pdEZsb3dOYW1lTWFwIiwgImZsb3dSZXN1bHQiLCAic3RhcnRGbG93IiwgImFpcndhbGxleEdvb2dsZVBheSIsICJhaXJ3YWxsZXhBcHBsZVBheSIsICJhdXRob3JpemVOZXRHb29nbGVQYXkiLCAiYXV0aG9yaXplTmV0QXBwbGVQYXkiLCAiYWR5ZW5Hb29nbGVQYXkiLCAiYWR5ZW5BcHBsZVBheSIsICJuZXdDYWxsYmFja3MiLCAibWV0cmljc0NvbnRleHQiLCAiY2FsbGVyIiwgImN1cnJlbnRJbnN0YW5jZSIsICJkZWJ1Z0luZm8iLCAiZm9ybSIsICJjZGVMb2FkZWRQYXlsb2FkIiwgIk9wZW5QYXlGb3JtIl0KfQo=