sonamu 0.9.11 → 0.9.13

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.
@@ -213,6 +213,7 @@ var init_dev_vitest_manager = __esmMin((() => {
213
213
  entry.reject(new Error("DevVitestManager is being shut down"));
214
214
  }
215
215
  }
216
+ this.eventListeners.clear();
216
217
  if (this.vitest) {
217
218
  await this.vitest.close();
218
219
  this.vitest = null;
@@ -526,4 +527,4 @@ var init_dev_vitest_manager = __esmMin((() => {
526
527
  //#endregion
527
528
  init_dev_vitest_manager();
528
529
  export { DevVitestManager, init_dev_vitest_manager };
529
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXZpdGVzdC1tYW5hZ2VyLmpzIiwibmFtZXMiOlsidml0ZU92ZXJyaWRlczogVml0ZVVzZXJDb25maWciLCJjbGlPcHRpb25zOiBDbGlPcHRpb25zIiwic3BlY3M6IFRlc3RTcGVjaWZpY2F0aW9uW10iLCJydW5SZXN1bHQ6IFRlc3RSdW5SZXN1bHQiLCJyZXN1bHQ6IFRlc3RDYXNlUmVzdWx0W10iLCJlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsIiwidHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi12aXRlc3QtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlPcHRpb25zLFxuICB0eXBlIFJlcG9ydGVyLFxuICB0eXBlIFRlc3RDYXNlLFxuICB0eXBlIFRlc3RNb2R1bGUsXG4gIHR5cGUgVGVzdFJ1blJlc3VsdCxcbiAgdHlwZSBUZXN0U3BlY2lmaWNhdGlvbixcbiAgdHlwZSBUZXN0U3VpdGUsXG4gIHR5cGUgVml0ZXN0LFxufSBmcm9tIFwidml0ZXN0L25vZGVcIjtcblxuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcblxuLy8g7YWM7Iqk7Yq4IO2VnCDqsbTsnZggdHJhY2Ug66qo7J2MXG5leHBvcnQgdHlwZSBUZXN0Tm9kZUtpbmQgPSBcImZpbGVcIiB8IFwic3VpdGVcIiB8IFwidGVzdFwiO1xuZXhwb3J0IHR5cGUgVGVzdFN0YXRlID0gXCJwYXNzZWRcIiB8IFwiZmFpbGVkXCIgfCBcInNraXBwZWRcIiB8IFwidG9kb1wiIHwgXCJydW5uaW5nXCIgfCBcInVua25vd25cIjtcblxuZXhwb3J0IHR5cGUgVGVzdENhc2VSZXN1bHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6IFRlc3ROb2RlS2luZDtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBmaWxlOiBzdHJpbmc7XG4gIHN0YXRlOiBUZXN0U3RhdGU7XG4gIGR1cmF0aW9uTXM6IG51bWJlciB8IG51bGw7XG4gIGNvdW50czogeyB0b3RhbDogbnVtYmVyOyBwYXNzZWQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IHNraXBwZWQ6IG51bWJlciB9O1xuICBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsO1xuICB0cmFjZXM6IFNlcmlhbGl6ZWRUcmFjZVtdO1xuICBjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1blJlc3VsdCA9IHtcbiAgb2s6IGJvb2xlYW47XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIH07XG4gIHJlc3VsdHM6IFRlc3RDYXNlUmVzdWx0W107XG59O1xuXG5leHBvcnQgdHlwZSBNYW5hZ2VyU3RhdHVzID0ge1xuICByZWFkeTogYm9vbGVhbjtcbiAgcnVubmluZzogYm9vbGVhbjtcbiAgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVGVzdEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBRdWV1ZUVudHJ5ID0ge1xuICBydW5JZDogc3RyaW5nO1xuICB0YXNrOiAoKSA9PiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIHJlc29sdmU6IChyZXN1bHQ6IFJ1blJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRGV2Vml0ZXN0TWFuYWdlciB7XG4gIHByaXZhdGUgdml0ZXN0OiBWaXRlc3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBydW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgcHJvY2Vzc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzID0gbmV3IFNldDxUZXN0RXZlbnRMaXN0ZW5lcj4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UnVuQ29udGV4dDoge1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gICAgc3BlY01vZHVsZUlkczogU2V0PHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBhZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyOiBUZXN0RXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXI6IFRlc3RFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9XG5cbiAgZW1pdEV2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCh2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J2066+4IOyLnOyekeuQnCDqsr3smrAg7KSR67O1IOy0iOq4sO2ZlOulvCDrsKnsp4BcbiAgICBpZiAodGhpcy52aXRlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNyZWF0ZVZpdGVzdCB9ID0gYXdhaXQgaW1wb3J0KFwidml0ZXN0L25vZGVcIik7XG5cbiAgICBjb25zdCB2aXRlT3ZlcnJpZGVzOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogeyB3YXRjaDogbnVsbCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGlPcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgZm9yY2VSZXJ1blRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbmZpZzogdml0ZXN0Q29uZmlnUGF0aCxcbiAgICAgIGVudjoge1xuICAgICAgICBOT0RFX0VOVjogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZWFsdGltZVJlcG9ydGVyID0gdGhpcy5jcmVhdGVSZWFsdGltZVByb2dyZXNzUmVwb3J0ZXIoKTtcbiAgICB2aXRlT3ZlcnJpZGVzLnBsdWdpbnMgPSBbXG4gICAgICAuLi4odml0ZU92ZXJyaWRlcy5wbHVnaW5zID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUtcmVhbHRpbWUtcmVwb3J0ZXJcIixcbiAgICAgICAgY29uZmlndXJlVml0ZXN0KHsgdml0ZXN0OiB2aXRlc3RJbnN0YW5jZSB9OiB7IHZpdGVzdDogVml0ZXN0IH0pIHtcbiAgICAgICAgICBjb25zdCByZXBvcnRlcnMgPSB2aXRlc3RJbnN0YW5jZS5jb25maWcucmVwb3J0ZXJzO1xuICAgICAgICAgIGlmICghcmVwb3J0ZXJzLmluY2x1ZGVzKHJlYWx0aW1lUmVwb3J0ZXIpKSB7XG4gICAgICAgICAgICByZXBvcnRlcnMucHVzaChyZWFsdGltZVJlcG9ydGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB2aXRlc3QgPSBhd2FpdCBjcmVhdGVWaXRlc3QoXCJ0ZXN0XCIsIGNsaU9wdGlvbnMsIHZpdGVPdmVycmlkZXMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2aXRlc3Quc3RhbmRhbG9uZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdml0ZXN0LmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy52aXRlc3QgPSB2aXRlc3Q7XG4gICAgdGhpcy52aXRlc3Qub25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbigoX3NwZWMpID0+IGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdHM6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9LCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIik7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJ1blJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9ICgpID0+IHRoaXMuZXhlY3V0ZVJ1bihvcHRzLCBydW5JZCk7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goeyBydW5JZCwgdGFzaywgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0YXR1cygpOiBNYW5hZ2VyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHRoaXMudml0ZXN0ICE9PSBudWxsICYmICF0aGlzLmNsb3NlZCxcbiAgICAgIHJ1bm5pbmc6IHRoaXMucnVubmluZyxcbiAgICAgIGxhc3RSdW5BdDogdGhpcy5sYXN0UnVuQXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs4Dqsr3rkJwg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7IScIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICogaG1yQW5kU3luY+yXkOyEnCDtmLjstpzrkJjslrQg64uk7J2MIO2FjOyKpO2KuCDsi6Ttlokg7IucIOy1nOyLoCDsvZTrk5zrpbwg7IKs7Jqp7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAgICovXG4gIGludmFsaWRhdGVGaWxlcyhmaWxlUGF0aHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpdGVzdCB8fCB0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgdGhpcy52aXRlc3QuaW52YWxpZGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvLyDtgZDsl5Ag64Ko7J2AIOyekeyXheuTpOydhCByZWplY3TtlZjsl6wg7Zi47Lac7J6Q6rCAIOyYgeq1rCDrjIDquLDtlZjsp4Ag7JWK64+E66GdIOygleumrFxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChuZXcgRXJyb3IoXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIGJlaW5nIHNodXQgZG93blwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudml0ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnZpdGVzdC5jbG9zZSgpO1xuICAgICAgdGhpcy52aXRlc3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWVudHJ5KSBicmVhaztcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgZW50cnkucmVqZWN0KG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIikpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeS50YXNrKCk7XG4gICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBlbnRyeS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSdW4oXG4gICAgb3B0czogeyBmaWxlcz86IHN0cmluZ1tdOyBwYXR0ZXJuPzogc3RyaW5nIH0sXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCB2aXRlc3QgPSB0aGlzLnZpdGVzdDtcbiAgICBpZiAoIXZpdGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBpcyBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAob3B0cy5wYXR0ZXJuKSB7XG4gICAgICB2aXRlc3Quc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKG9wdHMucGF0dGVybik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNzOiBUZXN0U3BlY2lmaWNhdGlvbltdID0gb3B0cy5maWxlc1xuICAgICAgICA/IGF3YWl0IHZpdGVzdC5nbG9iVGVzdFNwZWNpZmljYXRpb25zKG9wdHMuZmlsZXMpXG4gICAgICAgIDogYXdhaXQgdml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMoKTtcblxuICAgICAgY29uc3Qgc3BlY01vZHVsZUlkcyA9IG5ldyBTZXQoc3BlY3MubWFwKChzKSA9PiBzLm1vZHVsZUlkKSk7XG4gICAgICAvLyByb3V0ZXPsl5DshJwg7IOd7ISx7ZWcIHJ1bklk66W8IOq3uOuMgOuhnCDsgqzsmqntlZjsl6wgcnVuU3RhcnRlZC9ydW5Ob2RlUHJvZ3Jlc3MvcnVuQ29tcGxldGVkIOqwhCDsnbzqtIDshLEg67O07J6lXG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0ge1xuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNwZWNNb2R1bGVJZHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhbGxUZXN0c1J1biA9ICFvcHRzLmZpbGVzIHx8IG9wdHMuZmlsZXMubGVuZ3RoID09PSAwO1xuICAgICAgY29uc3QgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0ID0gYXdhaXQgdml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucyhzcGVjcywgYWxsVGVzdHNSdW4pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgIHRoaXMubGFzdFJ1bkF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyhydW5SZXN1bHQsIGR1cmF0aW9uTXMsIHNwZWNNb2R1bGVJZHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChvcHRzLnBhdHRlcm4pIHtcbiAgICAgICAgdml0ZXN0LnJlc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlYWx0aW1lUHJvZ3Jlc3NSZXBvcnRlcigpOiBSZXBvcnRlciB7XG4gICAgY29uc3QgZW1pdFByb2dyZXNzID0gKFxuICAgICAga2luZDogXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIixcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiLFxuICAgICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KFwicnVuTm9kZVByb2dyZXNzXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgcnVuSWQ6IGN0eC5ydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdHguc3RhcnRlZEF0LFxuICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgZmlsZUlkLFxuICAgICAgICBub2RlSWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICBub2RlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvblRlc3RNb2R1bGVRdWV1ZWQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwiZmlsZVwiLFxuICAgICAgICAgIFwicmVhZHlcIixcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5idWlsZEZpbGVQcm9ncmVzc05vZGUodGVzdE1vZHVsZSwgXCJyZWFkeVwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RNb2R1bGVFbmQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFwiZmlsZVwiLCBcInJlc3VsdFwiLCBmaWxlSWQsIGZpbGVJZCwgbnVsbCwgdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RTdWl0ZVJlYWR5OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlYWR5XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlLCBcInJlYWR5XCIpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uVGVzdFN1aXRlUmVzdWx0OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlc3VsdFwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFN1aXRlTm9kZSh0ZXN0U3VpdGUsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlYWR5OiAodGVzdENhc2U6IFRlc3RDYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdENhc2UubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGAke2ZpbGVJZH06OiR7dGVzdENhc2UuZnVsbE5hbWV9YDtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVUZXN0UGFyZW50SWQodGVzdENhc2UpO1xuICAgICAgICBlbWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgXCJ0ZXN0XCIsXG4gICAgICAgICAgXCJyZWFkeVwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2UsIFwicmVhZHlcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlc3VsdDogKHRlc3RDYXNlOiBUZXN0Q2FzZSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnNwZWNNb2R1bGVJZHMuaGFzKHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdENhc2UubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWA7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwidGVzdFwiLFxuICAgICAgICAgIFwicmVzdWx0XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVzdE5vZGUodGVzdENhc2UsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsZVByb2dyZXNzTm9kZSh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBraW5kOiBcImZpbGVcIixcbiAgICAgIG5hbWU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBmdWxsTmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZpbGU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAwLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlOiBUZXN0U3VpdGUsIF9waGFzZTogXCJyZWFkeVwiKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IGZpbGVJZCA9IHRlc3RTdWl0ZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogdGVzdFN1aXRlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdFN1aXRlLmZ1bGxOYW1lLFxuICAgICAgZmlsZTogZmlsZUlkLFxuICAgICAgc3RhdGU6IFwicnVubmluZ1wiLFxuICAgICAgZHVyYXRpb25NczogbnVsbCxcbiAgICAgIGNvdW50czogeyB0b3RhbDogMCwgcGFzc2VkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdHJhY2VzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2U6IFRlc3RDYXNlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlOiBmaWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdWl0ZVBhcmVudElkKHRlc3RTdWl0ZTogVGVzdFN1aXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0ZXN0U3VpdGUucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdFN1aXRlLm1vZHVsZS5tb2R1bGVJZH06OiR7cGFyZW50LmZ1bGxOYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlOiBUZXN0Q2FzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gdGVzdENhc2UucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdENhc2UubW9kdWxlLm1vZHVsZUlkfTo6JHtwYXJlbnQuZnVsbE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJlc3VsdHMoXG4gICAgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0LFxuICAgIGR1cmF0aW9uTXM6IG51bWJlcixcbiAgICBzcGVjTW9kdWxlSWRzOiBTZXQ8c3RyaW5nPixcbiAgKTogUnVuUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFRlc3RDYXNlUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCB0ZXN0TW9kdWxlIG9mIHJ1blJlc3VsdC50ZXN0TW9kdWxlcykge1xuICAgICAgaWYgKCFzcGVjTW9kdWxlSWRzLmhhcyh0ZXN0TW9kdWxlLm1vZHVsZUlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSByZXN1bHRzQnlGaWxlLmdldChuZXh0UmVzdWx0LmlkKTtcblxuICAgICAgaWYgKCFleGlzdGluZ1Jlc3VsdCkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShleGlzdGluZ1Jlc3VsdCk7XG4gICAgICBjb25zdCBuZXh0U2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShuZXh0UmVzdWx0KTtcbiAgICAgIGlmIChuZXh0U2NvcmUgPj0gZXhpc3RpbmdTY29yZSkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gQXJyYXkuZnJvbShyZXN1bHRzQnlGaWxlLnZhbHVlcygpKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYWdncmVnYXRlQ291bnRzKHJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBzdW1tYXJ5LmZhaWxlZCA9PT0gMCxcbiAgICAgIHN1bW1hcnk6IHsgLi4uc3VtbWFyeSwgZHVyYXRpb25NcyB9LFxuICAgICAgcmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbGVOb2RlKHRlc3RNb2R1bGU6IFRlc3RNb2R1bGUpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gICAgY29uc3QgZmlsZSA9IHRlc3RNb2R1bGUubW9kdWxlSWQ7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmJ1aWxkQ2hpbGROb2Rlcyh0ZXN0TW9kdWxlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZHVsZVN0YXRlID0gdGVzdE1vZHVsZS5zdGF0ZSgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0TW9kdWxlLmRpYWdub3N0aWMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGtpbmQ6IFwiZmlsZVwiLFxuICAgICAgbmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZ1bGxOYW1lOiB0ZXN0TW9kdWxlLm1vZHVsZUlkLFxuICAgICAgZmlsZSxcbiAgICAgIHN0YXRlOiBtYXBNb2R1bGVTdGF0ZShtb2R1bGVTdGF0ZSksXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljLmR1cmF0aW9uID4gMCA/IGRpYWdub3N0aWMuZHVyYXRpb24gOiBudWxsLFxuICAgICAgY291bnRzLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlsZE5vZGVzKHBhcmVudDogVGVzdE1vZHVsZSB8IFRlc3RTdWl0ZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcInN1aXRlXCIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFN1aXRlTm9kZShjaGlsZCwgZmlsZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFRlc3ROb2RlKGNoaWxkLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVOb2RlKHN1aXRlOiBUZXN0U3VpdGUsIGZpbGU6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuYnVpbGRDaGlsZE5vZGVzKHN1aXRlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHN1aXRlU3RhdGUgPSBzdWl0ZS5zdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlfTo6JHtzdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiBzdWl0ZS5mdWxsTmFtZSxcbiAgICAgIGZpbGUsXG4gICAgICBzdGF0ZTogbWFwU3VpdGVTdGF0ZShzdWl0ZVN0YXRlKSxcbiAgICAgIGR1cmF0aW9uTXM6IG51bGwsXG4gICAgICBjb3VudHMsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIHRyYWNlczogW10sXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3ROb2RlKHRlc3RDYXNlOiBUZXN0Q2FzZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RDYXNlLnJlc3VsdCgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0Q2FzZS5kaWFnbm9zdGljKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBtYXBUZXN0UmVzdWx0KHJlc3VsdCwgdGVzdENhc2Uub3B0aW9ucy5tb2RlKTtcblxuICAgIGxldCBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBpZiAocmVzdWx0LnN0YXRlID09PSBcImZhaWxlZFwiICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdC5lcnJvcnNbMF07XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbWVzc2FnZTogZmlyc3RFcnJvci5tZXNzYWdlID8/IFN0cmluZyhmaXJzdEVycm9yKSxcbiAgICAgICAgc3RhY2s6IGZpcnN0RXJyb3Iuc3RhY2ssXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRlc3RDYXNlLm1ldGEoKS50cmFjZXM7XG4gICAgbGV0IHRyYWNlczogU2VyaWFsaXplZFRyYWNlW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFjZXMgPSByYXcuZmlsdGVyKGlzU2VyaWFsaXplZFRyYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke2ZpbGV9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlLFxuICAgICAgc3RhdGUsXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljID8gZGlhZ25vc3RpYy5kdXJhdGlvbiA6IG51bGwsXG4gICAgICBjb3VudHM6IGNvdW50RnJvbVN0YXRlKHN0YXRlKSxcbiAgICAgIGVycm9yLFxuICAgICAgdHJhY2VzLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9kdWxlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIiB8IFwicXVldWVkXCIpOiBUZXN0U3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIFwicGFzc2VkXCI7XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHJldHVybiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJxdWV1ZWRcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFN1aXRlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIik6IFRlc3RTdGF0ZSB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIFwic2tpcHBlZFwiO1xuICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBUZXN0UmVzdWx0KFxuICByZXN1bHQ6IFJldHVyblR5cGU8VGVzdENhc2VbXCJyZXN1bHRcIl0+LFxuICBtb2RlOiBcInJ1blwiIHwgXCJvbmx5XCIgfCBcInNraXBcIiB8IFwidG9kb1wiLFxuKTogVGVzdFN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQuc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIG1vZGUgPT09IFwidG9kb1wiID8gXCJ0b2RvXCIgOiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRGcm9tU3RhdGUoc3RhdGU6IFRlc3RTdGF0ZSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgXCJwYXNzZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDEsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMSwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJza2lwcGVkXCI6XG4gICAgY2FzZSBcInRvZG9cIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBydW5uaW5nL3Vua25vd24g7IOB7YOc64+EIHRvdGFs7JeQIO2PrO2VqO2VmOyXrCDtjIzsnbwg64W465OcIGNvdW50cy50b3RhbOydtCDtlZjsnIQg7ZWp6rOE7JmAIOydvOy5mO2VmOuPhOuhnSDtlahcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUNvdW50cyhjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgbGV0IHRvdGFsID0gMDtcbiAgbGV0IHBhc3NlZCA9IDA7XG4gIGxldCBmYWlsZWQgPSAwO1xuICBsZXQgc2tpcHBlZCA9IDA7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICB0b3RhbCArPSBjaGlsZC5jb3VudHMudG90YWw7XG4gICAgcGFzc2VkICs9IGNoaWxkLmNvdW50cy5wYXNzZWQ7XG4gICAgZmFpbGVkICs9IGNoaWxkLmNvdW50cy5mYWlsZWQ7XG4gICAgc2tpcHBlZCArPSBjaGlsZC5jb3VudHMuc2tpcHBlZDtcbiAgfVxuICByZXR1cm4geyB0b3RhbCwgcGFzc2VkLCBmYWlsZWQsIHNraXBwZWQgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0Q29tcGxldGVuZXNzU2NvcmUobm9kZTogVGVzdENhc2VSZXN1bHQpOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSAwO1xuICAvLyDthYzsiqTtirgg7IiY6rCAIOuNlCDrp47snYAg6rKw6rO866W8IOyasOyEoO2VmOyXrCDspJHrs7Ug7YyM7J28IOuzke2VqSDsi5wg7KCV67O0IOyGkOyLpOydhCDspITsnoXri4jri6QuXG4gIHNjb3JlICs9IG5vZGUuY291bnRzLnRvdGFsICogMTAwMDtcbiAgc2NvcmUgKz0gbm9kZS5jaGlsZHJlbi5sZW5ndGggKiAxMDA7XG4gIGlmIChub2RlLmR1cmF0aW9uTXMgIT09IG51bGwpIHNjb3JlICs9IDEwO1xuXG4gIHN3aXRjaCAobm9kZS5zdGF0ZSkge1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHNjb3JlICs9IDU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICBzY29yZSArPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHNjb3JlICs9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9kb1wiOlxuICAgICAgc2NvcmUgKz0gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICBzY29yZSArPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gaXNTZXJpYWxpemVkVHJhY2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZXJpYWxpemVkVHJhY2Uge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdi5rZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2Ygdi5maWxlUGF0aCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiB2LmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5hdCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFwidmFsdWVcIiBpbiB2XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQWtqQkEsU0FBUyxlQUFlLE9BQTBFO0FBQ2hHLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUs7RUFDTCxLQUFLLFNBQ0gsUUFBTztFQUNULFFBQ0UsUUFBTzs7O0FBSWIsU0FBUyxjQUFjLE9BQStEO0FBQ3BGLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsUUFDRSxRQUFPOzs7QUFJYixTQUFTLGNBQ1AsUUFDQSxNQUNXO0FBQ1gsU0FBUSxPQUFPLE9BQWY7RUFDRSxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxVQUNILFFBQU8sU0FBUyxTQUFTLFNBQVM7RUFDcEMsS0FBSyxVQUNILFFBQU87RUFDVCxRQUNFLFFBQU87OztBQUliLFNBQVMs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
530
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXZpdGVzdC1tYW5hZ2VyLmpzIiwibmFtZXMiOlsidml0ZU92ZXJyaWRlczogVml0ZVVzZXJDb25maWciLCJjbGlPcHRpb25zOiBDbGlPcHRpb25zIiwic3BlY3M6IFRlc3RTcGVjaWZpY2F0aW9uW10iLCJydW5SZXN1bHQ6IFRlc3RSdW5SZXN1bHQiLCJyZXN1bHQ6IFRlc3RDYXNlUmVzdWx0W10iLCJlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsIiwidHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi12aXRlc3QtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlPcHRpb25zLFxuICB0eXBlIFJlcG9ydGVyLFxuICB0eXBlIFRlc3RDYXNlLFxuICB0eXBlIFRlc3RNb2R1bGUsXG4gIHR5cGUgVGVzdFJ1blJlc3VsdCxcbiAgdHlwZSBUZXN0U3BlY2lmaWNhdGlvbixcbiAgdHlwZSBUZXN0U3VpdGUsXG4gIHR5cGUgVml0ZXN0LFxufSBmcm9tIFwidml0ZXN0L25vZGVcIjtcblxuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcblxuLy8g7YWM7Iqk7Yq4IO2VnCDqsbTsnZggdHJhY2Ug66qo7J2MXG5leHBvcnQgdHlwZSBUZXN0Tm9kZUtpbmQgPSBcImZpbGVcIiB8IFwic3VpdGVcIiB8IFwidGVzdFwiO1xuZXhwb3J0IHR5cGUgVGVzdFN0YXRlID0gXCJwYXNzZWRcIiB8IFwiZmFpbGVkXCIgfCBcInNraXBwZWRcIiB8IFwidG9kb1wiIHwgXCJydW5uaW5nXCIgfCBcInVua25vd25cIjtcblxuZXhwb3J0IHR5cGUgVGVzdENhc2VSZXN1bHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6IFRlc3ROb2RlS2luZDtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBmaWxlOiBzdHJpbmc7XG4gIHN0YXRlOiBUZXN0U3RhdGU7XG4gIGR1cmF0aW9uTXM6IG51bWJlciB8IG51bGw7XG4gIGNvdW50czogeyB0b3RhbDogbnVtYmVyOyBwYXNzZWQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IHNraXBwZWQ6IG51bWJlciB9O1xuICBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsO1xuICB0cmFjZXM6IFNlcmlhbGl6ZWRUcmFjZVtdO1xuICBjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1blJlc3VsdCA9IHtcbiAgb2s6IGJvb2xlYW47XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIH07XG4gIHJlc3VsdHM6IFRlc3RDYXNlUmVzdWx0W107XG59O1xuXG5leHBvcnQgdHlwZSBNYW5hZ2VyU3RhdHVzID0ge1xuICByZWFkeTogYm9vbGVhbjtcbiAgcnVubmluZzogYm9vbGVhbjtcbiAgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVGVzdEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBRdWV1ZUVudHJ5ID0ge1xuICBydW5JZDogc3RyaW5nO1xuICB0YXNrOiAoKSA9PiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIHJlc29sdmU6IChyZXN1bHQ6IFJ1blJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRGV2Vml0ZXN0TWFuYWdlciB7XG4gIHByaXZhdGUgdml0ZXN0OiBWaXRlc3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBydW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgcHJvY2Vzc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzID0gbmV3IFNldDxUZXN0RXZlbnRMaXN0ZW5lcj4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UnVuQ29udGV4dDoge1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gICAgc3BlY01vZHVsZUlkczogU2V0PHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBhZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyOiBUZXN0RXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXI6IFRlc3RFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9XG5cbiAgZW1pdEV2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCh2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J2066+4IOyLnOyekeuQnCDqsr3smrAg7KSR67O1IOy0iOq4sO2ZlOulvCDrsKnsp4BcbiAgICBpZiAodGhpcy52aXRlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNyZWF0ZVZpdGVzdCB9ID0gYXdhaXQgaW1wb3J0KFwidml0ZXN0L25vZGVcIik7XG5cbiAgICBjb25zdCB2aXRlT3ZlcnJpZGVzOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogeyB3YXRjaDogbnVsbCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGlPcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgZm9yY2VSZXJ1blRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbmZpZzogdml0ZXN0Q29uZmlnUGF0aCxcbiAgICAgIGVudjoge1xuICAgICAgICBOT0RFX0VOVjogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZWFsdGltZVJlcG9ydGVyID0gdGhpcy5jcmVhdGVSZWFsdGltZVByb2dyZXNzUmVwb3J0ZXIoKTtcbiAgICB2aXRlT3ZlcnJpZGVzLnBsdWdpbnMgPSBbXG4gICAgICAuLi4odml0ZU92ZXJyaWRlcy5wbHVnaW5zID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUtcmVhbHRpbWUtcmVwb3J0ZXJcIixcbiAgICAgICAgY29uZmlndXJlVml0ZXN0KHsgdml0ZXN0OiB2aXRlc3RJbnN0YW5jZSB9OiB7IHZpdGVzdDogVml0ZXN0IH0pIHtcbiAgICAgICAgICBjb25zdCByZXBvcnRlcnMgPSB2aXRlc3RJbnN0YW5jZS5jb25maWcucmVwb3J0ZXJzO1xuICAgICAgICAgIGlmICghcmVwb3J0ZXJzLmluY2x1ZGVzKHJlYWx0aW1lUmVwb3J0ZXIpKSB7XG4gICAgICAgICAgICByZXBvcnRlcnMucHVzaChyZWFsdGltZVJlcG9ydGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB2aXRlc3QgPSBhd2FpdCBjcmVhdGVWaXRlc3QoXCJ0ZXN0XCIsIGNsaU9wdGlvbnMsIHZpdGVPdmVycmlkZXMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2aXRlc3Quc3RhbmRhbG9uZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdml0ZXN0LmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy52aXRlc3QgPSB2aXRlc3Q7XG4gICAgdGhpcy52aXRlc3Qub25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbigoX3NwZWMpID0+IGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdHM6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9LCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIik7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJ1blJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9ICgpID0+IHRoaXMuZXhlY3V0ZVJ1bihvcHRzLCBydW5JZCk7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goeyBydW5JZCwgdGFzaywgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0YXR1cygpOiBNYW5hZ2VyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHRoaXMudml0ZXN0ICE9PSBudWxsICYmICF0aGlzLmNsb3NlZCxcbiAgICAgIHJ1bm5pbmc6IHRoaXMucnVubmluZyxcbiAgICAgIGxhc3RSdW5BdDogdGhpcy5sYXN0UnVuQXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs4Dqsr3rkJwg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7IScIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICogaG1yQW5kU3luY+yXkOyEnCDtmLjstpzrkJjslrQg64uk7J2MIO2FjOyKpO2KuCDsi6Ttlokg7IucIOy1nOyLoCDsvZTrk5zrpbwg7IKs7Jqp7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAgICovXG4gIGludmFsaWRhdGVGaWxlcyhmaWxlUGF0aHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpdGVzdCB8fCB0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgdGhpcy52aXRlc3QuaW52YWxpZGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvLyDtgZDsl5Ag64Ko7J2AIOyekeyXheuTpOydhCByZWplY3TtlZjsl6wg7Zi47Lac7J6Q6rCAIOyYgeq1rCDrjIDquLDtlZjsp4Ag7JWK64+E66GdIOygleumrFxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChuZXcgRXJyb3IoXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIGJlaW5nIHNodXQgZG93blwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMudml0ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnZpdGVzdC5jbG9zZSgpO1xuICAgICAgdGhpcy52aXRlc3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWVudHJ5KSBicmVhaztcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgZW50cnkucmVqZWN0KG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIikpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeS50YXNrKCk7XG4gICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBlbnRyeS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSdW4oXG4gICAgb3B0czogeyBmaWxlcz86IHN0cmluZ1tdOyBwYXR0ZXJuPzogc3RyaW5nIH0sXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCB2aXRlc3QgPSB0aGlzLnZpdGVzdDtcbiAgICBpZiAoIXZpdGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBpcyBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAob3B0cy5wYXR0ZXJuKSB7XG4gICAgICB2aXRlc3Quc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKG9wdHMucGF0dGVybik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNzOiBUZXN0U3BlY2lmaWNhdGlvbltdID0gb3B0cy5maWxlc1xuICAgICAgICA/IGF3YWl0IHZpdGVzdC5nbG9iVGVzdFNwZWNpZmljYXRpb25zKG9wdHMuZmlsZXMpXG4gICAgICAgIDogYXdhaXQgdml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMoKTtcblxuICAgICAgY29uc3Qgc3BlY01vZHVsZUlkcyA9IG5ldyBTZXQoc3BlY3MubWFwKChzKSA9PiBzLm1vZHVsZUlkKSk7XG4gICAgICAvLyByb3V0ZXPsl5DshJwg7IOd7ISx7ZWcIHJ1bklk66W8IOq3uOuMgOuhnCDsgqzsmqntlZjsl6wgcnVuU3RhcnRlZC9ydW5Ob2RlUHJvZ3Jlc3MvcnVuQ29tcGxldGVkIOqwhCDsnbzqtIDshLEg67O07J6lXG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0ge1xuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNwZWNNb2R1bGVJZHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhbGxUZXN0c1J1biA9ICFvcHRzLmZpbGVzIHx8IG9wdHMuZmlsZXMubGVuZ3RoID09PSAwO1xuICAgICAgY29uc3QgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0ID0gYXdhaXQgdml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucyhzcGVjcywgYWxsVGVzdHNSdW4pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgIHRoaXMubGFzdFJ1bkF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyhydW5SZXN1bHQsIGR1cmF0aW9uTXMsIHNwZWNNb2R1bGVJZHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChvcHRzLnBhdHRlcm4pIHtcbiAgICAgICAgdml0ZXN0LnJlc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlYWx0aW1lUHJvZ3Jlc3NSZXBvcnRlcigpOiBSZXBvcnRlciB7XG4gICAgY29uc3QgZW1pdFByb2dyZXNzID0gKFxuICAgICAga2luZDogXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIixcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiLFxuICAgICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KFwicnVuTm9kZVByb2dyZXNzXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgcnVuSWQ6IGN0eC5ydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdHguc3RhcnRlZEF0LFxuICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgZmlsZUlkLFxuICAgICAgICBub2RlSWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICBub2RlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvblRlc3RNb2R1bGVRdWV1ZWQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwiZmlsZVwiLFxuICAgICAgICAgIFwicmVhZHlcIixcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5idWlsZEZpbGVQcm9ncmVzc05vZGUodGVzdE1vZHVsZSwgXCJyZWFkeVwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RNb2R1bGVFbmQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFwiZmlsZVwiLCBcInJlc3VsdFwiLCBmaWxlSWQsIGZpbGVJZCwgbnVsbCwgdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RTdWl0ZVJlYWR5OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlYWR5XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlLCBcInJlYWR5XCIpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uVGVzdFN1aXRlUmVzdWx0OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlc3VsdFwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFN1aXRlTm9kZSh0ZXN0U3VpdGUsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlYWR5OiAodGVzdENhc2U6IFRlc3RDYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdENhc2UubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGAke2ZpbGVJZH06OiR7dGVzdENhc2UuZnVsbE5hbWV9YDtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVUZXN0UGFyZW50SWQodGVzdENhc2UpO1xuICAgICAgICBlbWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgXCJ0ZXN0XCIsXG4gICAgICAgICAgXCJyZWFkeVwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2UsIFwicmVhZHlcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlc3VsdDogKHRlc3RDYXNlOiBUZXN0Q2FzZSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnNwZWNNb2R1bGVJZHMuaGFzKHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdENhc2UubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWA7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwidGVzdFwiLFxuICAgICAgICAgIFwicmVzdWx0XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVzdE5vZGUodGVzdENhc2UsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsZVByb2dyZXNzTm9kZSh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBraW5kOiBcImZpbGVcIixcbiAgICAgIG5hbWU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBmdWxsTmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZpbGU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAwLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlOiBUZXN0U3VpdGUsIF9waGFzZTogXCJyZWFkeVwiKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IGZpbGVJZCA9IHRlc3RTdWl0ZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogdGVzdFN1aXRlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdFN1aXRlLmZ1bGxOYW1lLFxuICAgICAgZmlsZTogZmlsZUlkLFxuICAgICAgc3RhdGU6IFwicnVubmluZ1wiLFxuICAgICAgZHVyYXRpb25NczogbnVsbCxcbiAgICAgIGNvdW50czogeyB0b3RhbDogMCwgcGFzc2VkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdHJhY2VzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2U6IFRlc3RDYXNlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlOiBmaWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdWl0ZVBhcmVudElkKHRlc3RTdWl0ZTogVGVzdFN1aXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0ZXN0U3VpdGUucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdFN1aXRlLm1vZHVsZS5tb2R1bGVJZH06OiR7cGFyZW50LmZ1bGxOYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlOiBUZXN0Q2FzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gdGVzdENhc2UucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdENhc2UubW9kdWxlLm1vZHVsZUlkfTo6JHtwYXJlbnQuZnVsbE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJlc3VsdHMoXG4gICAgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0LFxuICAgIGR1cmF0aW9uTXM6IG51bWJlcixcbiAgICBzcGVjTW9kdWxlSWRzOiBTZXQ8c3RyaW5nPixcbiAgKTogUnVuUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFRlc3RDYXNlUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCB0ZXN0TW9kdWxlIG9mIHJ1blJlc3VsdC50ZXN0TW9kdWxlcykge1xuICAgICAgaWYgKCFzcGVjTW9kdWxlSWRzLmhhcyh0ZXN0TW9kdWxlLm1vZHVsZUlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSByZXN1bHRzQnlGaWxlLmdldChuZXh0UmVzdWx0LmlkKTtcblxuICAgICAgaWYgKCFleGlzdGluZ1Jlc3VsdCkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShleGlzdGluZ1Jlc3VsdCk7XG4gICAgICBjb25zdCBuZXh0U2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShuZXh0UmVzdWx0KTtcbiAgICAgIGlmIChuZXh0U2NvcmUgPj0gZXhpc3RpbmdTY29yZSkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gQXJyYXkuZnJvbShyZXN1bHRzQnlGaWxlLnZhbHVlcygpKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYWdncmVnYXRlQ291bnRzKHJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBzdW1tYXJ5LmZhaWxlZCA9PT0gMCxcbiAgICAgIHN1bW1hcnk6IHsgLi4uc3VtbWFyeSwgZHVyYXRpb25NcyB9LFxuICAgICAgcmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbGVOb2RlKHRlc3RNb2R1bGU6IFRlc3RNb2R1bGUpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gICAgY29uc3QgZmlsZSA9IHRlc3RNb2R1bGUubW9kdWxlSWQ7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmJ1aWxkQ2hpbGROb2Rlcyh0ZXN0TW9kdWxlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZHVsZVN0YXRlID0gdGVzdE1vZHVsZS5zdGF0ZSgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0TW9kdWxlLmRpYWdub3N0aWMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGtpbmQ6IFwiZmlsZVwiLFxuICAgICAgbmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZ1bGxOYW1lOiB0ZXN0TW9kdWxlLm1vZHVsZUlkLFxuICAgICAgZmlsZSxcbiAgICAgIHN0YXRlOiBtYXBNb2R1bGVTdGF0ZShtb2R1bGVTdGF0ZSksXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljLmR1cmF0aW9uID4gMCA/IGRpYWdub3N0aWMuZHVyYXRpb24gOiBudWxsLFxuICAgICAgY291bnRzLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlsZE5vZGVzKHBhcmVudDogVGVzdE1vZHVsZSB8IFRlc3RTdWl0ZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcInN1aXRlXCIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFN1aXRlTm9kZShjaGlsZCwgZmlsZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFRlc3ROb2RlKGNoaWxkLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVOb2RlKHN1aXRlOiBUZXN0U3VpdGUsIGZpbGU6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuYnVpbGRDaGlsZE5vZGVzKHN1aXRlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHN1aXRlU3RhdGUgPSBzdWl0ZS5zdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlfTo6JHtzdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiBzdWl0ZS5mdWxsTmFtZSxcbiAgICAgIGZpbGUsXG4gICAgICBzdGF0ZTogbWFwU3VpdGVTdGF0ZShzdWl0ZVN0YXRlKSxcbiAgICAgIGR1cmF0aW9uTXM6IG51bGwsXG4gICAgICBjb3VudHMsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIHRyYWNlczogW10sXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3ROb2RlKHRlc3RDYXNlOiBUZXN0Q2FzZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RDYXNlLnJlc3VsdCgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0Q2FzZS5kaWFnbm9zdGljKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBtYXBUZXN0UmVzdWx0KHJlc3VsdCwgdGVzdENhc2Uub3B0aW9ucy5tb2RlKTtcblxuICAgIGxldCBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBpZiAocmVzdWx0LnN0YXRlID09PSBcImZhaWxlZFwiICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdC5lcnJvcnNbMF07XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbWVzc2FnZTogZmlyc3RFcnJvci5tZXNzYWdlID8/IFN0cmluZyhmaXJzdEVycm9yKSxcbiAgICAgICAgc3RhY2s6IGZpcnN0RXJyb3Iuc3RhY2ssXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRlc3RDYXNlLm1ldGEoKS50cmFjZXM7XG4gICAgbGV0IHRyYWNlczogU2VyaWFsaXplZFRyYWNlW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFjZXMgPSByYXcuZmlsdGVyKGlzU2VyaWFsaXplZFRyYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke2ZpbGV9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlLFxuICAgICAgc3RhdGUsXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljID8gZGlhZ25vc3RpYy5kdXJhdGlvbiA6IG51bGwsXG4gICAgICBjb3VudHM6IGNvdW50RnJvbVN0YXRlKHN0YXRlKSxcbiAgICAgIGVycm9yLFxuICAgICAgdHJhY2VzLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9kdWxlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIiB8IFwicXVldWVkXCIpOiBUZXN0U3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIFwicGFzc2VkXCI7XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHJldHVybiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJxdWV1ZWRcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFN1aXRlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIik6IFRlc3RTdGF0ZSB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIFwic2tpcHBlZFwiO1xuICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBUZXN0UmVzdWx0KFxuICByZXN1bHQ6IFJldHVyblR5cGU8VGVzdENhc2VbXCJyZXN1bHRcIl0+LFxuICBtb2RlOiBcInJ1blwiIHwgXCJvbmx5XCIgfCBcInNraXBcIiB8IFwidG9kb1wiLFxuKTogVGVzdFN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQuc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIG1vZGUgPT09IFwidG9kb1wiID8gXCJ0b2RvXCIgOiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRGcm9tU3RhdGUoc3RhdGU6IFRlc3RTdGF0ZSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgXCJwYXNzZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDEsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMSwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJza2lwcGVkXCI6XG4gICAgY2FzZSBcInRvZG9cIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBydW5uaW5nL3Vua25vd24g7IOB7YOc64+EIHRvdGFs7JeQIO2PrO2VqO2VmOyXrCDtjIzsnbwg64W465OcIGNvdW50cy50b3RhbOydtCDtlZjsnIQg7ZWp6rOE7JmAIOydvOy5mO2VmOuPhOuhnSDtlahcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUNvdW50cyhjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgbGV0IHRvdGFsID0gMDtcbiAgbGV0IHBhc3NlZCA9IDA7XG4gIGxldCBmYWlsZWQgPSAwO1xuICBsZXQgc2tpcHBlZCA9IDA7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICB0b3RhbCArPSBjaGlsZC5jb3VudHMudG90YWw7XG4gICAgcGFzc2VkICs9IGNoaWxkLmNvdW50cy5wYXNzZWQ7XG4gICAgZmFpbGVkICs9IGNoaWxkLmNvdW50cy5mYWlsZWQ7XG4gICAgc2tpcHBlZCArPSBjaGlsZC5jb3VudHMuc2tpcHBlZDtcbiAgfVxuICByZXR1cm4geyB0b3RhbCwgcGFzc2VkLCBmYWlsZWQsIHNraXBwZWQgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0Q29tcGxldGVuZXNzU2NvcmUobm9kZTogVGVzdENhc2VSZXN1bHQpOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSAwO1xuICAvLyDthYzsiqTtirgg7IiY6rCAIOuNlCDrp47snYAg6rKw6rO866W8IOyasOyEoO2VmOyXrCDspJHrs7Ug7YyM7J28IOuzke2VqSDsi5wg7KCV67O0IOyGkOyLpOydhCDspITsnoXri4jri6QuXG4gIHNjb3JlICs9IG5vZGUuY291bnRzLnRvdGFsICogMTAwMDtcbiAgc2NvcmUgKz0gbm9kZS5jaGlsZHJlbi5sZW5ndGggKiAxMDA7XG4gIGlmIChub2RlLmR1cmF0aW9uTXMgIT09IG51bGwpIHNjb3JlICs9IDEwO1xuXG4gIHN3aXRjaCAobm9kZS5zdGF0ZSkge1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHNjb3JlICs9IDU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICBzY29yZSArPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHNjb3JlICs9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9kb1wiOlxuICAgICAgc2NvcmUgKz0gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICBzY29yZSArPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gaXNTZXJpYWxpemVkVHJhY2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZXJpYWxpemVkVHJhY2Uge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdi5rZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2Ygdi5maWxlUGF0aCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiB2LmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5hdCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFwidmFsdWVcIiBpbiB2XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQW9qQkEsU0FBUyxlQUFlLE9BQTBFO0FBQ2hHLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUs7RUFDTCxLQUFLLFNBQ0gsUUFBTztFQUNULFFBQ0UsUUFBTzs7O0FBSWIsU0FBUyxjQUFjLE9BQStEO0FBQ3BGLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsUUFDRSxRQUFPOzs7QUFJYixTQUFTLGNBQ1AsUUFDQSxNQUNXO0FBQ1gsU0FBUSxPQUFPLE9BQWY7RUFDRSxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxVQUNILFFBQU8sU0FBUyxTQUFTLFNBQVM7RUFDcEMsS0FBSyxV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
@@ -1 +1 @@
1
- {"version":3,"file":"fixture-generator.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixture-generator.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-generator.ts"],"names":[],"mappings":"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"}