@milkio/stargate-worker 1.3.56 → 1.3.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +5 -5
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -489,11 +489,11 @@ var deepClone = (value) => {
489
489
  return result;
490
490
  };
491
491
  export {
492
- reviveJSONParse,
493
- createStargateWorker,
492
+ createDefaultCacheStorage,
494
493
  createFlow,
495
- createDefaultCacheStorage
494
+ createStargateWorker,
495
+ reviveJSONParse
496
496
  };
497
497
 
498
- //# debugId=25BCE9129ACE475964756E2164756E21
499
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbHMvY3JlYXRlLWlkLnRzIiwgIi4uL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElORy5jaGFyQXQoMCk7XG5cbiAgd2hpbGUgKGN1cnJlbnQgPiAwbikge1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IGN1cnJlbnQgJSBiYXNlO1xuICAgIHJlc3VsdCA9IEVOQ09ESU5HLmNoYXJBdChOdW1iZXIocmVtYWluZGVyKSkgKyByZXN1bHQ7XG4gICAgY3VycmVudCA9IGN1cnJlbnQgLyBiYXNlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIF9fc3RyaW5nVG9CaWdJbnQoc3RyOiBzdHJpbmcpOiBiaWdpbnQge1xuICBjb25zdCBjaGFyTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRU5DT0RJTkcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyTWFwW0VOQ09ESU5HLmNoYXJBdChpKV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJBdChpKTtcbiAgICBpZiAoIShjaGFyIGluIGNoYXJNYXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVyICcke2NoYXJ9JyBpbiBpbnB1dCBzdHJpbmdgKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBCaWdJbnQoY2hhck1hcFtjaGFyXSk7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gX19nZXRNYXhWYWx1ZShuOiBiaWdpbnQpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KEVOQ09ESU5HLmxlbmd0aCkgKiogbiAtIDFuO1xufVxuXG5jb25zdCBpZEdlbmVyYXRvciA9IGRlZmluZUlkR2VuZXJhdG9yKHsgbGVuZ3RoOiAyNCwgdGltZXN0YW1wOiBmYWxzZSwgc2VxdWVudGlhbDogZmFsc2UgfSk7XG5cbmV4cG9ydCBjb25zdCBfX2NyZWF0ZUlkID0gaWRHZW5lcmF0b3IuY3JlYXRlSWQ7XG4iLAogICAgImltcG9ydCB7IF9fY3JlYXRlSWQgfSBmcm9tIFwiLi91dGlscy9jcmVhdGUtaWQudHNcIjtcblxuZXhwb3J0IHR5cGUgTWlsa2lvU3RhcmdhdGVPcHRpb25zID0ge1xuICAgIHBvcnQ6IHtcbiAgICAgICAgcG9zdE1lc3NhZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IChldmVudDogXCJtZXNzYWdlXCIsIGNhbGxiYWNrOiAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogXCJtZXNzYWdlXCIsIGNhbGxiYWNrOiAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgfTtcbiAgICBjYWNoZVN0b3JhZ2U/OiBDYWNoZVN0b3JhZ2U7XG4gICAgY2FjaGVFbmNyeXB0aW9uPzogYm9vbGVhbjtcbiAgICBvbkxvZz86IChsZXZlbDogc3RyaW5nLCBhcmdzOiBhbnlbXSkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE1peGluPFQsIFU+ID0gVSAmIE9taXQ8VCwga2V5b2YgVT47XG5cbmV4cG9ydCB0eXBlIENhY2hlU3RyYXRlZ3kgPSAnb2ZmJyB8ICdmYWxsYmFjaycgfCAndGhyb3R0bGUnO1xuXG5leHBvcnQgdHlwZSBSZXRyeVN0cmF0ZWd5ID0gYm9vbGVhbiB8IG51bWJlcjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZVN0b3JhZ2Uge1xuICAgIGdldDogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPHsgZGF0YTogYW55OyB0aW1lc3RhbXA6IG51bWJlciB9IHwgbnVsbD47XG4gICAgc2V0OiAoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnM8VCBleHRlbmRzIGFueSA9IGFueT4gPSB7XG4gICAgcGFyYW1zPzogUmVjb3JkPGFueSwgYW55PjtcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBjYWNoZVN0cmF0ZWd5PzogQ2FjaGVTdHJhdGVneTtcbiAgICBjYWNoZVRocm90dGxlTXM/OiBudW1iZXI7XG4gICAgb25DYWNoZUhpdD86IChyZXN1bHQ6IFQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHJldHJ5U3RyYXRlZ3k/OiBSZXRyeVN0cmF0ZWd5O1xufTtcblxuZXhwb3J0IHR5cGUgRXhlY3V0ZVJlc3VsdHNPcHRpb24gPSB7IGV4ZWN1dGVJZDogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRvckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgQXN5bmNHZW5lcmF0b3I8aW5mZXIgST4gPyBJIDogbmV2ZXI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZVdvcmtlcjxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xuICAgIGNvbnN0IGV4ZWN1dGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBjb25uZWN0ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09IFwiUE9OR1wiKSByZXR1cm47XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiUElOR1wiKTtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZShcIlBJTkdcIiksIDQyKTtcbiAgICB9KTtcbiAgICBjb25zdCBsb2dIYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSAhPT0gXCJvYmplY3RcIiB8fCAhZXZlbnQuZGF0YS5fX21pbGtpb19sb2cpIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBsZXZlbCwgYXJncyB9ID0gZXZlbnQuZGF0YS5fX21pbGtpb19sb2c7XG4gICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBKU09OLnBhcnNlKGFyZ3MpO1xuICAgICAgICBpZiAoc3RhcmdhdGVPcHRpb25zLm9uTG9nKSB7XG4gICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMub25Mb2cobGV2ZWwsIHBhcnNlZEFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29uc29sZUZuID0gKGNvbnNvbGUgYXMgYW55KVtsZXZlbF0gPz8gY29uc29sZS5sb2c7XG4gICAgICAgICAgICBjb25zb2xlRm4oLi4ucGFyc2VkQXJncy5zbGljZSgwLCA1KSwgLi4ucGFyc2VkQXJncy5zbGljZSg1KS5tYXAoKHY6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkodikpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbG9nSGFuZGxlcik7XG5cbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBsb2dIYW5kbGVyKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXhlY3V0ZUlkIG9mIGV4ZWN1dGVJZHMpIHtcbiAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZShgQ0xPU0VfU1RSRUFNOiR7ZXhlY3V0ZUlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoXCJDTE9TRURcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcbiAgICAgICAgICAgIHBhdGg6IFBhdGgsXG4gICAgICAgICAgICBvcHRpb25zOiBNaXhpbjxcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9uczxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcz86IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJwYXJhbXNcIl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPixcbiAgICAgICAgKTogUHJvbWlzZTxcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxuICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgIFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsLCBFeGVjdXRlUmVzdWx0c09wdGlvbl0gfCBbbnVsbCwgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXSwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxuICAgICAgICAgICAgW1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGwsIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXSB8IFtudWxsLCBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD4sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxuICAgICAgICA+IHtcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0O1xuXG4gICAgICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVTdHJhdGVneSA9IG9wdGlvbnM/LmNhY2hlU3RyYXRlZ3kgPz8gJ29mZic7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09IHRydWUgfHwgb3B0aW9ucz8ucmV0cnlTdHJhdGVneSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09ICdudW1iZXInICYmIG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50ID0gb3B0aW9ucz8ucmV0cnlTdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVRocm90dGxlTXMgPSBvcHRpb25zPy5jYWNoZVRocm90dGxlTXMgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBnZW5lcmF0ZUNhY2hlS2V5KHBhdGggYXMgc3RyaW5nLCBvcHRpb25zPy5wYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYWNoZVN0b3JhZ2UgPSBzdGFyZ2F0ZU9wdGlvbnMuY2FjaGVTdG9yYWdlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSAhPT0gJ29mZicgJiYgIWNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVTdG9yYWdlID0gYXdhaXQgY3JlYXRlRGVmYXVsdENhY2hlU3RvcmFnZSh7IGVuY3J5cHRpb246IHN0YXJnYXRlT3B0aW9ucy5jYWNoZUVuY3J5cHRpb24gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSAhPT0gJ29mZicgJiYgY2FjaGVTdG9yYWdlICYmIG9wdGlvbnM/Lm9uQ2FjaGVIaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG9wdGlvbnMub25DYWNoZUhpdChjYWNoZWQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvbkNhY2hlSGl0IGVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0cmF0ZWd5ID09PSAndGhyb3R0bGUnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gYXdhaXQgY2FjaGVTdG9yYWdlLmdldChjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQudGltZXN0YW1wIDwgY2FjaGVUaHJvdHRsZU1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW251bGwsIGNhY2hlZC5kYXRhLCB7IGV4ZWN1dGVJZDogJ2NhY2hlZCcgfV0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVSZXF1ZXN0ID0gKCk6IFByb21pc2U8W2FueSwgYW55LCBFeGVjdXRlUmVzdWx0c09wdGlvbl0+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVxUmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcUV4ZWN1dGVJZCA9IF9fY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmFkZChyZXFFeGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gcmVxRXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKHJlcUV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JbZXZlbnQuZGF0YS5lcnJvci5jb2RlXSA9IGV2ZW50LmRhdGEuZXJyb3IucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxUmVzb2x2ZShbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiByZXFFeGVjdXRlSWQgfV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxUmVzb2x2ZShbbnVsbCwgZXZlbnQuZGF0YS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVxRXhlY3V0ZUlkIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQ6IHJlcUV4ZWN1dGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBkZWVwQ2xvbmVJZlZ1ZVJlYWN0aXZlKG9wdGlvbnM/LnBhcmFtcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgW2Vycm9yLCByZXN1bHQsIHJlc3VsdE9wdGlvbl0gPSBhd2FpdCBleGVjdXRlUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJldHJ5SW5kZXggPSAwOyByZXRyeUluZGV4IDwgcmV0cnlDb3VudCAmJiBlcnJvcjsgcmV0cnlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvciwgcmVzdWx0LCByZXN1bHRPcHRpb25dID0gYXdhaXQgZXhlY3V0ZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW251bGwsIGNhY2hlZC5kYXRhLCB7IGV4ZWN1dGVJZDogJ2NhY2hlZCcgfV0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShbZXJyb3IsIG51bGwsIHJlc3VsdE9wdGlvbl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FjaGVTdG9yYWdlLnNldChjYWNoZUtleSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW251bGwsIHJlc3VsdCwgcmVzdWx0T3B0aW9uXSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cmVhbVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlSWQgPSBfX2NyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuYWRkKGV4ZWN1dGVJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsb3c6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUZsb3c+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gZXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZsb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93ID0gY3JlYXRlRmxvdyhzdGFyZ2F0ZU9wdGlvbnMsIGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcltldmVudC5kYXRhLmVycm9yLmNvZGVdID0gZXZlbnQuZGF0YS5lcnJvci5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW2Vycm9yLCBudWxsLCB7IGV4ZWN1dGVJZCB9XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIHJlc29sdmUoW251bGwsIGZsb3csIHsgZXhlY3V0ZUlkIH1dIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIGZsb3cucmV0dXJuKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZmxvdy50aHJvdyhldmVudC5kYXRhLmRhdGE/LmF0KDApLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3cudGhyb3coZXZlbnQuZGF0YS5kYXRhLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEuc3VjY2VzcykgZmxvdy5lbWl0KGV2ZW50LmRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBkZWVwQ2xvbmVJZlZ1ZVJlYWN0aXZlKG9wdGlvbnM/LnBhcmFtcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJHR5cGVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZCxcbiAgICAgICAgICAgIGVycm9yOiBHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdO1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgW1BhdGggaW4ga2V5b2YgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1dOiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgICAgIFtQYXRoIGluIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdXTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcIvCfpZtcIl0gZXh0ZW5kcyBib29sZWFuXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdXG4gICAgICAgICAgICAgICAgOiAvLyBzdHJlYW1cbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBzdGFyZ2F0ZTtcbn1cblxuZXhwb3J0IHR5cGUgTWlsa2lvRmxvdzxULCBUUmV0dXJuID0gYW55LCBUTmV4dCA9IGFueT4gPSB7XG4gICAgZW1pdDogKGZsb3c6IFQpID0+IHZvaWQ7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gTWlsa2lvRmxvdzxUPjtcbiAgICBuZXh0KC4uLlt2YWx1ZV06IFtdIHwgW1ROZXh0XSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xuICAgIHJldHVybihkYXRhOiB1bmRlZmluZWQsIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xuICAgIHRocm93KGVycm9yOiBhbnksIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZsb3c8VD4oc3RhcmdhdGVPcHRpb25zOiBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMsIGV4ZWN1dGVJZDogc3RyaW5nKTogTWlsa2lvRmxvdzxUPiB7XG4gICAgbGV0IHN0YXR1czogXCJwZW5kaW5nXCIgfCBcInJlc29sdmVkXCIgfCBcInJlamVjdGVkXCIgPSBcInBlbmRpbmdcIjtcbiAgICBjb25zdCBmbG93czogQXJyYXk8e1xuICAgICAgICBibGFuazogYm9vbGVhbjtcbiAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxUPjtcbiAgICAgICAgcmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkO1xuICAgICAgICByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gICAgfT4gPSBbXTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICBlbWl0OiAoZmxvdzogVCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZsb3dzLmF0KC0xKT8uYmxhbmsgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZmxvd3MuYXQoLTEpITtcbiAgICAgICAgICAgICAgICBpdGVtLmJsYW5rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXRlbS5yZXNvbHZlKGZsb3cpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gd2l0aFJlc29sdmVyczxUPigpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKGZsb3cpO1xuICAgICAgICAgICAgICAgIGZsb3dzLnB1c2goeyAuLi5yZXNvbHZlcnMsIGJsYW5rOiBmYWxzZSB9IGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLih7XG4gICAgICAgICAgICBhc3luYyBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VD4+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSBcInBlbmRpbmdcIikgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBpZiAoZmxvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmbG93ID0gZmxvd3MuYXQoMCkhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsb3cucHJvbWlzZTtcbiAgICAgICAgICAgICAgICBmbG93cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhc3luYyByZXR1cm4oXzogdW5kZWZpbmVkLCBkaXNhYmxlUG9zdENsb3NlTWVzc2FnZT86IHRydWUpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gXCJyZXNvbHZlZFwiO1xuICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZVBvc3RDbG9zZU1lc3NhZ2UpIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKGBDTE9TRV9TVFJFQU06JHtleGVjdXRlSWR9YCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnksIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlUG9zdENsb3NlTWVzc2FnZSkgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoYENMT1NFX1NUUkVBTToke2V4ZWN1dGVJZH1gKTtcbiAgICAgICAgICAgICAgICBpZiAoZmxvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5ibGFuayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmbG93LnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXG4gICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGl0ZXJhdG9yIGFzIE1pbGtpb0Zsb3c8VD47XG59XG5cbmZ1bmN0aW9uIHdpdGhSZXNvbHZlcnM8VCA9IGFueT4oKTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4ge1xuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XG4gICAgbGV0IHJlamVjdDogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZWplY3RcIl07XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xufVxuXG5jb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xuXG5leHBvcnQgZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcbiAgICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlIHx8ICh0eXBlb2YgKGpzb24gYXMgYW55KS5nZXRUaW1lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoanNvbiBhcyBhbnkpLnRvSVNPU3RyaW5nID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgVF0gPSByZXZpdmVKU09OUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30gYXMgVCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKCc6JywgJycpfWAgOiBgJHttYXRjaFsxXX1aYDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufVxuXG5jb25zdCBEQl9OQU1FID0gJ1N0YXJnYXRlV29ya2VyJztcbmNvbnN0IFNUT1JFX05BTUUgPSAnY2FjaGVzJztcbmxldCBkYkluc3RhbmNlOiBJREJEYXRhYmFzZSB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiBvcGVuREIoKTogUHJvbWlzZTxJREJEYXRhYmFzZT4ge1xuICAgIGlmIChkYkluc3RhbmNlKSByZXR1cm4gZGJJbnN0YW5jZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQl9OQU1FLCAxKTtcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGRiSW5zdGFuY2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgIHJlc29sdmUoZGJJbnN0YW5jZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYiA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2FjaGVTdG9yYWdlKG9wdGlvbnM/OiB7IGVuY3J5cHRpb24/OiBib29sZWFuOyBlbmNyeXB0aW9uS2V5Pzogc3RyaW5nIH0pOiBQcm9taXNlPENhY2hlU3RvcmFnZT4ge1xuICAgIGF3YWl0IG9wZW5EQigpO1xuXG4gICAgbGV0IGVuY3J5cHRpb25LZXk6IENyeXB0b0tleSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG5cbiAgICBpZiAob3B0aW9ucz8uZW5jcnlwdGlvbikge1xuICAgICAgICBjb25zdCBrZXlTdHJpbmcgPSBvcHRpb25zLmVuY3J5cHRpb25LZXkgPz8gREJfTkFNRTtcbiAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleVN0cmluZykuZm9yRWFjaCgoYnl0ZSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPCAxNikgY291bnRlcltpXSA9IGJ5dGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3Qga2V5RGF0YSA9IGVuY29kZXIuZW5jb2RlKGtleVN0cmluZyk7XG4gICAgICAgIGNvbnN0IGltcG9ydGVkS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGtleURhdGEsIHsgbmFtZTogJ1BCS0RGMicgfSwgZmFsc2UsIFsnZGVyaXZlS2V5J10pO1xuXG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRlcml2ZUtleShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUEJLREYyJyxcbiAgICAgICAgICAgICAgICBzYWx0OiBlbmNvZGVyLmVuY29kZSgnbWlsa2lvLXN0YXJnYXRlLXdvcmtlci1jYWNoZScpLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAwMCxcbiAgICAgICAgICAgICAgICBoYXNoOiAnU0hBLTI1NicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgICAgICB7IG5hbWU6ICdBRVMtQ1RSJywgbGVuZ3RoOiAyNTYgfSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgWydlbmNyeXB0JywgJ2RlY3J5cHQnXSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0RGF0YSA9IGFzeW5jIChkYXRhOiBhbnkpOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5KSByZXR1cm4gZGF0YTtcblxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3QgZGF0YUJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoanNvblN0cmluZyk7XG5cbiAgICAgICAgY29uc3QgZW5jcnlwdGVkQXJyYXlCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FFUy1DVFInLFxuICAgICAgICAgICAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiA2NCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5ISxcbiAgICAgICAgICAgIGRhdGFCeXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkQXJyYXlCdWZmZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWNyeXB0RGF0YSA9IGFzeW5jIChlbmNyeXB0ZWREYXRhOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIWVuY3J5cHRlZERhdGEpIHJldHVybiBlbmNyeXB0ZWREYXRhO1xuXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZW5jcnlwdGVkRGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyAoZW5jcnlwdGVkRGF0YS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpIDogZW5jcnlwdGVkRGF0YTtcblxuICAgICAgICBjb25zdCBkZWNyeXB0ZWRCeXRlcyA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQUVTLUNUUicsXG4gICAgICAgICAgICAgICAgY291bnRlcjogY291bnRlcixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDY0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXkhLFxuICAgICAgICAgICAgYXJyYXlCdWZmZXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gZGVjb2Rlci5kZWNvZGUoZGVjcnlwdGVkQnl0ZXMpO1xuICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoanNvblN0cmluZykpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHsgZGF0YTogYW55OyB0aW1lc3RhbXA6IG51bWJlciB9IHwgbnVsbD4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuREIoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihTVE9SRV9OQU1FLCAncmVhZG9ubHknKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKFNUT1JFX05BTUUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcXVlc3QucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5lbmNyeXB0aW9uICYmIChyZXN1bHQuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IHJlc3VsdC5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZERhdGEgPSBhd2FpdCBkZWNyeXB0RGF0YShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgZGF0YTogZGVjcnlwdGVkRGF0YSwgdGltZXN0YW1wOiByZXN1bHQudGltZXN0YW1wIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgPz8gbnVsbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuREIoKTtcbiAgICAgICAgICAgIGxldCBkYXRhVG9TdG9yZTogYW55ID0gZGF0YTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICBkYXRhVG9TdG9yZSA9IGF3YWl0IGVuY3J5cHREYXRhKGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oU1RPUkVfTkFNRSwgJ3JlYWR3cml0ZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLnB1dCh7IGRhdGE6IGRhdGFUb1N0b3JlLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfSwga2V5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNhY2hlS2V5KHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRofToke0pTT04uc3RyaW5naWZ5KHBhcmFtcyA/PyB7fSl9YDtcbn1cblxuY29uc3QgZGVlcENsb25lSWZWdWVSZWFjdGl2ZSA9IDxUPih2YWx1ZTogVCk6IFQgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAoaGFzVnVlUmVhY3RpdmUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWVwQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBoYXNWdWVSZWFjdGl2ZSA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2YWx1ZS5fX3ZfaXNSZWFkb25seSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlLl9fdl9pc1JlYWN0aXZlICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChoYXNWdWVSZWFjdGl2ZShpdGVtKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChoYXNWdWVSZWFjdGl2ZSh2YWx1ZVtrZXldKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgZGVlcENsb25lID0gPFQ+KHZhbHVlOiBUKTogVCA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpIGFzIFQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiBkZWVwQ2xvbmUoaXRlbSkpIGFzIFQ7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PikpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwQ2xvbmUoKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQU1BLFNBQVMsaUJBQWlCLENBQUMsU0FBNkI7QUFBQSxFQUN0RCxJQUFJLENBQUMsUUFBUTtBQUFBLElBQVEsUUFBUSxTQUFTO0FBQUEsRUFDdEMsSUFBSSxRQUFRLFNBQVM7QUFBQSxJQUFHLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQ3hELElBQUksUUFBUSxTQUFTO0FBQUEsSUFB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VyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUc7QUFBQSxRQUMzRSxRQUFRLFVBQVUsTUFBTSxPQUFPLFFBQVEsS0FBSztBQUFBLFFBQzVDLFFBQVEsWUFBWSxNQUFNLFFBQVE7QUFBQSxPQUNyQztBQUFBO0FBQUEsRUFFVDtBQUFBO0FBR0osU0FBUyxnQkFBZ0IsQ0FBQyxNQUFjLFFBQXFCO0FBQUEsRUFDekQsT0FBTyxHQUFHLFFBQVEsS0FBSyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFHakQsSUFBTSx5QkFBeUIsQ0FBSSxVQUFnQjtBQUFBLEVBQy9DLElBQUksVUFBVSxRQUFRLFVBQVUsYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMvRSxJQUFJLGVBQWUsS0FBSyxHQUFHO0FBQUEsSUFDdkIsT0FBTyxVQUFVLEtBQUs7QUFBQSxFQUMxQjtBQUFBLEVBQ0EsT0FBTztBQUFBO0FBR1gsSUFBTSxpQkFBaUIsQ0FBQyxVQUF3QjtBQUFBLEVBQzVDLElBQUksVUFBVSxRQUFRLFVBQVUsYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMvRSxJQUFJLE1BQU0sbUJBQW1CLGFBQWEsTUFBTSxtQkFBbUI7QUFBQSxJQUFXLE9BQU87QUFBQSxFQUNyRixJQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUN0QixXQUFXLFFBQVEsT0FBTztBQUFBLE1BQ3RCLElBQUksZUFBZSxJQUFJO0FBQUEsUUFBRyxPQUFPO0FBQUEsSUFDckM7QUFBQSxFQUNKLEVBQU8sU0FBSSxFQUFFLGlCQUFpQixPQUFPO0FBQUEsSUFDakMsV0FBVyxPQUFPLE9BQU8sS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNsQyxJQUFJLGVBQWUsTUFBTSxJQUFJO0FBQUEsUUFBRyxPQUFPO0FBQUEsSUFDM0M7QUFBQSxFQUNKO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUFHWCxJQUFNLFlBQVksQ0FBSSxVQUFnQjtBQUFBLEVBQ2xDLElBQUksVUFBVSxRQUFRLFVBQVUsYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMvRSxJQUFJLGlCQUFpQjtBQUFBLElBQU0sT0FBTyxNQUFNLFlBQVk7QUFBQSxFQUNwRCxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUEsSUFBRyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsVUFBVSxJQUFJLENBQUM7QUFBQSxFQUNwRSxNQUFNLFNBQThCLENBQUM7QUFBQSxFQUNyQyxXQUFXLE9BQU8sT0FBTyxLQUFLLEtBQTRCLEdBQUc7QUFBQSxJQUN6RCxPQUFPLE9BQU8sVUFBVyxNQUE4QixJQUFJO0FBQUEsRUFDL0Q7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjI1QkNFOTEyOUFDRTQ3NTk2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
498
+ //# debugId=2B424E38DC41568D64756E2164756E21
499
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbHMvY3JlYXRlLWlkLnRzIiwgIi4uL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElORy5jaGFyQXQoMCk7XG5cbiAgd2hpbGUgKGN1cnJlbnQgPiAwbikge1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IGN1cnJlbnQgJSBiYXNlO1xuICAgIHJlc3VsdCA9IEVOQ09ESU5HLmNoYXJBdChOdW1iZXIocmVtYWluZGVyKSkgKyByZXN1bHQ7XG4gICAgY3VycmVudCA9IGN1cnJlbnQgLyBiYXNlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIF9fc3RyaW5nVG9CaWdJbnQoc3RyOiBzdHJpbmcpOiBiaWdpbnQge1xuICBjb25zdCBjaGFyTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRU5DT0RJTkcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyTWFwW0VOQ09ESU5HLmNoYXJBdChpKV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJBdChpKTtcbiAgICBpZiAoIShjaGFyIGluIGNoYXJNYXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVyICcke2NoYXJ9JyBpbiBpbnB1dCBzdHJpbmdgKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBCaWdJbnQoY2hhck1hcFtjaGFyXSk7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gX19nZXRNYXhWYWx1ZShuOiBiaWdpbnQpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KEVOQ09ESU5HLmxlbmd0aCkgKiogbiAtIDFuO1xufVxuXG5jb25zdCBpZEdlbmVyYXRvciA9IGRlZmluZUlkR2VuZXJhdG9yKHsgbGVuZ3RoOiAyNCwgdGltZXN0YW1wOiBmYWxzZSwgc2VxdWVudGlhbDogZmFsc2UgfSk7XG5cbmV4cG9ydCBjb25zdCBfX2NyZWF0ZUlkID0gaWRHZW5lcmF0b3IuY3JlYXRlSWQ7XG4iLAogICAgImltcG9ydCB7IF9fY3JlYXRlSWQgfSBmcm9tIFwiLi91dGlscy9jcmVhdGUtaWQudHNcIjtcblxuZXhwb3J0IHR5cGUgTWlsa2lvU3RhcmdhdGVPcHRpb25zID0ge1xuICAgIHBvcnQ6IHtcbiAgICAgICAgcG9zdE1lc3NhZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IChldmVudDogXCJtZXNzYWdlXCIsIGNhbGxiYWNrOiAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogXCJtZXNzYWdlXCIsIGNhbGxiYWNrOiAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgfTtcbiAgICBjYWNoZVN0b3JhZ2U/OiBDYWNoZVN0b3JhZ2U7XG4gICAgY2FjaGVFbmNyeXB0aW9uPzogYm9vbGVhbjtcbiAgICBvbkxvZz86IChsZXZlbDogc3RyaW5nLCBhcmdzOiBhbnlbXSkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE1peGluPFQsIFU+ID0gVSAmIE9taXQ8VCwga2V5b2YgVT47XG5cbmV4cG9ydCB0eXBlIENhY2hlU3RyYXRlZ3kgPSAnb2ZmJyB8ICdmYWxsYmFjaycgfCAndGhyb3R0bGUnO1xuXG5leHBvcnQgdHlwZSBSZXRyeVN0cmF0ZWd5ID0gYm9vbGVhbiB8IG51bWJlcjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZVN0b3JhZ2Uge1xuICAgIGdldDogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPHsgZGF0YTogYW55OyB0aW1lc3RhbXA6IG51bWJlciB9IHwgbnVsbD47XG4gICAgc2V0OiAoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnM8VCBleHRlbmRzIGFueSA9IGFueT4gPSB7XG4gICAgcGFyYW1zPzogUmVjb3JkPGFueSwgYW55PjtcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBjYWNoZVN0cmF0ZWd5PzogQ2FjaGVTdHJhdGVneTtcbiAgICBjYWNoZVRocm90dGxlTXM/OiBudW1iZXI7XG4gICAgb25DYWNoZUhpdD86IChyZXN1bHQ6IFQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHJldHJ5U3RyYXRlZ3k/OiBSZXRyeVN0cmF0ZWd5O1xufTtcblxuZXhwb3J0IHR5cGUgRXhlY3V0ZVJlc3VsdHNPcHRpb24gPSB7IGV4ZWN1dGVJZDogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRvckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgQXN5bmNHZW5lcmF0b3I8aW5mZXIgST4gPyBJIDogbmV2ZXI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZVdvcmtlcjxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xuICAgIGNvbnN0IGV4ZWN1dGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBjb25uZWN0ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09IFwiUE9OR1wiKSByZXR1cm47XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiUElOR1wiKTtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZShcIlBJTkdcIiksIDQyKTtcbiAgICB9KTtcbiAgICBjb25zdCBsb2dIYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSAhPT0gXCJvYmplY3RcIiB8fCAhZXZlbnQuZGF0YS5fX21pbGtpb19sb2cpIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBsZXZlbCwgYXJncyB9ID0gZXZlbnQuZGF0YS5fX21pbGtpb19sb2c7XG4gICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBKU09OLnBhcnNlKGFyZ3MpO1xuICAgICAgICBpZiAoc3RhcmdhdGVPcHRpb25zLm9uTG9nKSB7XG4gICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMub25Mb2cobGV2ZWwsIHBhcnNlZEFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29uc29sZUZuID0gKGNvbnNvbGUgYXMgYW55KVtsZXZlbF0gPz8gY29uc29sZS5sb2c7XG4gICAgICAgICAgICBjb25zb2xlRm4oLi4ucGFyc2VkQXJncy5zbGljZSgwLCA1KSwgLi4ucGFyc2VkQXJncy5zbGljZSg1KS5tYXAoKHY6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkodikpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbG9nSGFuZGxlcik7XG5cbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBsb2dIYW5kbGVyKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXhlY3V0ZUlkIG9mIGV4ZWN1dGVJZHMpIHtcbiAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZShgQ0xPU0VfU1RSRUFNOiR7ZXhlY3V0ZUlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoXCJDTE9TRURcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcbiAgICAgICAgICAgIHBhdGg6IFBhdGgsXG4gICAgICAgICAgICBvcHRpb25zOiBNaXhpbjxcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9uczxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcz86IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJwYXJhbXNcIl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPixcbiAgICAgICAgKTogUHJvbWlzZTxcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxuICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgIFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsLCBFeGVjdXRlUmVzdWx0c09wdGlvbl0gfCBbbnVsbCwgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXSwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxuICAgICAgICAgICAgW1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGwsIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXSB8IFtudWxsLCBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD4sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxuICAgICAgICA+IHtcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0O1xuXG4gICAgICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVTdHJhdGVneSA9IG9wdGlvbnM/LmNhY2hlU3RyYXRlZ3kgPz8gJ29mZic7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09IHRydWUgfHwgb3B0aW9ucz8ucmV0cnlTdHJhdGVneSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09ICdudW1iZXInICYmIG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50ID0gb3B0aW9ucz8ucmV0cnlTdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVRocm90dGxlTXMgPSBvcHRpb25zPy5jYWNoZVRocm90dGxlTXMgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBnZW5lcmF0ZUNhY2hlS2V5KHBhdGggYXMgc3RyaW5nLCBvcHRpb25zPy5wYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYWNoZVN0b3JhZ2UgPSBzdGFyZ2F0ZU9wdGlvbnMuY2FjaGVTdG9yYWdlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSAhPT0gJ29mZicgJiYgIWNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVTdG9yYWdlID0gYXdhaXQgY3JlYXRlRGVmYXVsdENhY2hlU3RvcmFnZSh7IGVuY3J5cHRpb246IHN0YXJnYXRlT3B0aW9ucy5jYWNoZUVuY3J5cHRpb24gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSAhPT0gJ29mZicgJiYgY2FjaGVTdG9yYWdlICYmIG9wdGlvbnM/Lm9uQ2FjaGVIaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG9wdGlvbnMub25DYWNoZUhpdChjYWNoZWQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvbkNhY2hlSGl0IGVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0cmF0ZWd5ID09PSAndGhyb3R0bGUnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gYXdhaXQgY2FjaGVTdG9yYWdlLmdldChjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQudGltZXN0YW1wIDwgY2FjaGVUaHJvdHRsZU1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW251bGwsIGNhY2hlZC5kYXRhLCB7IGV4ZWN1dGVJZDogJ2NhY2hlZCcgfV0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVSZXF1ZXN0ID0gKCk6IFByb21pc2U8W2FueSwgYW55LCBFeGVjdXRlUmVzdWx0c09wdGlvbl0+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVxUmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcUV4ZWN1dGVJZCA9IF9fY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmFkZChyZXFFeGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gcmVxRXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKHJlcUV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JbZXZlbnQuZGF0YS5lcnJvci5jb2RlXSA9IGV2ZW50LmRhdGEuZXJyb3IucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxUmVzb2x2ZShbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiByZXFFeGVjdXRlSWQgfV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxUmVzb2x2ZShbbnVsbCwgZXZlbnQuZGF0YS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVxRXhlY3V0ZUlkIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQ6IHJlcUV4ZWN1dGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBkZWVwQ2xvbmVJZlZ1ZVJlYWN0aXZlKG9wdGlvbnM/LnBhcmFtcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgW2Vycm9yLCByZXN1bHQsIHJlc3VsdE9wdGlvbl0gPSBhd2FpdCBleGVjdXRlUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJldHJ5SW5kZXggPSAwOyByZXRyeUluZGV4IDwgcmV0cnlDb3VudCAmJiBlcnJvcjsgcmV0cnlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvciwgcmVzdWx0LCByZXN1bHRPcHRpb25dID0gYXdhaXQgZXhlY3V0ZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW251bGwsIGNhY2hlZC5kYXRhLCB7IGV4ZWN1dGVJZDogJ2NhY2hlZCcgfV0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShbZXJyb3IsIG51bGwsIHJlc3VsdE9wdGlvbl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FjaGVTdG9yYWdlLnNldChjYWNoZUtleSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW251bGwsIHJlc3VsdCwgcmVzdWx0T3B0aW9uXSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cmVhbVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlSWQgPSBfX2NyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuYWRkKGV4ZWN1dGVJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsb3c6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUZsb3c+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gZXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZsb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93ID0gY3JlYXRlRmxvdyhzdGFyZ2F0ZU9wdGlvbnMsIGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcltldmVudC5kYXRhLmVycm9yLmNvZGVdID0gZXZlbnQuZGF0YS5lcnJvci5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW2Vycm9yLCBudWxsLCB7IGV4ZWN1dGVJZCB9XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIHJlc29sdmUoW251bGwsIGZsb3csIHsgZXhlY3V0ZUlkIH1dIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIGZsb3cucmV0dXJuKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZmxvdy50aHJvdyhldmVudC5kYXRhLmRhdGE/LmF0KDApLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3cudGhyb3coZXZlbnQuZGF0YS5kYXRhLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEuc3VjY2VzcykgZmxvdy5lbWl0KGV2ZW50LmRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBkZWVwQ2xvbmVJZlZ1ZVJlYWN0aXZlKG9wdGlvbnM/LnBhcmFtcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJHR5cGVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZCxcbiAgICAgICAgICAgIGVycm9yOiBHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdO1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgW1BhdGggaW4ga2V5b2YgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1dOiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgICAgIFtQYXRoIGluIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdXTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcIvCfpZtcIl0gZXh0ZW5kcyBib29sZWFuXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdXG4gICAgICAgICAgICAgICAgOiAvLyBzdHJlYW1cbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBzdGFyZ2F0ZTtcbn1cblxuZXhwb3J0IHR5cGUgTWlsa2lvRmxvdzxULCBUUmV0dXJuID0gYW55LCBUTmV4dCA9IGFueT4gPSB7XG4gICAgZW1pdDogKGZsb3c6IFQpID0+IHZvaWQ7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gTWlsa2lvRmxvdzxUPjtcbiAgICBuZXh0KC4uLlt2YWx1ZV06IFtdIHwgW1ROZXh0XSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xuICAgIHJldHVybihkYXRhOiB1bmRlZmluZWQsIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xuICAgIHRocm93KGVycm9yOiBhbnksIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZsb3c8VD4oc3RhcmdhdGVPcHRpb25zOiBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMsIGV4ZWN1dGVJZDogc3RyaW5nKTogTWlsa2lvRmxvdzxUPiB7XG4gICAgbGV0IHN0YXR1czogXCJwZW5kaW5nXCIgfCBcInJlc29sdmVkXCIgfCBcInJlamVjdGVkXCIgPSBcInBlbmRpbmdcIjtcbiAgICBjb25zdCBmbG93czogQXJyYXk8e1xuICAgICAgICBibGFuazogYm9vbGVhbjtcbiAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxUPjtcbiAgICAgICAgcmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkO1xuICAgICAgICByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gICAgfT4gPSBbXTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICBlbWl0OiAoZmxvdzogVCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZsb3dzLmF0KC0xKT8uYmxhbmsgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZmxvd3MuYXQoLTEpITtcbiAgICAgICAgICAgICAgICBpdGVtLmJsYW5rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXRlbS5yZXNvbHZlKGZsb3cpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gd2l0aFJlc29sdmVyczxUPigpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKGZsb3cpO1xuICAgICAgICAgICAgICAgIGZsb3dzLnB1c2goeyAuLi5yZXNvbHZlcnMsIGJsYW5rOiBmYWxzZSB9IGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLih7XG4gICAgICAgICAgICBhc3luYyBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VD4+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSBcInBlbmRpbmdcIikgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBpZiAoZmxvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmbG93ID0gZmxvd3MuYXQoMCkhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsb3cucHJvbWlzZTtcbiAgICAgICAgICAgICAgICBmbG93cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhc3luYyByZXR1cm4oXzogdW5kZWZpbmVkLCBkaXNhYmxlUG9zdENsb3NlTWVzc2FnZT86IHRydWUpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gXCJyZXNvbHZlZFwiO1xuICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZVBvc3RDbG9zZU1lc3NhZ2UpIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKGBDTE9TRV9TVFJFQU06JHtleGVjdXRlSWR9YCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnksIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlUG9zdENsb3NlTWVzc2FnZSkgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoYENMT1NFX1NUUkVBTToke2V4ZWN1dGVJZH1gKTtcbiAgICAgICAgICAgICAgICBpZiAoZmxvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5ibGFuayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmbG93LnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXG4gICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGl0ZXJhdG9yIGFzIE1pbGtpb0Zsb3c8VD47XG59XG5cbmZ1bmN0aW9uIHdpdGhSZXNvbHZlcnM8VCA9IGFueT4oKTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4ge1xuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XG4gICAgbGV0IHJlamVjdDogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZWplY3RcIl07XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xufVxuXG5jb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xuXG5leHBvcnQgZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcbiAgICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlIHx8ICh0eXBlb2YgKGpzb24gYXMgYW55KS5nZXRUaW1lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoanNvbiBhcyBhbnkpLnRvSVNPU3RyaW5nID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgVF0gPSByZXZpdmVKU09OUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30gYXMgVCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKCc6JywgJycpfWAgOiBgJHttYXRjaFsxXX1aYDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufVxuXG5jb25zdCBEQl9OQU1FID0gJ1N0YXJnYXRlV29ya2VyJztcbmNvbnN0IFNUT1JFX05BTUUgPSAnY2FjaGVzJztcbmxldCBkYkluc3RhbmNlOiBJREJEYXRhYmFzZSB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiBvcGVuREIoKTogUHJvbWlzZTxJREJEYXRhYmFzZT4ge1xuICAgIGlmIChkYkluc3RhbmNlKSByZXR1cm4gZGJJbnN0YW5jZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQl9OQU1FLCAxKTtcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGRiSW5zdGFuY2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgIHJlc29sdmUoZGJJbnN0YW5jZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYiA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2FjaGVTdG9yYWdlKG9wdGlvbnM/OiB7IGVuY3J5cHRpb24/OiBib29sZWFuOyBlbmNyeXB0aW9uS2V5Pzogc3RyaW5nIH0pOiBQcm9taXNlPENhY2hlU3RvcmFnZT4ge1xuICAgIGF3YWl0IG9wZW5EQigpO1xuXG4gICAgbGV0IGVuY3J5cHRpb25LZXk6IENyeXB0b0tleSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG5cbiAgICBpZiAob3B0aW9ucz8uZW5jcnlwdGlvbikge1xuICAgICAgICBjb25zdCBrZXlTdHJpbmcgPSBvcHRpb25zLmVuY3J5cHRpb25LZXkgPz8gREJfTkFNRTtcbiAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleVN0cmluZykuZm9yRWFjaCgoYnl0ZSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPCAxNikgY291bnRlcltpXSA9IGJ5dGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3Qga2V5RGF0YSA9IGVuY29kZXIuZW5jb2RlKGtleVN0cmluZyk7XG4gICAgICAgIGNvbnN0IGltcG9ydGVkS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGtleURhdGEsIHsgbmFtZTogJ1BCS0RGMicgfSwgZmFsc2UsIFsnZGVyaXZlS2V5J10pO1xuXG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRlcml2ZUtleShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUEJLREYyJyxcbiAgICAgICAgICAgICAgICBzYWx0OiBlbmNvZGVyLmVuY29kZSgnbWlsa2lvLXN0YXJnYXRlLXdvcmtlci1jYWNoZScpLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAwMCxcbiAgICAgICAgICAgICAgICBoYXNoOiAnU0hBLTI1NicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgICAgICB7IG5hbWU6ICdBRVMtQ1RSJywgbGVuZ3RoOiAyNTYgfSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgWydlbmNyeXB0JywgJ2RlY3J5cHQnXSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0RGF0YSA9IGFzeW5jIChkYXRhOiBhbnkpOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5KSByZXR1cm4gZGF0YTtcblxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3QgZGF0YUJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoanNvblN0cmluZyk7XG5cbiAgICAgICAgY29uc3QgZW5jcnlwdGVkQXJyYXlCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FFUy1DVFInLFxuICAgICAgICAgICAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiA2NCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5ISxcbiAgICAgICAgICAgIGRhdGFCeXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkQXJyYXlCdWZmZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWNyeXB0RGF0YSA9IGFzeW5jIChlbmNyeXB0ZWREYXRhOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIWVuY3J5cHRlZERhdGEpIHJldHVybiBlbmNyeXB0ZWREYXRhO1xuXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZW5jcnlwdGVkRGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyAoZW5jcnlwdGVkRGF0YS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpIDogZW5jcnlwdGVkRGF0YTtcblxuICAgICAgICBjb25zdCBkZWNyeXB0ZWRCeXRlcyA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQUVTLUNUUicsXG4gICAgICAgICAgICAgICAgY291bnRlcjogY291bnRlcixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDY0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXkhLFxuICAgICAgICAgICAgYXJyYXlCdWZmZXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gZGVjb2Rlci5kZWNvZGUoZGVjcnlwdGVkQnl0ZXMpO1xuICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoanNvblN0cmluZykpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHsgZGF0YTogYW55OyB0aW1lc3RhbXA6IG51bWJlciB9IHwgbnVsbD4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuREIoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihTVE9SRV9OQU1FLCAncmVhZG9ubHknKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKFNUT1JFX05BTUUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcXVlc3QucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5lbmNyeXB0aW9uICYmIChyZXN1bHQuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IHJlc3VsdC5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZERhdGEgPSBhd2FpdCBkZWNyeXB0RGF0YShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgZGF0YTogZGVjcnlwdGVkRGF0YSwgdGltZXN0YW1wOiByZXN1bHQudGltZXN0YW1wIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgPz8gbnVsbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuREIoKTtcbiAgICAgICAgICAgIGxldCBkYXRhVG9TdG9yZTogYW55ID0gZGF0YTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICBkYXRhVG9TdG9yZSA9IGF3YWl0IGVuY3J5cHREYXRhKGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oU1RPUkVfTkFNRSwgJ3JlYWR3cml0ZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLnB1dCh7IGRhdGE6IGRhdGFUb1N0b3JlLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfSwga2V5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNhY2hlS2V5KHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRofToke0pTT04uc3RyaW5naWZ5KHBhcmFtcyA/PyB7fSl9YDtcbn1cblxuY29uc3QgZGVlcENsb25lSWZWdWVSZWFjdGl2ZSA9IDxUPih2YWx1ZTogVCk6IFQgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAoaGFzVnVlUmVhY3RpdmUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWVwQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBoYXNWdWVSZWFjdGl2ZSA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2YWx1ZS5fX3ZfaXNSZWFkb25seSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlLl9fdl9pc1JlYWN0aXZlICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChoYXNWdWVSZWFjdGl2ZShpdGVtKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChoYXNWdWVSZWFjdGl2ZSh2YWx1ZVtrZXldKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgZGVlcENsb25lID0gPFQ+KHZhbHVlOiBUKTogVCA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpIGFzIFQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiBkZWVwQ2xvbmUoaXRlbSkpIGFzIFQ7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PikpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwQ2xvbmUoKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQU1BLFNBQVMsaUJBQWlCLENBQUMsU0FBNkI7QUFBQSxFQUN0RCxJQUFJLENBQUMsUUFBUTtBQUFBLElBQVEsUUFBUSxTQUFTO0FBQUEsRUFDdEMsSUFBSSxRQUFRLFNBQVM7QUFBQSxJQUFHLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQ3hELElBQUksUUFBUSxTQUFTO0FBQUEsSUFB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VyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUc7QUFBQSxRQUMzRSxRQUFRLFVBQVUsTUFBTSxPQUFPLFFBQVEsS0FBSztBQUFBLFFBQzVDLFFBQVEsWUFBWSxNQUFNLFFBQVE7QUFBQSxPQUNyQztBQUFBO0FBQUEsRUFFVDtBQUFBO0FBR0osU0FBUyxnQkFBZ0IsQ0FBQyxNQUFjLFFBQXFCO0FBQUEsRUFDekQsT0FBTyxHQUFHLFFBQVEsS0FBSyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFHakQsSUFBTSx5QkFBeUIsQ0FBSSxVQUFnQjtBQUFBLEVBQy9DLElBQUksVUFBVSxRQUFRLFVBQVUsYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMvRSxJQUFJLGVBQWUsS0FBSyxHQUFHO0FBQUEsSUFDdkIsT0FBTyxVQUFVLEtBQUs7QUFBQSxFQUMxQjtBQUFBLEVBQ0EsT0FBTztBQUFBO0FBR1gsSUFBTSxpQkFBaUIsQ0FBQyxVQUF3QjtBQUFBLEVBQzVDLElBQUksVUFBVSxRQUFRLFVBQVUsYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMvRSxJQUFJLE1BQU0sbUJBQW1CLGFBQWEsTUFBTSxtQkFBbUI7QUFBQSxJQUFXLE9BQU87QUFBQSxFQUNyRixJQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUN0QixXQUFXLFFBQVEsT0FBTztBQUFBLE1BQ3RCLElBQUksZUFBZSxJQUFJO0FBQUEsUUFBRyxPQUFPO0FBQUEsSUFDckM7QUFBQSxFQUNKLEVBQU8sU0FBSSxFQUFFLGlCQUFpQixPQUFPO0FBQUEsSUFDakMsV0FBVyxPQUFPLE9BQU8sS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNsQyxJQUFJLGVBQWUsTUFBTSxJQUFJO0FBQUEsUUFBRyxPQUFPO0FBQUEsSUFDM0M7QUFBQSxFQUNKO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUFHWCxJQUFNLFlBQVksQ0FBSSxVQUFnQjtBQUFBLEVBQ2xDLElBQUksVUFBVSxRQUFRLFVBQVUsYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMvRSxJQUFJLGlCQUFpQjtBQUFBLElBQU0sT0FBTyxNQUFNLFlBQVk7QUFBQSxFQUNwRCxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUEsSUFBRyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsVUFBVSxJQUFJLENBQUM7QUFBQSxFQUNwRSxNQUFNLFNBQThCLENBQUM7QUFBQSxFQUNyQyxXQUFXLE9BQU8sT0FBTyxLQUFLLEtBQTRCLEdBQUc7QUFBQSxJQUN6RCxPQUFPLE9BQU8sVUFBVyxNQUE4QixJQUFJO0FBQUEsRUFDL0Q7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjJCNDI0RTM4REM0MTU2OEQ2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milkio/stargate-worker",
3
- "version": "1.3.56",
3
+ "version": "1.3.58",
4
4
  "type": "module",
5
5
  "exports": "./index.js",
6
6
  "types": "./index.d.ts",