@milkio/redis 1.0.0-beta.205 → 1.0.0-beta.206
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.
- package/index.d.ts +1 -0
- package/index.js +33 -10
- package/package.json +1 -1
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -86,8 +86,29 @@ async function createRedis(redisClient) {
|
|
|
86
86
|
const lockKey = `${key}:lock`;
|
|
87
87
|
const lockSet = await redis.SET(lockKey, "1", { PX: lockInterval, NX: true });
|
|
88
88
|
const gotLock = lockSet === "OK";
|
|
89
|
-
if (!gotLock)
|
|
89
|
+
if (!gotLock) {
|
|
90
|
+
const maxWaitTime = lockInterval;
|
|
91
|
+
const waitInterval = 16;
|
|
92
|
+
let waited = 0;
|
|
93
|
+
while (waited < maxWaitTime) {
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, waitInterval));
|
|
95
|
+
waited += waitInterval;
|
|
96
|
+
const waitedResultRaw = await redis.GET(key);
|
|
97
|
+
const waitedResult = waitedResultRaw ? reviveJSONParse(JSON.parse(waitedResultRaw)) : undefined;
|
|
98
|
+
if (waitedResult && waitedResult.T > now) {
|
|
99
|
+
return waitedResult.R;
|
|
100
|
+
}
|
|
101
|
+
if (!await redis.EXISTS(lockKey)) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const finalResultRaw = await redis.GET(key);
|
|
106
|
+
const finalResult = finalResultRaw ? reviveJSONParse(JSON.parse(finalResultRaw)) : undefined;
|
|
107
|
+
if (finalResult && finalResult.T > now) {
|
|
108
|
+
return finalResult.R;
|
|
109
|
+
}
|
|
90
110
|
return result ? result.R : options.defaultValue;
|
|
111
|
+
}
|
|
91
112
|
const recheckRaw = await redis.GET(key);
|
|
92
113
|
const recheck = recheckRaw ? reviveJSONParse(JSON.parse(recheckRaw)) : undefined;
|
|
93
114
|
if (recheck && recheck.T > now) {
|
|
@@ -225,14 +246,15 @@ async function createRedis(redisClient) {
|
|
|
225
246
|
};
|
|
226
247
|
return milkioRedis;
|
|
227
248
|
}
|
|
249
|
+
var isoDatePattern = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?)(Z|[+-]\d{2}:?\d{2})?$/;
|
|
228
250
|
function reviveJSONParse(json) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
251
|
+
if (json !== null && typeof json === "object") {
|
|
252
|
+
if (json instanceof Date || typeof json.getTime === "function" && typeof json.toISOString === "function") {
|
|
253
|
+
return json;
|
|
254
|
+
}
|
|
255
|
+
if (Array.isArray(json)) {
|
|
256
|
+
return json.map((item) => reviveJSONParse(item));
|
|
257
|
+
}
|
|
236
258
|
return Object.entries(json).reduce((acc, [key, value]) => {
|
|
237
259
|
acc[key] = reviveJSONParse(value);
|
|
238
260
|
return acc;
|
|
@@ -248,8 +270,9 @@ function reviveJSONParse(json) {
|
|
|
248
270
|
return json;
|
|
249
271
|
}
|
|
250
272
|
export {
|
|
273
|
+
reviveJSONParse,
|
|
251
274
|
createRedis
|
|
252
275
|
};
|
|
253
276
|
|
|
254
|
-
//# debugId=
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4gPSB7XG4gICAgZGVmYXVsdFZhbHVlPzogVCB8IHVuZGVmaW5lZDtcbiAgICBleHBpcmVNczogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPFQ+ID0ge1xuICAgIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XG4gICAgZXhwaXJlTXM6IG51bWJlciB8IG51bGw7XG4gICAgcmVhbEV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbDtcbiAgICBsb2NrSW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgcmVmcmVzaExvY2tJbnRlcnZhbD86IG51bWJlcjtcbiAgICBub3RGb3VuZEV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbDtcbiAgICBmZXRjaDogKCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpczxSZWRpc1QgPSBhbnk+ID0ge1xuICAgIHJlZGlzOiBSZWRpc1Q7XG4gICAgdXNlQ2FjaGU6IDxUPihrZXk6IHN0cmluZywgb3B0aW9ucz86IE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+KSA9PiB7XG4gICAgICAgIHNldDogKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyIHwgbnVsbCkgPT4gUHJvbWlzZTxUPjtcbiAgICAgICAgZ2V0OiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBwdWxsOiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBoYXM6ICgpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgICAgIGRlbDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIHVzZUZldGNoOiA8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM6IE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPFQ+KSA9PiB7XG4gICAgICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICAgICAgZGVsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBmZXRjaDogKCkgPT4gUHJvbWlzZTxUPjtcbiAgICAgICAgcmVmcmVzaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIHVzZUNvdW50OiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZ2V0OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgIGFkZDogKGFtb3VudDogbnVtYmVyLCBleHBpcmVNcz86IG51bWJlciB8IG51bGwpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICAgICAgc3ViOiAoYW1vdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICB9O1xuICAgIHVzZUNsb2NrSW46IChrZXk6IHN0cmluZywgY2xlYW5EYXRlOiBEYXRlKSA9PiB7XG4gICAgICAgIGNsb2NrSW46IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgY2hlY2s6IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICAgICAgZmlyc3RDbG9ja0luOiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgIGxhc3RDbG9ja0luOiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgIHRvQXJyYXk6IChsZW5ndGg6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuW10+O1xuICAgICAgICBjb3VudDogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xuICAgICAgICBjbGVhbjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZGlzPFJlZGlzVCBleHRlbmRzIHsgUFNFVEVYOiBhbnk7IFNFVDogYW55O1tvdGhlcnM6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PihyZWRpc0NsaWVudDogUmVkaXNUKTogUHJvbWlzZTxNaWxraW9SZWRpczxSZWRpc1Q+PiB7XG4gICAgY29uc3QgcmVkaXMgPSByZWRpc0NsaWVudCBhcyBhbnk7XG5cbiAgICBjb25zdCBtaWxraW9SZWRpczogYW55ID0ge1xuICAgICAgICByZWRpcyxcbiAgICAgICAgdXNlQ2FjaGU6IDxUPihrZXk6IHN0cmluZywgb3B0aW9ucz86IE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+KSA9PiAoe1xuICAgICAgICAgICAgc2V0OiBhc3luYyAodmFsdWU6IFQsIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGlyZU1zID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOawuOS5heS/neWtmFxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQoa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIGFueSBhcyBzdHJpbmcpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWxsOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5HRVQoa2V5KS5ERUwoa2V5KS5FWEVDKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0UmF3WzBdO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlc3VsdCBhcyBhbnkgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzOiBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIHVzZUZldGNoOiA8T3B0aW9ucyBleHRlbmRzIE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPGFueT4+KGtleTogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlTXMgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5leHBpcmVNcyA8PSAwKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9ja0ludGVydmFsICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmxvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLmxvY2tJbnRlcnZhbCA8PSAwKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZWFsRXhwaXJlTXMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMucmVhbEV4cGlyZU1zIDw9IDApKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVhbEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbCBpZiBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3RGb3VuZEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbCBpZiBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA8PSBsb2NrSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb2NrSW50ZXJ2YWxcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmV0Y2ggIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZldGNoIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoYXM6IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmZXRjaDogYXN5bmMgKCk6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+PiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8g5aSE55CG5rC45LmF5L+d5a2Y55qE5oOF5Ya1XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsRXhwaXJlTXM6IG51bWJlciB8IG51bGwgPSBvcHRpb25zLnJlYWxFeHBpcmVNcyA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RGb3VuZEV4cGlyZU1zID0gb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsID8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpIDogODY0MDAwMDApOyAvLyDpu5jorqQx5aSpXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdFJhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXN1bHRSYXcgYXMgc3RyaW5nKSkgYXMgeyBUOiBudW1iZXI7IFI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB9KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5UID4gbm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IHJlZGlzLkVYSVNUUyhyZWZyZXNoTG9ja0tleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tLZXkgPSBgJHtrZXl9OmxvY2tgO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksIFwiMVwiLCB7IFBYOiBsb2NrSW50ZXJ2YWwsIE5YOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnb3RMb2NrID0gbG9ja1NldCA9PT0gXCJPS1wiO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZ290TG9jaykgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdC5SIDogb3B0aW9ucy5kZWZhdWx0VmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjaGVja1JhdyA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNoZWNrID0gcmVjaGVja1JhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZWNoZWNrUmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2hlY2sgJiYgcmVjaGVjay5UID4gbm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjaGVjay5SO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGE6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PjtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwobG9ja0tleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIOiuoeeul+i/h+acn+aXtumXtFxuICAgICAgICAgICAgICAgICAgICBsZXQgZWZmZWN0aXZlRXhwaXJlTXM6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUV4cGlyZU1zID0gb3B0aW9ucy5leHBpcmVNcyArIChyZWFsRXhwaXJlTXMgPz8gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpwgZXhwaXJlTXMg5Li6IG51bGzvvIxlZmZlY3RpdmVFeHBpcmVNcyDkv53mjIEgbnVsbO+8iOawuOS5heS/neWtmO+8iVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBub3RGb3VuZEV4cGlyZU1zO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVWYWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFQ6IG5vdyArIChkYXRhICE9PSB1bmRlZmluZWQgPyAob3B0aW9ucy5leHBpcmVNcyA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgOiBub3RGb3VuZEV4cGlyZU1zKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFI6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tFeGlzdHMgPSBhd2FpdCByZWRpcy5FWElTVFMocmVmcmVzaExvY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaExvY2tFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChsb2NrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVmZmVjdGl2ZUV4cGlyZU1zID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuU0VUKGtleSwgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLkRFTChsb2NrS2V5KS5FWEVDKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlBTRVRFWChrZXksIGVmZmVjdGl2ZUV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSkuREVMKGxvY2tLZXkpLkVYRUMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaDogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tJbnRlcnZhbCA9IG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA/PyAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MikgKyAxMDI0O1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlNFVChyZWZyZXNoTG9ja0tleSwgXCIxXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFBYOiByZWZyZXNoTG9ja0ludGVydmFsLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YTogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChyZWZyZXNoTG9ja0tleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIOWkhOeQhuawuOS5heS/neWtmOeahOaDheWGtVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbEV4cGlyZU1zOiBudW1iZXIgfCBudWxsID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8g6K6h566X6L+H5pyf5pe26Ze0XG4gICAgICAgICAgICAgICAgICAgIGxldCBlZmZlY3RpdmVFeHBpcmVNczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBvcHRpb25zLmV4cGlyZU1zICsgKHJlYWxFeHBpcmVNcyA/PyAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenCBleHBpcmVNcyDkuLogbnVsbO+8jGVmZmVjdGl2ZUV4cGlyZU1zIOS/neaMgSBudWxs77yI5rC45LmF5L+d5a2Y77yJXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVFeHBpcmVNcyA9IG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCA/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KSA6IDg2NDAwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMuZXhwaXJlTXMgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIDogKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCA/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KSA6IDg2NDAwMDAwKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUjogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZWZmZWN0aXZlRXhwaXJlTXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOawuOS5heS/neWtmFxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuU0VUKGtleSwgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgY2xlYW4gdGhlIHVwZGF0ZSBsb2NrISBJbnN0ZWFkLCB3YWl0IGZvciBpdCB0byBleHBpcmUgbmF0dXJhbGx5XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4gKHtcbiAgICAgICAgICAgIGdldDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHQpIDogMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGQ6IGFzeW5jIChhbW91bnQ6IG51bWJlciwgZXhwaXJlTXM/OiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJlTXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5rC45LmF5L+d5a2YXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLklOQ1JCWShrZXksIGFtb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV4cGlyZU1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLklOQ1JCWShrZXksIGFtb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLk1VTFRJKCkuSU5DUkJZKGtleSwgYW1vdW50KS5QRVhQSVJFKGtleSwgZXhwaXJlTXMpLkVYRUMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHRbMF0pIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ViOiBhc3luYyAoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkRFQ1JCWShrZXksIGFtb3VudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcblxuICAgICAgICB1c2VDbG9ja0luOiAoa2V5OiBzdHJpbmcsIGNsZWFuRGF0ZTogRGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIGNsb2NrSW46IGFzeW5jIChvZmZzZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuU0VUQklUKGtleSwgb2Zmc2V0LCAxKS5QRVhQSVJFQVQoa2V5LCBjbGVhbkRhdGUuZ2V0VGltZSgpKS5FWEVDKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2hlY2s6IGFzeW5jIChvZmZzZXQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVEJJVChrZXksIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gMTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXJzdENsb2NrSW46IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5CSVRQT1Moa2V5LCAxLCAtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9BcnJheTogYXN5bmMgKGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuW10+ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5CSVRGSUVMRChrZXksIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IGB1JHtsZW5ndGh9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogXCIjMFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE51bWJlci5wYXJzZUludChgJHtyZXN1bHRSYXd9YCkudG9TdHJpbmcoMikuc3BsaXQoXCJcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsbCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoIC0gcmVzdWx0Lmxlbmd0aDsgaSsrKSBmaWxsLnB1c2goXCIwXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZmlsbCwgLi4ucmVzdWx0XS5tYXAoKHYpID0+IHYgPT09IFwiMVwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3VudDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUQ09VTlQoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIG51bWJlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhbjogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBtaWxraW9SZWRpcztcbn1cblxuZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcbiAgICBjb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xuXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICByZXR1cm4ganNvbi5tYXAoKGl0ZW0pID0+IHJldml2ZUpTT05QYXJzZShpdGVtKSkgYXMgYW55O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIgJiYganNvbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoanNvbikucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSBhcyBUKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBqc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZShcIjpcIiwgXCJcIil9YCA6IGAke21hdGNoWzFdfVpgO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlU3RyaW5nKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG59XG5cbmV4cG9ydCB0eXBlIFJlZGlzID0gTWlsa2lvUmVkaXM7IgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQThDQSxlQUFzQixXQUE2RixDQUFDLGFBQW1EO0FBQUEsRUFDbkssTUFBTSxRQUFRO0FBQUEsRUFFZCxNQUFNLGNBQW1CO0FBQUEsSUFDckI7QUFBQSxJQUNBLFVBQVUsQ0FBSSxLQUFhLGFBQTBDO0FBQUEsTUFDakUsS0FBSyxPQUFPLE9BQVUsYUFBd0M7QUFBQSxRQUMxRCxJQUFJLGFBQWEsTUFBTTtBQUFBLFVBRW5CLE1BQU0sTUFBTSxJQUFJLEtBQUssS0FBSyxVQUFVLEtBQUssQ0FBQztBQUFBLFFBQzlDLEVBQU87QUFBQSxVQUNILE1BQU0sTUFBTSxPQUFPLEtBQUssVUFBVSxLQUFLLFVBQVUsS0FBSyxDQUFDO0FBQUE7QUFBQSxRQUUzRCxPQUFPO0FBQUE7QUFBQSxNQUVYLEtBQUssWUFBb0M7QUFBQSxRQUNyQyxNQUFNLFNBQVMsTUFBTSxNQUFNLElBQUksR0FBRztBQUFBLFFBQ2xDLElBQUksV0FBVztBQUFBLFVBQU0sT0FBTyxTQUFTO0FBQUEsUUFDckMsT0FBTyxnQkFBZ0IsS0FBSyxNQUFNLE1BQXVCLENBQUM7QUFBQTtBQUFBLE1BRTlELE1BQU0sWUFBWTtBQUFBLFFBQ2QsTUFBTSxZQUFZLE1BQU0sTUFBTSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSztBQUFBLFFBQzdELE1BQU0sU0FBUyxVQUFVO0FBQUEsUUFDekIsSUFBSSxXQUFXO0FBQUEsVUFBTSxPQUFPLFNBQVM7QUFBQSxRQUNyQyxPQUFPLGdCQUFnQixLQUFLLE1BQU0sTUFBdUIsQ0FBQztBQUFBO0FBQUEsTUFFOUQsS0FBSyxZQUE4QjtBQUFBLFFBQy9CLE1BQU0sU0FBUyxNQUFNLE1BQU0sSUFBSSxHQUFHO0FBQUEsUUFDbEMsT0FBTyxXQUFXO0FBQUE7QUFBQSxNQUV0QixLQUFLLFlBQVk7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QUFHWCxTQUFTLGVBQWtCLENBQUMsTUFBWTtBQUFBLEVBQ3BDLE1BQU0saUJBQWlCO0FBQUEsRUFFdkIsSUFBSSxnQkFBZ0I7QUFBQSxJQUFNLE9BQU87QUFBQSxFQUNqQyxJQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFBQSxJQUNyQixPQUFPLEtBQUssSUFBSSxDQUFDLFNBQVMsZ0JBQWdCLElBQUksQ0FBQztBQUFBLEVBQ25EO0FBQUEsRUFDQSxJQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUFBLElBQzNDLE9BQU8sT0FBTyxRQUFRLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLFdBQVc7QUFBQSxNQUN0RCxJQUFJLE9BQWtCLGdCQUFnQixLQUFLO0FBQUEsTUFDM0MsT0FBTztBQUFBLE9BQ1IsQ0FBQyxDQUFNO0FBQUEsRUFDZDtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsVUFBVTtBQUFBLElBQzFCLE1BQU0sUUFBUSxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3ZDLElBQUksT0FBTztBQUFBLE1BQ1AsTUFBTSx1QkFBdUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLE1BQU0sR0FBRyxRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTTtBQUFBLE1BQzdGLE9BQU8sSUFBSSxLQUFLLG9CQUFvQjtBQUFBLElBQ3hDO0FBQUEsRUFDSjtBQUFBLEVBQ0EsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiODQwRTRDRTdDQzNDQ0E5ODY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
277
|
+
//# debugId=17D453A4610A3E8E64756E2164756E21
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4gPSB7XG4gICAgZGVmYXVsdFZhbHVlPzogVCB8IHVuZGVmaW5lZDtcbiAgICBleHBpcmVNczogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPFQ+ID0ge1xuICAgIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XG4gICAgZXhwaXJlTXM6IG51bWJlciB8IG51bGw7XG4gICAgcmVhbEV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbDtcbiAgICBsb2NrSW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgcmVmcmVzaExvY2tJbnRlcnZhbD86IG51bWJlcjtcbiAgICBub3RGb3VuZEV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbDtcbiAgICBmZXRjaDogKCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpczxSZWRpc1QgPSBhbnk+ID0ge1xuICAgIHJlZGlzOiBSZWRpc1Q7XG4gICAgdXNlQ2FjaGU6IDxUPihrZXk6IHN0cmluZywgb3B0aW9ucz86IE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+KSA9PiB7XG4gICAgICAgIHNldDogKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyIHwgbnVsbCkgPT4gUHJvbWlzZTxUPjtcbiAgICAgICAgZ2V0OiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBwdWxsOiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBoYXM6ICgpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgICAgIGRlbDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIHVzZUZldGNoOiA8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM6IE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPFQ+KSA9PiB7XG4gICAgICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICAgICAgZGVsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBmZXRjaDogKCkgPT4gUHJvbWlzZTxUPjtcbiAgICAgICAgcmVmcmVzaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIHVzZUNvdW50OiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZ2V0OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgIGFkZDogKGFtb3VudDogbnVtYmVyLCBleHBpcmVNcz86IG51bWJlciB8IG51bGwpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICAgICAgc3ViOiAoYW1vdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICB9O1xuICAgIHVzZUNsb2NrSW46IChrZXk6IHN0cmluZywgY2xlYW5EYXRlOiBEYXRlKSA9PiB7XG4gICAgICAgIGNsb2NrSW46IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgY2hlY2s6IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICAgICAgZmlyc3RDbG9ja0luOiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgIGxhc3RDbG9ja0luOiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgIHRvQXJyYXk6IChsZW5ndGg6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuW10+O1xuICAgICAgICBjb3VudDogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xuICAgICAgICBjbGVhbjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZGlzPFJlZGlzVCBleHRlbmRzIHsgUFNFVEVYOiBhbnk7IFNFVDogYW55O1tvdGhlcnM6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PihyZWRpc0NsaWVudDogUmVkaXNUKTogUHJvbWlzZTxNaWxraW9SZWRpczxSZWRpc1Q+PiB7XG4gICAgY29uc3QgcmVkaXMgPSByZWRpc0NsaWVudCBhcyBhbnk7XG5cbiAgICBjb25zdCBtaWxraW9SZWRpczogYW55ID0ge1xuICAgICAgICByZWRpcyxcbiAgICAgICAgdXNlQ2FjaGU6IDxUPihrZXk6IHN0cmluZywgb3B0aW9ucz86IE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+KSA9PiAoe1xuICAgICAgICAgICAgc2V0OiBhc3luYyAodmFsdWU6IFQsIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGlyZU1zID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOawuOS5heS/neWtmFxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQoa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIGFueSBhcyBzdHJpbmcpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWxsOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5HRVQoa2V5KS5ERUwoa2V5KS5FWEVDKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0UmF3WzBdO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlc3VsdCBhcyBhbnkgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzOiBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIHVzZUZldGNoOiA8T3B0aW9ucyBleHRlbmRzIE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPGFueT4+KGtleTogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlTXMgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5leHBpcmVNcyA8PSAwKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9ja0ludGVydmFsICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmxvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLmxvY2tJbnRlcnZhbCA8PSAwKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZWFsRXhwaXJlTXMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMucmVhbEV4cGlyZU1zIDw9IDApKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVhbEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbCBpZiBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3RGb3VuZEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbCBpZiBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA8PSBsb2NrSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb2NrSW50ZXJ2YWxcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmV0Y2ggIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZldGNoIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoYXM6IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmZXRjaDogYXN5bmMgKCk6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+PiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8g5aSE55CG5rC45LmF5L+d5a2Y55qE5oOF5Ya1XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsRXhwaXJlTXM6IG51bWJlciB8IG51bGwgPSBvcHRpb25zLnJlYWxFeHBpcmVNcyA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RGb3VuZEV4cGlyZU1zID0gb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsID8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpIDogODY0MDAwMDApOyAvLyDpu5jorqQx5aSpXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdFJhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXN1bHRSYXcgYXMgc3RyaW5nKSkgYXMgeyBUOiBudW1iZXI7IFI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB9KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5UID4gbm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IHJlZGlzLkVYSVNUUyhyZWZyZXNoTG9ja0tleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tLZXkgPSBgJHtrZXl9OmxvY2tgO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksIFwiMVwiLCB7IFBYOiBsb2NrSW50ZXJ2YWwsIE5YOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnb3RMb2NrID0gbG9ja1NldCA9PT0gXCJPS1wiO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZ290TG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4V2FpdFRpbWUgPSBsb2NrSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0SW50ZXJ2YWwgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3YWl0ZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHdhaXRlZCA8IG1heFdhaXRUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgd2FpdEludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVkICs9IHdhaXRJbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0ZWRSZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0ZWRSZXN1bHQgPSB3YWl0ZWRSZXN1bHRSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2Uod2FpdGVkUmVzdWx0UmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRlZFJlc3VsdCAmJiB3YWl0ZWRSZXN1bHQuVCA+IG5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2FpdGVkUmVzdWx0LlI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IHJlZGlzLkVYSVNUUyhsb2NrS2V5KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxSZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gZmluYWxSZXN1bHRSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZmluYWxSZXN1bHRSYXcgYXMgc3RyaW5nKSkgYXMgeyBUOiBudW1iZXI7IFI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB9KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5UID4gbm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsUmVzdWx0LlI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LlIgOiBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2hlY2tSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjaGVjayA9IHJlY2hlY2tSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVjaGVja1JhdyBhcyBzdHJpbmcpKSBhcyB7IFQ6IG51bWJlcjsgUjogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+IH0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNoZWNrICYmIHJlY2hlY2suVCA+IG5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY2hlY2suUjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj47XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYXdhaXQgb3B0aW9ucy5mZXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGxvY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyDorqHnrpfov4fmnJ/ml7bpl7RcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVmZmVjdGl2ZUV4cGlyZU1zOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVFeHBpcmVNcyA9IG9wdGlvbnMuZXhwaXJlTXMgKyAocmVhbEV4cGlyZU1zID8/IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6cIGV4cGlyZU1zIOS4uiBudWxs77yMZWZmZWN0aXZlRXhwaXJlTXMg5L+d5oyBIG51bGzvvIjmsLjkuYXkv53lrZjvvIlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUV4cGlyZU1zID0gbm90Rm91bmRFeHBpcmVNcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMuZXhwaXJlTXMgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIDogbm90Rm91bmRFeHBpcmVNcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBSOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrRXhpc3RzID0gYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnJlc2hMb2NrRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwobG9ja0tleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVFeHBpcmVNcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5rC45LmF5L+d5a2YXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlNFVChrZXksIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKS5ERUwobG9ja0tleSkuRVhFQygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuTVVMVEkoKS5QU0VURVgoa2V5LCBlZmZlY3RpdmVFeHBpcmVNcywgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLkRFTChsb2NrS2V5KS5FWEVDKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlZnJlc2g6IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrSW50ZXJ2YWwgPSBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPz8gKG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTIpICsgMTAyNDtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQocmVmcmVzaExvY2tLZXksIFwiMVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBQWDogcmVmcmVzaExvY2tJbnRlcnZhbCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGE6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwocmVmcmVzaExvY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyDlpITnkIbmsLjkuYXkv53lrZjnmoTmg4XlhrVcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxFeHBpcmVNczogbnVtYmVyIHwgbnVsbCA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFsRXhwaXJlTXMgPSBvcHRpb25zLnJlYWxFeHBpcmVNcyA/PyBNYXRoLmZsb29yKG9wdGlvbnMuZXhwaXJlTXMgKiAoTWF0aC5yYW5kb20oKSArIDAuNSkpICsgODE5MjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIOiuoeeul+i/h+acn+aXtumXtFxuICAgICAgICAgICAgICAgICAgICBsZXQgZWZmZWN0aXZlRXhwaXJlTXM6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUV4cGlyZU1zID0gb3B0aW9ucy5leHBpcmVNcyArIChyZWFsRXhwaXJlTXMgPz8gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpwgZXhwaXJlTXMg5Li6IG51bGzvvIxlZmZlY3RpdmVFeHBpcmVNcyDkv53mjIEgbnVsbO+8iOawuOS5heS/neWtmO+8iVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwgPyBNYXRoLm1pbihvcHRpb25zLmV4cGlyZU1zLCAxNjM4NCkgOiA4NjQwMDAwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgVDogbm93ICsgKGRhdGEgIT09IHVuZGVmaW5lZCA/IChvcHRpb25zLmV4cGlyZU1zID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSA6IChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwgPyBNYXRoLm1pbihvcHRpb25zLmV4cGlyZU1zLCAxNjM4NCkgOiA4NjQwMDAwMCkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFI6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVmZmVjdGl2ZUV4cGlyZU1zID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlNFVChrZXksIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGVmZmVjdGl2ZUV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGNsZWFuIHRoZSB1cGRhdGUgbG9jayEgSW5zdGVhZCwgd2FpdCBmb3IgaXQgdG8gZXhwaXJlIG5hdHVyYWxseVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHVzZUNvdW50OiAoa2V5OiBzdHJpbmcpID0+ICh7XG4gICAgICAgICAgICBnZXQ6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyBOdW1iZXIocmVzdWx0KSA6IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkOiBhc3luYyAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGlyZU1zID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOawuOS5heS/neWtmFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFleHBpcmVNcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5NVUxUSSgpLklOQ1JCWShrZXksIGFtb3VudCkuUEVYUElSRShrZXksIGV4cGlyZU1zKS5FWEVDKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0WzBdKSBhcyBudW1iZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1YjogYXN5bmMgKGFtb3VudDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5ERUNSQlkoa2V5LCBhbW91bnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgdXNlQ2xvY2tJbjogKGtleTogc3RyaW5nLCBjbGVhbkRhdGU6IERhdGUpID0+ICh7XG4gICAgICAgICAgICBjbG9ja0luOiBhc3luYyAob2Zmc2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlNFVEJJVChrZXksIG9mZnNldCwgMSkuUEVYUElSRUFUKGtleSwgY2xlYW5EYXRlLmdldFRpbWUoKSkuRVhFQygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoZWNrOiBhc3luYyAob2Zmc2V0OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVRCSVQoa2V5LCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT09IDE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlyc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5CSVRQT1Moa2V5LCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIG51bWJlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0Q2xvY2tJbjogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUUE9TKGtleSwgMSwgLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvQXJyYXk6IGFzeW5jIChsZW5ndGg6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbltdPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuQklURklFTEQoa2V5LCBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBgdSR7bGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFwiIzBcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBOdW1iZXIucGFyc2VJbnQoYCR7cmVzdWx0UmF3fWApLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGwgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aCAtIHJlc3VsdC5sZW5ndGg7IGkrKykgZmlsbC5wdXNoKFwiMFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmZpbGwsIC4uLnJlc3VsdF0ubWFwKCh2KSA9PiB2ID09PSBcIjFcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY291bnQ6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVENPVU5UKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYW46IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gbWlsa2lvUmVkaXM7XG59XG5cbmNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZpdmVKU09OUGFyc2U8VD4oanNvbjogVCk6IFQge1xuICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoanNvbiBpbnN0YW5jZW9mIERhdGUgfHwgKHR5cGVvZiAoanNvbiBhcyBhbnkpLmdldFRpbWUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIChqc29uIGFzIGFueSkudG9JU09TdHJpbmcgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFRdID0gcmV2aXZlSlNPTlBhcnNlKHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBqc29uID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKCc6JywgJycpfWAgOiBgJHttYXRjaFsxXX1aYDtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xuICAgIH1cbiAgfVxuICByZXR1cm4ganNvbjtcbn1cblxuXG5leHBvcnQgdHlwZSBSZWRpcyA9IE1pbGtpb1JlZGlzOyIKICBdLAogICJtYXBwaW5ncyI6ICI7QUE4Q0EsZUFBc0IsV0FBNkYsQ0FBQyxhQUFtRDtBQUFBLEVBQ25LLE1BQU0sUUFBUTtBQUFBLEVBRWQsTUFBTSxjQUFtQjtBQUFBLElBQ3JCO0FBQUEsSUFDQSxVQUFVLENBQUksS0FBYSxhQUEwQztBQUFBLE1BQ2pFLEtBQUssT0FBTyxPQUFVLGFBQXdDO0FBQUEsUUFDMUQsSUFBSSxhQUFhLE1BQU07QUFBQSxVQUVuQixNQUFNLE1BQU0sSUFBSSxLQUFLLEtBQUssVUFBVSxLQUFLLENBQUM7QUFB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
|