sliftutils 1.7.15 → 1.7.17
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 +8 -2
- package/misc/https/hostServer.d.ts +1 -1
- package/misc/https/hostServer.ts +33 -50
- package/package.json +2 -2
- package/storage/dist/ArchivesDisk.ts.cache +3 -2
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/dist/backblaze.ts.cache +10 -6
- package/storage/remoteStorage/createArchives.d.ts +6 -1
- package/storage/remoteStorage/createArchives.ts +263 -177
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +3 -2
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/blobStore.ts.cache +6 -5
- package/storage/remoteStorage/dist/createArchives.ts.cache +295 -206
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +6 -7
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +10 -2
- package/storage/remoteStorage/dist/storageServerState.ts.cache +3 -2
- package/storage/remoteStorage/sourceWrapper.d.ts +1 -0
- package/storage/remoteStorage/sourceWrapper.ts +8 -0
- package/yarn.lock +4 -4
|
@@ -263,22 +263,21 @@ async function recompute() {
|
|
|
263
263
|
scheduleEvents();
|
|
264
264
|
emit("remapChanged");
|
|
265
265
|
}
|
|
266
|
-
/** Starts the takeover machinery.
|
|
267
|
-
*
|
|
268
|
-
*
|
|
266
|
+
/** Starts the takeover machinery. Port fallback (alternate port + registry + acquisition polling)
|
|
267
|
+
* works regardless; without a deploy timeline folder the switchover-specific parts (the remap,
|
|
268
|
+
* the flush deadline, the tighter acquisition pacing) simply stay inert. */
|
|
269
269
|
async function initDeployTakeover(config) {
|
|
270
270
|
var _a, _b;
|
|
271
271
|
initialized = config;
|
|
272
272
|
ancestorPids = await getAncestorPids();
|
|
273
273
|
timelineFolder = await findTimelineFolder();
|
|
274
274
|
if (!timelineFolder)
|
|
275
|
-
return
|
|
275
|
+
return;
|
|
276
276
|
await recompute();
|
|
277
277
|
let poll = setInterval(() => {
|
|
278
278
|
void recompute().catch((e) => { var _a; return console.error(`Deploy takeover recompute failed: ${(_a = e.stack) !== null && _a !== void 0 ? _a : e}`); });
|
|
279
279
|
}, TIMELINE_POLL_INTERVAL);
|
|
280
280
|
(_b = (_a = poll).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
281
|
-
return true;
|
|
282
281
|
}
|
|
283
282
|
exports.initDeployTakeover = initDeployTakeover;
|
|
284
283
|
/** Called when we had to listen on an alternate port (the main port was still held by our
|
|
@@ -367,5 +366,5 @@ function getMainPortAcquireDelay() {
|
|
|
367
366
|
return ACQUIRE_SLOW_DELAY;
|
|
368
367
|
}
|
|
369
368
|
exports.getMainPortAcquireDelay = getMainPortAcquireDelay;
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95VGFrZW92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3lUYWtlb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGlEQUFxQztBQUVyQyxpREFBc0U7QUFFdEUsaUdBQWlHO0FBQ2pHLGlHQUFpRztBQUNqRyxrR0FBa0c7QUFDbEcsOEZBQThGO0FBQzlGLCtGQUErRjtBQUMvRixpR0FBaUc7QUFDakcsbUdBQW1HO0FBQ25HLDBGQUEwRjtBQUMxRixrR0FBa0c7QUFDbEcsK0ZBQStGO0FBQy9GLEVBQUU7QUFDRixpR0FBaUc7QUFDakcsZ0dBQWdHO0FBQ2hHLGlDQUFpQztBQUVqQyxNQUFNLDhCQUE4QixHQUFHLDBCQUEwQixDQUFDO0FBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0FBQ3JELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QyxtR0FBbUc7QUFDbkcsK0ZBQStGO0FBQy9GLDhEQUE4RDtBQUM5RCxNQUFNLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDO0FBQ3hELG1HQUFtRztBQUNuRyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxrR0FBa0c7QUFDbEcsOEZBQThGO0FBQzlGLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNuQyw2RkFBNkY7QUFDN0YsOEZBQThGO0FBQzlGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0scUJBQXFCLEdB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S0FBSyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLHVCQUF1QixDQUFDO0FBQzFFLENBQUM7QUFKRCw0Q0FJQztBQUVEO3lFQUN5RTtBQUN6RSxTQUFnQix1QkFBdUI7SUFDbkMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUNqQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN6RSxPQUFPLGtCQUFrQixDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDO0FBQzlCLENBQUM7QUFORCwwREFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFJlbW90ZUNvbmZpZywgUmVtb3RlQ29uZmlnQmFzZSwgSG9zdGVkQ29uZmlnIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgcGFyc2VIb3N0ZWRVcmwsIHJlcGxhY2VIb3N0ZWRVcmxQb3J0IH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5cbi8vIERlcGxveSB0YWtlb3ZlcjogdGhlIGRlcGxveSBtYW5hZ2VyIChxdWVyeXN1YidzIHBhcmFtZXRlcnNUaW1lbGluZSkgd3JpdGVzIDxuPi1wYXJhbWV0ZXJzLmpzb25cbi8vIGZpbGVzIGludG8gb3VyIGluc3RhbmNlIGZvbGRlciBkZXNjcmliaW5nIHdoZW4gZWFjaCB2ZXJzaW9uIHJ1bnMgYW5kIHdoZW4gaXQgaXMgc2h1dCBkb3duLiBPbGRcbi8vIGFuZCBuZXcgdmVyc2lvbiBvdmVybGFwIGZvciB0aGUgb3ZlcmxhcCB0aW1lIChPID0gb2xkRW5kIC0gbmV3U3RhcnQpLiBXZSB0dXJuIHRoYXQgb3ZlcmxhcCBpbnRvXG4vLyBhbiBhdG9taWMgd3JpdGUgaGFuZG9mZiBieSBSRUlOVEVSUFJFVElORyBldmVyeSByb3V0aW5nIHNvdXJjZSB0aGF0IHBvaW50cyBhdCB1czogaXRzIHZhbGlkXG4vLyB3aW5kb3cgaXMgc3BsaXQgc28gdGhhdCB0aGUgbWlkZGxlIG9mIHRoZSBvdmVybGFwIChbUyArIDAuNSpPLCBTICsgMS41Kk9dKSBwb2ludHMgYXQgdGhlIG5ld1xuLy8gcHJvY2VzcydzIHRlbXBvcmFyeSBhbHRlcm5hdGUgcG9ydC4gVGhlIGV4aXN0aW5nIHZhbGlkLXdpbmRvdyBtYWNoaW5lcnkgdGhlbiBkb2VzIGV2ZXJ5dGhpbmcgLVxuLy8gdGhlIG9sZCBwcm9jZXNzIHN0YXJ0cyByZWplY3RpbmcgZnJlc2ggd3JpdGVzIGF0IHRoZSBmaXJzdCBib3VuZGFyeSwgY2xpZW50cyByZS1yZXNvbHZlLCBhbmQgdGhlXG4vLyBuZXcgcHJvY2VzcyAod2hpY2ggcmVjb2duaXplcyB0aGUgYWx0ZXJuYXRlIHBvcnQgYXMgaXRzZWxmKSB0YWtlcyBvdmVyLiBUaGUgcmVtYXAgaXMgYW5cbi8vIElOVEVSUFJFVEFUSU9OIE9WRVJMQVksIGFwcGxpZWQgd2hlcmUgcm91dGluZyBjb25maWdzIGFyZSB1c2VkIChzZWUgYXBwbHlEZXBsb3lSZW1hcCBjYWxsZXJzKSAtXG4vLyBpdCBpcyBuZXZlciB3cml0dGVuIHRvIGRpc2ssIG5ldmVyIHN5bmNocm9uaXplZCwgYW5kIG5ldmVyIHBhcnQgb2YgYW55IHN0b3JlZCBjb25maWd1cmF0aW9uLlxuLy9cbi8vIEV2ZXJ5dGhpbmcgaGVyZSBpcyByZWNvbXB1dGVkIGlkZW1wb3RlbnRseSBmcm9tIGl0cyBpbnB1dHMgKHRpbWVsaW5lIGZpbGVzLCB0aGUgcG9ydCByZWdpc3RyeSxcbi8vIG91ciBhbmNlc3RvciBwaWRzLCB0aGUgY2xvY2spIC0gZmlsZXMgY2FuIGFwcGVhciBvciBjaGFuZ2UgYXQgYW55IG1vbWVudCwgYW5kIHdlIGNhbiBzdGFydCBhdFxuLy8gYW55IHBvaW50IGR1cmluZyBhIHN3aXRjaG92ZXIuXG5cbmNvbnN0IFBBUkFNRVRFUlNfVElNRUxJTkVfRklMRV9SRUdFWCA9IC9eKFxcZCspLXBhcmFtZXRlcnNcXC5qc29uJC87XG5jb25zdCBBTElWRV9XSU5ET1dfRk9SRVZFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuY29uc3QgVElNRUxJTkVfUE9MTF9JTlRFUlZBTCA9IDYwICogMTAwMDtcbi8vIFByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gYW4gYWx0ZXJuYXRlIHBvcnQgcmVnaXN0ZXIgaXQgaGVyZSAoc2libGluZyBvZiB0aGUgc3RvcmFnZSBmb2xkZXIpLCBrZXllZFxuLy8gYnkgdGhlaXIgYWN0dWFsIHBpZDsgY29udGVudCBpbmNsdWRlcyB0aGVpciBhbmNlc3RvciBwaWRzIHNvIHRoZSB0aW1lbGluZSBlbnRyeSBwaWQgKGEgc2hlbGxcbi8vIGFuY2VzdG9yIG9mIHRoZSBwcm9jZXNzKSBjYW4gYmUgbWF0Y2hlZCB0byBhIHJlZ2lzdHJ5IGVudHJ5XG5jb25zdCBQT1JUX1JFR0lTVFJZX0ZPTERFUl9OQU1FID0gXCJzdG9yYWdlUG9ydFJlZ2lzdHJ5XCI7XG4vLyBNYWluLXBvcnQgYWNxdWlzaXRpb24gYXR0ZW1wdHMgcnVuIHRoaXMgb2Z0ZW4sIHRpZ2h0ZW5pbmcgbmVhciB0aGUgcHJlZGVjZXNzb3IncyBzY2hlZHVsZWQgZGVhdGhcbmNvbnN0IEFDUVVJUkVfU0xPV19ERUxBWSA9IDMwICogMTAwMDtcbmNvbnN0IEFDUVVJUkVfRkFTVF9ERUxBWSA9IDUgKiAxMDAwO1xuY29uc3QgQUNRVUlSRV9GQVNUX1dJTkRPVyA9IDYwICogMTAwMDtcbi8vIERpc2sgcmVzY2FucyBmaXJlIHRoaXMgZmFyIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdyaXRlIGhhbmRvZmYsIGNhdGNoaW5nIGZpbGVzIHRoZSBvdGhlciBwcm9jZXNzXG4vLyB3cm90ZSAodGhlIEJ1bGtEYXRhYmFzZTIgaW5kZXggaXMgYXRvbWljIGJ1dCBpdHMgZW50cmllcyBsYW5kIGF0IHdyaXRlIHRpbWUsIG5vdCBmaWxlIHRpbWUpXG5jb25zdCBTV0lUQ0hfU0NBTl9MRUFEID0gMTAgKiAxMDAwO1xuLy8gVGhlIGR5aW5nIHByb2Nlc3MgbXVzdCBoYXZlIGZsdXNoZWQgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGhhbmRvZmY6IGZhc3Qtd3JpdGUgZGVsYXlzIG5ldmVyXG4vLyBleHRlbmQgcGFzdCBTICsgb3ZlcmxhcCAqIHRoaXMgZnJhY3Rpb24sIGFuZCBhZnRlciB0aGF0IHBvaW50IGZhc3Qgd3JpdGVzIGZsdXNoIGltbWVkaWF0ZWx5XG5jb25zdCBGTFVTSF9ERUFETElORV9GUkFDVElPTiA9IDAuMjU7XG5jb25zdCBCT1VOREFSWV9BX0ZSQUNUSU9OID0gMC41O1xuY29uc3QgQk9VTkRBUllfQl9GUkFDVElPTiA9IDEuNTtcbmNvbnN0IFJFTUFQX0VYUElSRV9GUkFDVElPTiA9IDI7XG5cbnR5cGUgVGltZWxpbmVFbnRyeSA9IHtcbiAgICBwaWQ/OiBudW1iZXI7XG4gICAgYWxpdmVXaW5kb3c6IFtudW1iZXIsIG51bWJlcl07XG4gICAgcGFyYW1ldGVyczogdW5rbm93bjtcbn07XG5cbnR5cGUgVGFrZW92ZXJDb21wdXRlZCA9IHtcbiAgICAvLyBXZSBhcmUgc2NoZWR1bGVkIHRvIGRpZSB3aXRoIGEgc3VjY2Vzc29yIG92ZXJsYXBwaW5nIHVzIChrbm93biBmcm9tIHRoZSBmaWxlcyBhbG9uZSwgYmVmb3JlXG4gICAgLy8gdGhlIHN1Y2Nlc3NvcidzIHBvcnQgaXMgZGlzY292ZXJlZCAtIHRoZSBmbHVzaCBkZWFkbGluZSBhcHBsaWVzIGltbWVkaWF0ZWx5KVxuICAgIGR5aW5nPzogeyBzdWNjZXNzb3JTdGFydDogbnVtYmVyOyBvdmVybGFwOiBudW1iZXIgfTtcbiAgICAvLyBUaGUgd2luZG93IHJlaW50ZXJwcmV0YXRpb24sIG9uY2UgdGhlIG1pZGRsZSB3aW5kb3cncyBwb3J0IGlzIGtub3duICh0aGUgc3VjY2Vzc29yJ3NcbiAgICAvLyByZWdpc3RlcmVkIGFsdGVybmF0ZSBwb3J0IC0gb3Igb3VyIG93biwgd2hlbiB3ZSBBUkUgdGhlIHN1Y2Nlc3NvcilcbiAgICByZW1hcD86IHsgYm91bmRhcnlBOiBudW1iZXI7IGJvdW5kYXJ5QjogbnVtYmVyOyBleHBpcmU6IG51bWJlcjsgYWx0UG9ydDogbnVtYmVyIH07XG4gICAgLy8gV2hlbiBvdXIgcHJlZGVjZXNzb3IgZGllcyBhbmQgZnJlZXMgdGhlIG1haW4gcG9ydCAoZm9yIGFjcXVpc2l0aW9uIHBhY2luZylcbiAgICBwcmVkZWNlc3NvckVuZD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRha2VvdmVyRXZlbnQgPSBcInJlbWFwQ2hhbmdlZFwiIHwgXCJkaXNrU2NhblwiO1xuXG5sZXQgaW5pdGlhbGl6ZWQ6IHsgZG9tYWluOiBzdHJpbmc7IG1haW5Qb3J0OiBudW1iZXI7IHN0b3JhZ2VGb2xkZXI6IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xubGV0IGFuY2VzdG9yUGlkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xubGV0IHRpbWVsaW5lRm9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5sZXQgb3VyQWx0UG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkO1xubGV0IGN1cnJlbnQ6IFRha2VvdmVyQ29tcHV0ZWQgPSB7fTtcbmxldCBjdXJyZW50S2V5ID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudCk7XG5sZXQgZXZlbnRMaXN0ZW5lcnM6ICgoZXZlbnQ6IFRha2VvdmVyRXZlbnQpID0+IHZvaWQpW10gPSBbXTtcbmxldCBldmVudFRpbWVyczogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5bXSA9IFtdO1xuXG5mdW5jdGlvbiBleGVjVGV4dChjb21tYW5kOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGV4ZWMoY29tbWFuZCwgKGVycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLy8gVGhlIHRpbWVsaW5lIGVudHJ5IHBpZCBpcyB0aGUgc2NyZWVuIHNoZWxsIHRoYXQgc3Bhd25lZCB1cyAtIGFuIGFuY2VzdG9yIC0gc28gd2Ugd2FsayBvdXIgd2hvbGVcbi8vIGFuY2VzdG9yIGNoYWluIHRvIGZpbmQgd2hpY2ggZW50cnkgaXMgdXNcbmFzeW5jIGZ1bmN0aW9uIGdldEFuY2VzdG9yUGlkcygpOiBQcm9taXNlPFNldDxudW1iZXI+PiB7XG4gICAgbGV0IHBpZHMgPSBuZXcgU2V0PG51bWJlcj4oW3Byb2Nlc3MucGlkXSk7XG4gICAgbGV0IGN1cnJlbnRQaWQgPSBwcm9jZXNzLnBpZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBsZXQgcHBpZDogbnVtYmVyO1xuICAgICAgICBpZiAoY3VycmVudFBpZCA9PT0gcHJvY2Vzcy5waWQgJiYgcHJvY2Vzcy5wcGlkKSB7XG4gICAgICAgICAgICBwcGlkID0gcHJvY2Vzcy5wcGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwcGlkID0gcGFyc2VJbnQoKGF3YWl0IGV4ZWNUZXh0KGBwcyAtbyBwcGlkPSAtcCAke2N1cnJlbnRQaWR9YCkpLnRyaW0oKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBwaWQgfHwgTnVtYmVyLmlzTmFOKHBwaWQpIHx8IHBwaWQgPD0gMSB8fCBwaWRzLmhhcyhwcGlkKSkgYnJlYWs7XG4gICAgICAgIHBpZHMuYWRkKHBwaWQpO1xuICAgICAgICBjdXJyZW50UGlkID0gcHBpZDtcbiAgICB9XG4gICAgcmV0dXJuIHBpZHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRUaW1lbGluZUZvbGRlcigpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbGVzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihkaXIpO1xuICAgICAgICB9IGNhdGNoIHsgfVxuICAgICAgICBpZiAoZmlsZXMuc29tZShmaWxlID0+IFBBUkFNRVRFUlNfVElNRUxJTkVfRklMRV9SRUdFWC50ZXN0KGZpbGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRpci5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikgKyBcIi9cIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyZW50ID0gcGF0aC5kaXJuYW1lKGRpcik7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IGRpcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgZGlyID0gcGFyZW50O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGlkQWxpdmUocGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBwcm9jZXNzLmtpbGwocGlkLCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gKGUgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGUgPT09IFwiRVBFUk1cIjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdHJ5Rm9sZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlcGxveSB0YWtlb3ZlciBpcyBub3QgaW5pdGlhbGl6ZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbihwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKGluaXRpYWxpemVkLnN0b3JhZ2VGb2xkZXIpKSwgUE9SVF9SRUdJU1RSWV9GT0xERVJfTkFNRSk7XG59XG5cbnR5cGUgUmVnaXN0cnlFbnRyeSA9IHsgcGlkOiBudW1iZXI7IHBvcnQ6IG51bWJlcjsgYW5jZXN0b3JQaWRzOiBudW1iZXJbXSB9O1xuXG5hc3luYyBmdW5jdGlvbiByZWFkUG9ydFJlZ2lzdHJ5KCk6IFByb21pc2U8UmVnaXN0cnlFbnRyeVtdPiB7XG4gICAgbGV0IGZvbGRlciA9IGdldFJlZ2lzdHJ5Rm9sZGVyKCk7XG4gICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICAgIGZpbGVzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihmb2xkZXIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGxldCBlbnRyaWVzOiBSZWdpc3RyeUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGxldCBtYXRjaCA9IC9eKFxcZCspXFwuanNvbiQvLmV4ZWMoZmlsZSk7XG4gICAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgcGlkID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIXBpZEFsaXZlKHBpZCkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKHBhdGguam9pbihmb2xkZXIsIGZpbGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gSlNPTi5wYXJzZShhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoLmpvaW4oZm9sZGVyLCBmaWxlKSwgXCJ1dGY4XCIpKSBhcyBSZWdpc3RyeUVudHJ5O1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHsgLi4uZW50cnksIHBpZCB9KTtcbiAgICAgICAgfSBjYXRjaCB7IH1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRUaW1lbGluZUVudHJpZXMoKTogUHJvbWlzZTxUaW1lbGluZUVudHJ5W10+IHtcbiAgICBpZiAoIXRpbWVsaW5lRm9sZGVyKSByZXR1cm4gW107XG4gICAgbGV0IGVudHJpZXM6IFRpbWVsaW5lRW50cnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGZpbGUgb2YgYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcih0aW1lbGluZUZvbGRlcikpIHtcbiAgICAgICAgaWYgKCFQQVJBTUVURVJTX1RJTUVMSU5FX0ZJTEVfUkVHRVgudGVzdChmaWxlKSkgY29udGludWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goSlNPTi5wYXJzZShhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZSh0aW1lbGluZUZvbGRlciArIGZpbGUsIFwidXRmOFwiKSkgYXMgVGltZWxpbmVFbnRyeSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IHJlYWQgZGVwbG95IHRpbWVsaW5lIGZpbGUgJHt0aW1lbGluZUZvbGRlciArIGZpbGV9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufVxuXG5mdW5jdGlvbiBtYWtlUmVtYXAoc3VjY2Vzc29yU3RhcnQ6IG51bWJlciwgb3ZlcmxhcDogbnVtYmVyLCBhbHRQb3J0OiBudW1iZXIpOiBUYWtlb3ZlckNvbXB1dGVkW1wicmVtYXBcIl0ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJvdW5kYXJ5QTogc3VjY2Vzc29yU3RhcnQgKyBvdmVybGFwICogQk9VTkRBUllfQV9GUkFDVElPTixcbiAgICAgICAgYm91bmRhcnlCOiBzdWNjZXNzb3JTdGFydCArIG92ZXJsYXAgKiBCT1VOREFSWV9CX0ZSQUNUSU9OLFxuICAgICAgICBleHBpcmU6IHN1Y2Nlc3NvclN0YXJ0ICsgb3ZlcmxhcCAqIFJFTUFQX0VYUElSRV9GUkFDVElPTixcbiAgICAgICAgYWx0UG9ydCxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBlbWl0KGV2ZW50OiBUYWtlb3ZlckV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRGVwbG95IHRha2VvdmVyIGxpc3RlbmVyIGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVFdmVudHMoKTogdm9pZCB7XG4gICAgZm9yIChsZXQgdGltZXIgb2YgZXZlbnRUaW1lcnMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gICAgZXZlbnRUaW1lcnMgPSBbXTtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgc2NoZWR1bGUgPSAodGltZTogbnVtYmVyLCBmbmM6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaWYgKHRpbWUgPD0gbm93KSByZXR1cm47XG4gICAgICAgIGxldCB0aW1lciA9IHNldFRpbWVvdXQoZm5jLCB0aW1lIC0gbm93KTtcbiAgICAgICAgKHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICAgICAgZXZlbnRUaW1lcnMucHVzaCh0aW1lcik7XG4gICAgfTtcbiAgICBsZXQgcmVtYXAgPSBjdXJyZW50LnJlbWFwO1xuICAgIGlmIChyZW1hcCkge1xuICAgICAgICBzY2hlZHVsZShyZW1hcC5ib3VuZGFyeUEgLSBTV0lUQ0hfU0NBTl9MRUFELCAoKSA9PiBlbWl0KFwiZGlza1NjYW5cIikpO1xuICAgICAgICBzY2hlZHVsZShyZW1hcC5ib3VuZGFyeUEgKyBTV0lUQ0hfU0NBTl9MRUFELCAoKSA9PiBlbWl0KFwiZGlza1NjYW5cIikpO1xuICAgICAgICBzY2hlZHVsZShyZW1hcC5leHBpcmUsICgpID0+IHZvaWQgcmVjb21wdXRlKCkuY2F0Y2goKGU6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGBEZXBsb3kgdGFrZW92ZXIgcmVjb21wdXRlIGZhaWxlZDogJHtlLnN0YWNrID8/IGV9YCkpKTtcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlY29tcHV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWluaXRpYWxpemVkIHx8ICF0aW1lbGluZUZvbGRlcikgcmV0dXJuO1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBlbnRyaWVzID0gYXdhaXQgcmVhZFRpbWVsaW5lRW50cmllcygpO1xuICAgIGxldCByZWdpc3RyeSA9IGF3YWl0IHJlYWRQb3J0UmVnaXN0cnkoKTtcbiAgICBsZXQgdXM6IFRpbWVsaW5lRW50cnkgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoZW50cnkucGlkICYmIGFuY2VzdG9yUGlkcy5oYXMoZW50cnkucGlkKSkge1xuICAgICAgICAgICAgdXMgPSBlbnRyeTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgY29tcHV0ZWQ6IFRha2VvdmVyQ29tcHV0ZWQgPSB7fTtcbiAgICBpZiAodXMpIHtcbiAgICAgICAgbGV0IHVzU3RhcnQgPSB1cy5hbGl2ZVdpbmRvd1swXTtcbiAgICAgICAgbGV0IG5leHQ6IFRpbWVsaW5lRW50cnkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwcmV2OiBUaW1lbGluZUVudHJ5IHwgdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgPT09IHVzKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChlbnRyeS5hbGl2ZVdpbmRvd1swXSA+IHVzU3RhcnQgJiYgKCFuZXh0IHx8IGVudHJ5LmFsaXZlV2luZG93WzBdIDwgbmV4dC5hbGl2ZVdpbmRvd1swXSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gZW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW50cnkuYWxpdmVXaW5kb3dbMF0gPCB1c1N0YXJ0ICYmICghcHJldiB8fCBlbnRyeS5hbGl2ZVdpbmRvd1swXSA+IHByZXYuYWxpdmVXaW5kb3dbMF0pKSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0ICYmIHVzLmFsaXZlV2luZG93WzFdICE9PSBBTElWRV9XSU5ET1dfRk9SRVZFUiAmJiBuZXh0LmFsaXZlV2luZG93WzBdIDw9IHVzLmFsaXZlV2luZG93WzFdKSB7XG4gICAgICAgICAgICBsZXQgb3ZlcmxhcCA9IHVzLmFsaXZlV2luZG93WzFdIC0gbmV4dC5hbGl2ZVdpbmRvd1swXTtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzb3JTdGFydCA9IG5leHQuYWxpdmVXaW5kb3dbMF07XG4gICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgbm93IDwgc3VjY2Vzc29yU3RhcnQgKyBvdmVybGFwICogUkVNQVBfRVhQSVJFX0ZSQUNUSU9OKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWQuZHlpbmcgPSB7IHN1Y2Nlc3NvclN0YXJ0LCBvdmVybGFwIH07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc29yUGlkID0gbmV4dC5waWQ7XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvclBpZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3VjY2Vzc29yRW50cnkgPSByZWdpc3RyeS5maW5kKHggPT4geC5hbmNlc3RvclBpZHMuaW5jbHVkZXMoc3VjY2Vzc29yUGlkKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3JFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQucmVtYXAgPSBtYWtlUmVtYXAoc3VjY2Vzc29yU3RhcnQsIG92ZXJsYXAsIHN1Y2Nlc3NvckVudHJ5LnBvcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYuYWxpdmVXaW5kb3dbMV0gPiB1c1N0YXJ0KSB7XG4gICAgICAgICAgICBsZXQgb3ZlcmxhcCA9IHByZXYuYWxpdmVXaW5kb3dbMV0gLSB1c1N0YXJ0O1xuICAgICAgICAgICAgY29tcHV0ZWQucHJlZGVjZXNzb3JFbmQgPSBwcmV2LmFsaXZlV2luZG93WzFdO1xuICAgICAgICAgICAgaWYgKG92ZXJsYXAgPiAwICYmIG91ckFsdFBvcnQgJiYgbm93IDwgdXNTdGFydCArIG92ZXJsYXAgKiBSRU1BUF9FWFBJUkVfRlJBQ1RJT04gJiYgIWNvbXB1dGVkLnJlbWFwKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWQucmVtYXAgPSBtYWtlUmVtYXAodXNTdGFydCwgb3ZlcmxhcCwgb3VyQWx0UG9ydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGtleSA9IEpTT04uc3RyaW5naWZ5KGNvbXB1dGVkKTtcbiAgICBpZiAoa2V5ID09PSBjdXJyZW50S2V5KSByZXR1cm47XG4gICAgY3VycmVudCA9IGNvbXB1dGVkO1xuICAgIGN1cnJlbnRLZXkgPSBrZXk7XG4gICAgY29uc29sZS5sb2coYERlcGxveSB0YWtlb3ZlciBzdGF0ZSBjaGFuZ2VkOiAke2tleX1gKTtcbiAgICBzY2hlZHVsZUV2ZW50cygpO1xuICAgIGVtaXQoXCJyZW1hcENoYW5nZWRcIik7XG59XG5cbi8qKiBTdGFydHMgdGhlIHRha2VvdmVyIG1hY2hpbmVyeS4gUmV0dXJucyB3aGV0aGVyIGEgZGVwbG95IHRpbWVsaW5lIGV4aXN0cyAtIHdoZW4gaXQgZG9lc24ndCxcbiAqICBldmVyeXRoaW5nIGhlcmUgc3RheXMgaW5lcnQgKGFuZCB0aGUgY2FsbGVyIG11c3QgTk9UIGZhbGwgYmFjayB0byBhbHRlcm5hdGUgcG9ydHMsIHNpbmNlIGEgYnVzeVxuICogIHBvcnQgdGhlbiBtZWFucyBhIHJlYWwgbWlzY29uZmlndXJhdGlvbiwgbm90IGEgZGVwbG95KS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0RGVwbG95VGFrZW92ZXIoY29uZmlnOiB7IGRvbWFpbjogc3RyaW5nOyBtYWluUG9ydDogbnVtYmVyOyBzdG9yYWdlRm9sZGVyOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGluaXRpYWxpemVkID0gY29uZmlnO1xuICAgIGFuY2VzdG9yUGlkcyA9IGF3YWl0IGdldEFuY2VzdG9yUGlkcygpO1xuICAgIHRpbWVsaW5lRm9sZGVyID0gYXdhaXQgZmluZFRpbWVsaW5lRm9sZGVyKCk7XG4gICAgaWYgKCF0aW1lbGluZUZvbGRlcikgcmV0dXJuIGZhbHNlO1xuICAgIGF3YWl0IHJlY29tcHV0ZSgpO1xuICAgIGxldCBwb2xsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB2b2lkIHJlY29tcHV0ZSgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgRGVwbG95IHRha2VvdmVyIHJlY29tcHV0ZSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICB9LCBUSU1FTElORV9QT0xMX0lOVEVSVkFMKTtcbiAgICAocG9sbCBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDYWxsZWQgd2hlbiB3ZSBoYWQgdG8gbGlzdGVuIG9uIGFuIGFsdGVybmF0ZSBwb3J0ICh0aGUgbWFpbiBwb3J0IHdhcyBzdGlsbCBoZWxkIGJ5IG91clxuICogIHByZWRlY2Vzc29yKTogcmVnaXN0ZXJzIGl0IHNvIHRoZSBwcmVkZWNlc3NvciBjYW4gcm91dGUgdGhlIG1pZGRsZSBvdmVybGFwIHdpbmRvdyB0byB1cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlckFsdFBvcnQocG9ydDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgb3VyQWx0UG9ydCA9IHBvcnQ7XG4gICAgbGV0IGZvbGRlciA9IGdldFJlZ2lzdHJ5Rm9sZGVyKCk7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIoZm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgZW50cnk6IFJlZ2lzdHJ5RW50cnkgPSB7IHBpZDogcHJvY2Vzcy5waWQsIHBvcnQsIGFuY2VzdG9yUGlkczogWy4uLmFuY2VzdG9yUGlkc10gfTtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUocGF0aC5qb2luKGZvbGRlciwgYCR7cHJvY2Vzcy5waWR9Lmpzb25gKSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTtcbiAgICBhd2FpdCByZWNvbXB1dGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uVGFrZW92ZXJFdmVudChsaXN0ZW5lcjogKGV2ZW50OiBUYWtlb3ZlckV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgZXZlbnRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59XG5cbi8qKiBUaGUgaW50ZXJwcmV0YXRpb24gb3ZlcmxheTogc3BsaXRzIGV2ZXJ5IHNvdXJjZSBwb2ludGluZyBhdCBvdXIgZG9tYWluK21haW4gcG9ydCBzbyB0aGUgbWlkZGxlXG4gKiAgb2YgdGhlIGRlcGxveSBvdmVybGFwIHBvaW50cyBhdCB0aGUgYWx0ZXJuYXRlIHBvcnQuIFB1cmUsIGluLW1lbW9yeSBvbmx5IC0gdGhlIHN0b3JlZCByb3V0aW5nXG4gKiAgY29uZmlnIGlzIG5ldmVyIG1vZGlmaWVkLCBhbmQgdGhpcyBtdXN0IG5ldmVyIGJlIGFwcGxpZWQgdG8gZGF0YSB0aGF0IGdldHMgcGVyc2lzdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RGVwbG95UmVtYXAocm91dGluZzogUmVtb3RlQ29uZmlnKTogUmVtb3RlQ29uZmlnIHtcbiAgICBsZXQgcmVtYXAgPSBjdXJyZW50LnJlbWFwO1xuICAgIGxldCBpbml0ID0gaW5pdGlhbGl6ZWQ7XG4gICAgaWYgKCFyZW1hcCB8fCAhaW5pdCkgcmV0dXJuIHJvdXRpbmc7XG4gICAgbGV0IHNvdXJjZXM6IFJlbW90ZUNvbmZpZ0Jhc2VbXSA9IFtdO1xuICAgIGxldCBzbGljZSA9IChzb3VyY2U6IEhvc3RlZENvbmZpZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHVybD86IHN0cmluZyk6IEhvc3RlZENvbmZpZyA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnNvdXJjZSwgdXJsOiB1cmwgfHwgc291cmNlLnVybCwgdmFsaWRXaW5kb3c6IFtzdGFydCwgZW5kXSB9O1xuICAgIH07XG4gICAgZm9yIChsZXQgc291cmNlIG9mIHJvdXRpbmcuc291cmNlcykge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIiB8fCBzb3VyY2UudHlwZSAhPT0gXCJyZW1vdGVcIikge1xuICAgICAgICAgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyc2VkOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBwYXJzZUhvc3RlZFVybChzb3VyY2UudXJsKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWQuYWRkcmVzcyAhPT0gaW5pdC5kb21haW4gfHwgcGFyc2VkLnBvcnQgIT09IGluaXQubWFpblBvcnQpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IFtzdGFydCwgZW5kXSA9IHNvdXJjZS52YWxpZFdpbmRvdztcbiAgICAgICAgbGV0IGEgPSBNYXRoLm1heChzdGFydCwgTWF0aC5taW4ocmVtYXAuYm91bmRhcnlBLCBlbmQpKTtcbiAgICAgICAgbGV0IGIgPSBNYXRoLm1heChzdGFydCwgTWF0aC5taW4ocmVtYXAuYm91bmRhcnlCLCBlbmQpKTtcbiAgICAgICAgbGV0IGFkZGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChhID4gc3RhcnQpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChzbGljZShzb3VyY2UsIHN0YXJ0LCBhKSk7XG4gICAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgPiBhKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc2xpY2Uoc291cmNlLCBhLCBiLCByZXBsYWNlSG9zdGVkVXJsUG9ydChzb3VyY2UudXJsLCByZW1hcC5hbHRQb3J0KSkpO1xuICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQgPiBiKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc2xpY2Uoc291cmNlLCBiLCBlbmQpKTtcbiAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFkZGVkKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2ZXJzaW9uOiByb3V0aW5nLnZlcnNpb24sIHNvdXJjZXMgfTtcbn1cblxuLyoqIEZvciB0aGUgZHlpbmcgcHJvY2VzczogZmFzdC13cml0ZSBmbHVzaCBkZWxheXMgbXVzdCBuZXZlciBleHRlbmQgcGFzdCB0aGlzIHRpbWUsIGFuZCBhZnRlciBpdFxuICogIGZhc3Qgd3JpdGVzIGZsdXNoIGltbWVkaWF0ZWx5IC0gc28gbm90aGluZyBpcyBsZWZ0IGluIG1lbW9yeSB3aGVuIHRoZSB3cml0ZSB3aW5kb3cgdHJhbnNmZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsdXNoRGVhZGxpbmUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZHlpbmcgPSBjdXJyZW50LmR5aW5nO1xuICAgIGlmICghZHlpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGR5aW5nLnN1Y2Nlc3NvclN0YXJ0ICsgZHlpbmcub3ZlcmxhcCAqIEZMVVNIX0RFQURMSU5FX0ZSQUNUSU9OO1xufVxuXG4vKiogSG93IGxvbmcgdG8gd2FpdCBiZXR3ZWVuIG1haW4tcG9ydCBhY3F1aXNpdGlvbiBhdHRlbXB0czogdGlnaHQgYXJvdW5kIHRoZSBwcmVkZWNlc3NvcidzXG4gKiAgc2NoZWR1bGVkIGRlYXRoICh3aGVuIHRoZSBwb3J0IGFjdHVhbGx5IGZyZWVzKSwgcmVsYXhlZCBvdGhlcndpc2UuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpblBvcnRBY3F1aXJlRGVsYXkoKTogbnVtYmVyIHtcbiAgICBsZXQgZW5kID0gY3VycmVudC5wcmVkZWNlc3NvckVuZDtcbiAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQgJiYgTWF0aC5hYnMoRGF0ZS5ub3coKSAtIGVuZCkgPD0gQUNRVUlSRV9GQVNUX1dJTkRPVykge1xuICAgICAgICByZXR1cm4gQUNRVUlSRV9GQVNUX0RFTEFZO1xuICAgIH1cbiAgICByZXR1cm4gQUNRVUlSRV9TTE9XX0RFTEFZO1xufVxuIl19
|
|
371
|
-
/* _JS_SOURCE_HASH = "
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95VGFrZW92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3lUYWtlb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGlEQUFxQztBQUVyQyxpREFBc0U7QUFFdEUsaUdBQWlHO0FBQ2pHLGlHQUFpRztBQUNqRyxrR0FBa0c7QUFDbEcsOEZBQThGO0FBQzlGLCtGQUErRjtBQUMvRixpR0FBaUc7QUFDakcsbUdBQW1HO0FBQ25HLDBGQUEwRjtBQUMxRixrR0FBa0c7QUFDbEcsK0ZBQStGO0FBQy9GLEVBQUU7QUFDRixpR0FBaUc7QUFDakcsZ0dBQWdHO0FBQ2hHLGlDQUFpQztBQUVqQyxNQUFNLDhCQUE4QixHQUFHLDBCQUEwQixDQUFDO0FBQ2xFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0FBQ3JELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6QyxtR0FBbUc7QUFDbkcsK0ZBQStGO0FBQy9GLDhEQUE4RDtBQUM5RCxNQUFNLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDO0FBQ3hELG1HQUFtRztBQUNuRyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxrR0FBa0c7QUFDbEcsOEZBQThGO0FBQzlGLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNuQyw2RkFBNkY7QUFDN0YsOEZBQThGO0FBQzlGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0scUJBQXFCLEdB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QUFPLEdBQUcsdUJBQXVCLENBQUM7QUFDMUUsQ0FBQztBQUpELDRDQUlDO0FBRUQ7eUVBQ3lFO0FBQ3pFLFNBQWdCLHVCQUF1QjtJQUNuQyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ2pDLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sa0JBQWtCLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sa0JBQWtCLENBQUM7QUFDOUIsQ0FBQztBQU5ELDBEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVtb3RlQ29uZmlnLCBSZW1vdGVDb25maWdCYXNlLCBIb3N0ZWRDb25maWcgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBwYXJzZUhvc3RlZFVybCwgcmVwbGFjZUhvc3RlZFVybFBvcnQgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcblxuLy8gRGVwbG95IHRha2VvdmVyOiB0aGUgZGVwbG95IG1hbmFnZXIgKHF1ZXJ5c3ViJ3MgcGFyYW1ldGVyc1RpbWVsaW5lKSB3cml0ZXMgPG4+LXBhcmFtZXRlcnMuanNvblxuLy8gZmlsZXMgaW50byBvdXIgaW5zdGFuY2UgZm9sZGVyIGRlc2NyaWJpbmcgd2hlbiBlYWNoIHZlcnNpb24gcnVucyBhbmQgd2hlbiBpdCBpcyBzaHV0IGRvd24uIE9sZFxuLy8gYW5kIG5ldyB2ZXJzaW9uIG92ZXJsYXAgZm9yIHRoZSBvdmVybGFwIHRpbWUgKE8gPSBvbGRFbmQgLSBuZXdTdGFydCkuIFdlIHR1cm4gdGhhdCBvdmVybGFwIGludG9cbi8vIGFuIGF0b21pYyB3cml0ZSBoYW5kb2ZmIGJ5IFJFSU5URVJQUkVUSU5HIGV2ZXJ5IHJvdXRpbmcgc291cmNlIHRoYXQgcG9pbnRzIGF0IHVzOiBpdHMgdmFsaWRcbi8vIHdpbmRvdyBpcyBzcGxpdCBzbyB0aGF0IHRoZSBtaWRkbGUgb2YgdGhlIG92ZXJsYXAgKFtTICsgMC41Kk8sIFMgKyAxLjUqT10pIHBvaW50cyBhdCB0aGUgbmV3XG4vLyBwcm9jZXNzJ3MgdGVtcG9yYXJ5IGFsdGVybmF0ZSBwb3J0LiBUaGUgZXhpc3RpbmcgdmFsaWQtd2luZG93IG1hY2hpbmVyeSB0aGVuIGRvZXMgZXZlcnl0aGluZyAtXG4vLyB0aGUgb2xkIHByb2Nlc3Mgc3RhcnRzIHJlamVjdGluZyBmcmVzaCB3cml0ZXMgYXQgdGhlIGZpcnN0IGJvdW5kYXJ5LCBjbGllbnRzIHJlLXJlc29sdmUsIGFuZCB0aGVcbi8vIG5ldyBwcm9jZXNzICh3aGljaCByZWNvZ25pemVzIHRoZSBhbHRlcm5hdGUgcG9ydCBhcyBpdHNlbGYpIHRha2VzIG92ZXIuIFRoZSByZW1hcCBpcyBhblxuLy8gSU5URVJQUkVUQVRJT04gT1ZFUkxBWSwgYXBwbGllZCB3aGVyZSByb3V0aW5nIGNvbmZpZ3MgYXJlIHVzZWQgKHNlZSBhcHBseURlcGxveVJlbWFwIGNhbGxlcnMpIC1cbi8vIGl0IGlzIG5ldmVyIHdyaXR0ZW4gdG8gZGlzaywgbmV2ZXIgc3luY2hyb25pemVkLCBhbmQgbmV2ZXIgcGFydCBvZiBhbnkgc3RvcmVkIGNvbmZpZ3VyYXRpb24uXG4vL1xuLy8gRXZlcnl0aGluZyBoZXJlIGlzIHJlY29tcHV0ZWQgaWRlbXBvdGVudGx5IGZyb20gaXRzIGlucHV0cyAodGltZWxpbmUgZmlsZXMsIHRoZSBwb3J0IHJlZ2lzdHJ5LFxuLy8gb3VyIGFuY2VzdG9yIHBpZHMsIHRoZSBjbG9jaykgLSBmaWxlcyBjYW4gYXBwZWFyIG9yIGNoYW5nZSBhdCBhbnkgbW9tZW50LCBhbmQgd2UgY2FuIHN0YXJ0IGF0XG4vLyBhbnkgcG9pbnQgZHVyaW5nIGEgc3dpdGNob3Zlci5cblxuY29uc3QgUEFSQU1FVEVSU19USU1FTElORV9GSUxFX1JFR0VYID0gL14oXFxkKyktcGFyYW1ldGVyc1xcLmpzb24kLztcbmNvbnN0IEFMSVZFX1dJTkRPV19GT1JFVkVSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5jb25zdCBUSU1FTElORV9QT0xMX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuLy8gUHJvY2Vzc2VzIGxpc3RlbmluZyBvbiBhbiBhbHRlcm5hdGUgcG9ydCByZWdpc3RlciBpdCBoZXJlIChzaWJsaW5nIG9mIHRoZSBzdG9yYWdlIGZvbGRlciksIGtleWVkXG4vLyBieSB0aGVpciBhY3R1YWwgcGlkOyBjb250ZW50IGluY2x1ZGVzIHRoZWlyIGFuY2VzdG9yIHBpZHMgc28gdGhlIHRpbWVsaW5lIGVudHJ5IHBpZCAoYSBzaGVsbFxuLy8gYW5jZXN0b3Igb2YgdGhlIHByb2Nlc3MpIGNhbiBiZSBtYXRjaGVkIHRvIGEgcmVnaXN0cnkgZW50cnlcbmNvbnN0IFBPUlRfUkVHSVNUUllfRk9MREVSX05BTUUgPSBcInN0b3JhZ2VQb3J0UmVnaXN0cnlcIjtcbi8vIE1haW4tcG9ydCBhY3F1aXNpdGlvbiBhdHRlbXB0cyBydW4gdGhpcyBvZnRlbiwgdGlnaHRlbmluZyBuZWFyIHRoZSBwcmVkZWNlc3NvcidzIHNjaGVkdWxlZCBkZWF0aFxuY29uc3QgQUNRVUlSRV9TTE9XX0RFTEFZID0gMzAgKiAxMDAwO1xuY29uc3QgQUNRVUlSRV9GQVNUX0RFTEFZID0gNSAqIDEwMDA7XG5jb25zdCBBQ1FVSVJFX0ZBU1RfV0lORE9XID0gNjAgKiAxMDAwO1xuLy8gRGlzayByZXNjYW5zIGZpcmUgdGhpcyBmYXIgYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUgaGFuZG9mZiwgY2F0Y2hpbmcgZmlsZXMgdGhlIG90aGVyIHByb2Nlc3Ncbi8vIHdyb3RlICh0aGUgQnVsa0RhdGFiYXNlMiBpbmRleCBpcyBhdG9taWMgYnV0IGl0cyBlbnRyaWVzIGxhbmQgYXQgd3JpdGUgdGltZSwgbm90IGZpbGUgdGltZSlcbmNvbnN0IFNXSVRDSF9TQ0FOX0xFQUQgPSAxMCAqIDEwMDA7XG4vLyBUaGUgZHlpbmcgcHJvY2VzcyBtdXN0IGhhdmUgZmx1c2hlZCBldmVyeXRoaW5nIGJlZm9yZSB0aGUgaGFuZG9mZjogZmFzdC13cml0ZSBkZWxheXMgbmV2ZXJcbi8vIGV4dGVuZCBwYXN0IFMgKyBvdmVybGFwICogdGhpcyBmcmFjdGlvbiwgYW5kIGFmdGVyIHRoYXQgcG9pbnQgZmFzdCB3cml0ZXMgZmx1c2ggaW1tZWRpYXRlbHlcbmNvbnN0IEZMVVNIX0RFQURMSU5FX0ZSQUNUSU9OID0gMC4yNTtcbmNvbnN0IEJPVU5EQVJZX0FfRlJBQ1RJT04gPSAwLjU7XG5jb25zdCBCT1VOREFSWV9CX0ZSQUNUSU9OID0gMS41O1xuY29uc3QgUkVNQVBfRVhQSVJFX0ZSQUNUSU9OID0gMjtcblxudHlwZSBUaW1lbGluZUVudHJ5ID0ge1xuICAgIHBpZD86IG51bWJlcjtcbiAgICBhbGl2ZVdpbmRvdzogW251bWJlciwgbnVtYmVyXTtcbiAgICBwYXJhbWV0ZXJzOiB1bmtub3duO1xufTtcblxudHlwZSBUYWtlb3ZlckNvbXB1dGVkID0ge1xuICAgIC8vIFdlIGFyZSBzY2hlZHVsZWQgdG8gZGllIHdpdGggYSBzdWNjZXNzb3Igb3ZlcmxhcHBpbmcgdXMgKGtub3duIGZyb20gdGhlIGZpbGVzIGFsb25lLCBiZWZvcmVcbiAgICAvLyB0aGUgc3VjY2Vzc29yJ3MgcG9ydCBpcyBkaXNjb3ZlcmVkIC0gdGhlIGZsdXNoIGRlYWRsaW5lIGFwcGxpZXMgaW1tZWRpYXRlbHkpXG4gICAgZHlpbmc/OiB7IHN1Y2Nlc3NvclN0YXJ0OiBudW1iZXI7IG92ZXJsYXA6IG51bWJlciB9O1xuICAgIC8vIFRoZSB3aW5kb3cgcmVpbnRlcnByZXRhdGlvbiwgb25jZSB0aGUgbWlkZGxlIHdpbmRvdydzIHBvcnQgaXMga25vd24gKHRoZSBzdWNjZXNzb3Inc1xuICAgIC8vIHJlZ2lzdGVyZWQgYWx0ZXJuYXRlIHBvcnQgLSBvciBvdXIgb3duLCB3aGVuIHdlIEFSRSB0aGUgc3VjY2Vzc29yKVxuICAgIHJlbWFwPzogeyBib3VuZGFyeUE6IG51bWJlcjsgYm91bmRhcnlCOiBudW1iZXI7IGV4cGlyZTogbnVtYmVyOyBhbHRQb3J0OiBudW1iZXIgfTtcbiAgICAvLyBXaGVuIG91ciBwcmVkZWNlc3NvciBkaWVzIGFuZCBmcmVlcyB0aGUgbWFpbiBwb3J0IChmb3IgYWNxdWlzaXRpb24gcGFjaW5nKVxuICAgIHByZWRlY2Vzc29yRW5kPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVGFrZW92ZXJFdmVudCA9IFwicmVtYXBDaGFuZ2VkXCIgfCBcImRpc2tTY2FuXCI7XG5cbmxldCBpbml0aWFsaXplZDogeyBkb21haW46IHN0cmluZzsgbWFpblBvcnQ6IG51bWJlcjsgc3RvcmFnZUZvbGRlcjogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5sZXQgYW5jZXN0b3JQaWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG5sZXQgdGltZWxpbmVGb2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbmxldCBvdXJBbHRQb3J0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5sZXQgY3VycmVudDogVGFrZW92ZXJDb21wdXRlZCA9IHt9O1xubGV0IGN1cnJlbnRLZXkgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50KTtcbmxldCBldmVudExpc3RlbmVyczogKChldmVudDogVGFrZW92ZXJFdmVudCkgPT4gdm9pZClbXSA9IFtdO1xubGV0IGV2ZW50VGltZXJzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbmZ1bmN0aW9uIGV4ZWNUZXh0KGNvbW1hbmQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZXhlYyhjb21tYW5kLCAoZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vLyBUaGUgdGltZWxpbmUgZW50cnkgcGlkIGlzIHRoZSBzY3JlZW4gc2hlbGwgdGhhdCBzcGF3bmVkIHVzIC0gYW4gYW5jZXN0b3IgLSBzbyB3ZSB3YWxrIG91ciB3aG9sZVxuLy8gYW5jZXN0b3IgY2hhaW4gdG8gZmluZCB3aGljaCBlbnRyeSBpcyB1c1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5jZXN0b3JQaWRzKCk6IFByb21pc2U8U2V0PG51bWJlcj4+IHtcbiAgICBsZXQgcGlkcyA9IG5ldyBTZXQ8bnVtYmVyPihbcHJvY2Vzcy5waWRdKTtcbiAgICBsZXQgY3VycmVudFBpZCA9IHByb2Nlc3MucGlkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBwcGlkOiBudW1iZXI7XG4gICAgICAgIGlmIChjdXJyZW50UGlkID09PSBwcm9jZXNzLnBpZCAmJiBwcm9jZXNzLnBwaWQpIHtcbiAgICAgICAgICAgIHBwaWQgPSBwcm9jZXNzLnBwaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBwaWQgPSBwYXJzZUludCgoYXdhaXQgZXhlY1RleHQoYHBzIC1vIHBwaWQ9IC1wICR7Y3VycmVudFBpZH1gKSkudHJpbSgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcHBpZCB8fCBOdW1iZXIuaXNOYU4ocHBpZCkgfHwgcHBpZCA8PSAxIHx8IHBpZHMuaGFzKHBwaWQpKSBicmVhaztcbiAgICAgICAgcGlkcy5hZGQocHBpZCk7XG4gICAgICAgIGN1cnJlbnRQaWQgPSBwcGlkO1xuICAgIH1cbiAgICByZXR1cm4gcGlkcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFRpbWVsaW5lRm9sZGVyKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZXMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKGRpcik7XG4gICAgICAgIH0gY2F0Y2ggeyB9XG4gICAgICAgIGlmIChmaWxlcy5zb21lKGZpbGUgPT4gUEFSQU1FVEVSU19USU1FTElORV9GSUxFX1JFR0VYLnRlc3QoZmlsZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGlyLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKSArIFwiL1wiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGlyKTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gZGlyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBkaXIgPSBwYXJlbnQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwaWRBbGl2ZShwaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Mua2lsbChwaWQsIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAoZSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gXCJFUEVSTVwiO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVnaXN0cnlGb2xkZXIoKTogc3RyaW5nIHtcbiAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwbG95IHRha2VvdmVyIGlzIG5vdCBpbml0aWFsaXplZGApO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5qb2luKHBhdGguZGlybmFtZShwYXRoLnJlc29sdmUoaW5pdGlhbGl6ZWQuc3RvcmFnZUZvbGRlcikpLCBQT1JUX1JFR0lTVFJZX0ZPTERFUl9OQU1FKTtcbn1cblxudHlwZSBSZWdpc3RyeUVudHJ5ID0geyBwaWQ6IG51bWJlcjsgcG9ydDogbnVtYmVyOyBhbmNlc3RvclBpZHM6IG51bWJlcltdIH07XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQb3J0UmVnaXN0cnkoKTogUHJvbWlzZTxSZWdpc3RyeUVudHJ5W10+IHtcbiAgICBsZXQgZm9sZGVyID0gZ2V0UmVnaXN0cnlGb2xkZXIoKTtcbiAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdHJ5IHtcbiAgICAgICAgZmlsZXMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKGZvbGRlcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbGV0IGVudHJpZXM6IFJlZ2lzdHJ5RW50cnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IG1hdGNoID0gL14oXFxkKylcXC5qc29uJC8uZXhlYyhmaWxlKTtcbiAgICAgICAgaWYgKCFtYXRjaCkgY29udGludWU7XG4gICAgICAgIGxldCBwaWQgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIGlmICghcGlkQWxpdmUocGlkKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsocGF0aC5qb2luKGZvbGRlciwgZmlsZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHBhdGguam9pbihmb2xkZXIsIGZpbGUpLCBcInV0ZjhcIikpIGFzIFJlZ2lzdHJ5RW50cnk7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goeyAuLi5lbnRyeSwgcGlkIH0pO1xuICAgICAgICB9IGNhdGNoIHsgfVxuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFRpbWVsaW5lRW50cmllcygpOiBQcm9taXNlPFRpbWVsaW5lRW50cnlbXT4ge1xuICAgIGlmICghdGltZWxpbmVGb2xkZXIpIHJldHVybiBbXTtcbiAgICBsZXQgZW50cmllczogVGltZWxpbmVFbnRyeVtdID0gW107XG4gICAgZm9yIChsZXQgZmlsZSBvZiBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKHRpbWVsaW5lRm9sZGVyKSkge1xuICAgICAgICBpZiAoIVBBUkFNRVRFUlNfVElNRUxJTkVfRklMRV9SRUdFWC50ZXN0KGZpbGUpKSBjb250aW51ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChKU09OLnBhcnNlKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHRpbWVsaW5lRm9sZGVyICsgZmlsZSwgXCJ1dGY4XCIpKSBhcyBUaW1lbGluZUVudHJ5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb3VsZCBub3QgcmVhZCBkZXBsb3kgdGltZWxpbmUgZmlsZSAke3RpbWVsaW5lRm9sZGVyICsgZmlsZX06ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59XG5cbmZ1bmN0aW9uIG1ha2VSZW1hcChzdWNjZXNzb3JTdGFydDogbnVtYmVyLCBvdmVybGFwOiBudW1iZXIsIGFsdFBvcnQ6IG51bWJlcik6IFRha2VvdmVyQ29tcHV0ZWRbXCJyZW1hcFwiXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYm91bmRhcnlBOiBzdWNjZXNzb3JTdGFydCArIG92ZXJsYXAgKiBCT1VOREFSWV9BX0ZSQUNUSU9OLFxuICAgICAgICBib3VuZGFyeUI6IHN1Y2Nlc3NvclN0YXJ0ICsgb3ZlcmxhcCAqIEJPVU5EQVJZX0JfRlJBQ1RJT04sXG4gICAgICAgIGV4cGlyZTogc3VjY2Vzc29yU3RhcnQgKyBvdmVybGFwICogUkVNQVBfRVhQSVJFX0ZSQUNUSU9OLFxuICAgICAgICBhbHRQb3J0LFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGVtaXQoZXZlbnQ6IFRha2VvdmVyRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiBldmVudExpc3RlbmVycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBEZXBsb3kgdGFrZW92ZXIgbGlzdGVuZXIgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUV2ZW50cygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCB0aW1lciBvZiBldmVudFRpbWVycykge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgICBldmVudFRpbWVycyA9IFtdO1xuICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGxldCBzY2hlZHVsZSA9ICh0aW1lOiBudW1iZXIsIGZuYzogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICBpZiAodGltZSA8PSBub3cpIHJldHVybjtcbiAgICAgICAgbGV0IHRpbWVyID0gc2V0VGltZW91dChmbmMsIHRpbWUgLSBub3cpO1xuICAgICAgICAodGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICBldmVudFRpbWVycy5wdXNoKHRpbWVyKTtcbiAgICB9O1xuICAgIGxldCByZW1hcCA9IGN1cnJlbnQucmVtYXA7XG4gICAgaWYgKHJlbWFwKSB7XG4gICAgICAgIHNjaGVkdWxlKHJlbWFwLmJvdW5kYXJ5QSAtIFNXSVRDSF9TQ0FOX0xFQUQsICgpID0+IGVtaXQoXCJkaXNrU2NhblwiKSk7XG4gICAgICAgIHNjaGVkdWxlKHJlbWFwLmJvdW5kYXJ5QSArIFNXSVRDSF9TQ0FOX0xFQUQsICgpID0+IGVtaXQoXCJkaXNrU2NhblwiKSk7XG4gICAgICAgIHNjaGVkdWxlKHJlbWFwLmV4cGlyZSwgKCkgPT4gdm9pZCByZWNvbXB1dGUoKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYERlcGxveSB0YWtlb3ZlciByZWNvbXB1dGUgZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKSkpO1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVjb21wdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaW5pdGlhbGl6ZWQgfHwgIXRpbWVsaW5lRm9sZGVyKSByZXR1cm47XG4gICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgbGV0IGVudHJpZXMgPSBhd2FpdCByZWFkVGltZWxpbmVFbnRyaWVzKCk7XG4gICAgbGV0IHJlZ2lzdHJ5ID0gYXdhaXQgcmVhZFBvcnRSZWdpc3RyeSgpO1xuICAgIGxldCB1czogVGltZWxpbmVFbnRyeSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS5waWQgJiYgYW5jZXN0b3JQaWRzLmhhcyhlbnRyeS5waWQpKSB7XG4gICAgICAgICAgICB1cyA9IGVudHJ5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBjb21wdXRlZDogVGFrZW92ZXJDb21wdXRlZCA9IHt9O1xuICAgIGlmICh1cykge1xuICAgICAgICBsZXQgdXNTdGFydCA9IHVzLmFsaXZlV2luZG93WzBdO1xuICAgICAgICBsZXQgbmV4dDogVGltZWxpbmVFbnRyeSB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHByZXY6IFRpbWVsaW5lRW50cnkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSA9PT0gdXMpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGVudHJ5LmFsaXZlV2luZG93WzBdID4gdXNTdGFydCAmJiAoIW5leHQgfHwgZW50cnkuYWxpdmVXaW5kb3dbMF0gPCBuZXh0LmFsaXZlV2luZG93WzBdKSkge1xuICAgICAgICAgICAgICAgIG5leHQgPSBlbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbnRyeS5hbGl2ZVdpbmRvd1swXSA8IHVzU3RhcnQgJiYgKCFwcmV2IHx8IGVudHJ5LmFsaXZlV2luZG93WzBdID4gcHJldi5hbGl2ZVdpbmRvd1swXSkpIHtcbiAgICAgICAgICAgICAgICBwcmV2ID0gZW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHQgJiYgdXMuYWxpdmVXaW5kb3dbMV0gIT09IEFMSVZFX1dJTkRPV19GT1JFVkVSICYmIG5leHQuYWxpdmVXaW5kb3dbMF0gPD0gdXMuYWxpdmVXaW5kb3dbMV0pIHtcbiAgICAgICAgICAgIGxldCBvdmVybGFwID0gdXMuYWxpdmVXaW5kb3dbMV0gLSBuZXh0LmFsaXZlV2luZG93WzBdO1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3NvclN0YXJ0ID0gbmV4dC5hbGl2ZVdpbmRvd1swXTtcbiAgICAgICAgICAgIGlmIChvdmVybGFwID4gMCAmJiBub3cgPCBzdWNjZXNzb3JTdGFydCArIG92ZXJsYXAgKiBSRU1BUF9FWFBJUkVfRlJBQ1RJT04pIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZC5keWluZyA9IHsgc3VjY2Vzc29yU3RhcnQsIG92ZXJsYXAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzb3JQaWQgPSBuZXh0LnBpZDtcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yUGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWNjZXNzb3JFbnRyeSA9IHJlZ2lzdHJ5LmZpbmQoeCA9PiB4LmFuY2VzdG9yUGlkcy5pbmNsdWRlcyhzdWNjZXNzb3JQaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvckVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZC5yZW1hcCA9IG1ha2VSZW1hcChzdWNjZXNzb3JTdGFydCwgb3ZlcmxhcCwgc3VjY2Vzc29yRW50cnkucG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi5hbGl2ZVdpbmRvd1sxXSA+IHVzU3RhcnQpIHtcbiAgICAgICAgICAgIGxldCBvdmVybGFwID0gcHJldi5hbGl2ZVdpbmRvd1sxXSAtIHVzU3RhcnQ7XG4gICAgICAgICAgICBjb21wdXRlZC5wcmVkZWNlc3NvckVuZCA9IHByZXYuYWxpdmVXaW5kb3dbMV07XG4gICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgb3VyQWx0UG9ydCAmJiBub3cgPCB1c1N0YXJ0ICsgb3ZlcmxhcCAqIFJFTUFQX0VYUElSRV9GUkFDVElPTiAmJiAhY29tcHV0ZWQucmVtYXApIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZC5yZW1hcCA9IG1ha2VSZW1hcCh1c1N0YXJ0LCBvdmVybGFwLCBvdXJBbHRQb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQga2V5ID0gSlNPTi5zdHJpbmdpZnkoY29tcHV0ZWQpO1xuICAgIGlmIChrZXkgPT09IGN1cnJlbnRLZXkpIHJldHVybjtcbiAgICBjdXJyZW50ID0gY29tcHV0ZWQ7XG4gICAgY3VycmVudEtleSA9IGtleTtcbiAgICBjb25zb2xlLmxvZyhgRGVwbG95IHRha2VvdmVyIHN0YXRlIGNoYW5nZWQ6ICR7a2V5fWApO1xuICAgIHNjaGVkdWxlRXZlbnRzKCk7XG4gICAgZW1pdChcInJlbWFwQ2hhbmdlZFwiKTtcbn1cblxuLyoqIFN0YXJ0cyB0aGUgdGFrZW92ZXIgbWFjaGluZXJ5LiBQb3J0IGZhbGxiYWNrIChhbHRlcm5hdGUgcG9ydCArIHJlZ2lzdHJ5ICsgYWNxdWlzaXRpb24gcG9sbGluZylcbiAqICB3b3JrcyByZWdhcmRsZXNzOyB3aXRob3V0IGEgZGVwbG95IHRpbWVsaW5lIGZvbGRlciB0aGUgc3dpdGNob3Zlci1zcGVjaWZpYyBwYXJ0cyAodGhlIHJlbWFwLFxuICogIHRoZSBmbHVzaCBkZWFkbGluZSwgdGhlIHRpZ2h0ZXIgYWNxdWlzaXRpb24gcGFjaW5nKSBzaW1wbHkgc3RheSBpbmVydC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0RGVwbG95VGFrZW92ZXIoY29uZmlnOiB7IGRvbWFpbjogc3RyaW5nOyBtYWluUG9ydDogbnVtYmVyOyBzdG9yYWdlRm9sZGVyOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGluaXRpYWxpemVkID0gY29uZmlnO1xuICAgIGFuY2VzdG9yUGlkcyA9IGF3YWl0IGdldEFuY2VzdG9yUGlkcygpO1xuICAgIHRpbWVsaW5lRm9sZGVyID0gYXdhaXQgZmluZFRpbWVsaW5lRm9sZGVyKCk7XG4gICAgaWYgKCF0aW1lbGluZUZvbGRlcikgcmV0dXJuO1xuICAgIGF3YWl0IHJlY29tcHV0ZSgpO1xuICAgIGxldCBwb2xsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB2b2lkIHJlY29tcHV0ZSgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgRGVwbG95IHRha2VvdmVyIHJlY29tcHV0ZSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICB9LCBUSU1FTElORV9QT0xMX0lOVEVSVkFMKTtcbiAgICAocG9sbCBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG59XG5cbi8qKiBDYWxsZWQgd2hlbiB3ZSBoYWQgdG8gbGlzdGVuIG9uIGFuIGFsdGVybmF0ZSBwb3J0ICh0aGUgbWFpbiBwb3J0IHdhcyBzdGlsbCBoZWxkIGJ5IG91clxuICogIHByZWRlY2Vzc29yKTogcmVnaXN0ZXJzIGl0IHNvIHRoZSBwcmVkZWNlc3NvciBjYW4gcm91dGUgdGhlIG1pZGRsZSBvdmVybGFwIHdpbmRvdyB0byB1cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlckFsdFBvcnQocG9ydDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgb3VyQWx0UG9ydCA9IHBvcnQ7XG4gICAgbGV0IGZvbGRlciA9IGdldFJlZ2lzdHJ5Rm9sZGVyKCk7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIoZm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgZW50cnk6IFJlZ2lzdHJ5RW50cnkgPSB7IHBpZDogcHJvY2Vzcy5waWQsIHBvcnQsIGFuY2VzdG9yUGlkczogWy4uLmFuY2VzdG9yUGlkc10gfTtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUocGF0aC5qb2luKGZvbGRlciwgYCR7cHJvY2Vzcy5waWR9Lmpzb25gKSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTtcbiAgICBhd2FpdCByZWNvbXB1dGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uVGFrZW92ZXJFdmVudChsaXN0ZW5lcjogKGV2ZW50OiBUYWtlb3ZlckV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgZXZlbnRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59XG5cbi8qKiBUaGUgaW50ZXJwcmV0YXRpb24gb3ZlcmxheTogc3BsaXRzIGV2ZXJ5IHNvdXJjZSBwb2ludGluZyBhdCBvdXIgZG9tYWluK21haW4gcG9ydCBzbyB0aGUgbWlkZGxlXG4gKiAgb2YgdGhlIGRlcGxveSBvdmVybGFwIHBvaW50cyBhdCB0aGUgYWx0ZXJuYXRlIHBvcnQuIFB1cmUsIGluLW1lbW9yeSBvbmx5IC0gdGhlIHN0b3JlZCByb3V0aW5nXG4gKiAgY29uZmlnIGlzIG5ldmVyIG1vZGlmaWVkLCBhbmQgdGhpcyBtdXN0IG5ldmVyIGJlIGFwcGxpZWQgdG8gZGF0YSB0aGF0IGdldHMgcGVyc2lzdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RGVwbG95UmVtYXAocm91dGluZzogUmVtb3RlQ29uZmlnKTogUmVtb3RlQ29uZmlnIHtcbiAgICBsZXQgcmVtYXAgPSBjdXJyZW50LnJlbWFwO1xuICAgIGxldCBpbml0ID0gaW5pdGlhbGl6ZWQ7XG4gICAgaWYgKCFyZW1hcCB8fCAhaW5pdCkgcmV0dXJuIHJvdXRpbmc7XG4gICAgbGV0IHNvdXJjZXM6IFJlbW90ZUNvbmZpZ0Jhc2VbXSA9IFtdO1xuICAgIGxldCBzbGljZSA9IChzb3VyY2U6IEhvc3RlZENvbmZpZywgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHVybD86IHN0cmluZyk6IEhvc3RlZENvbmZpZyA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnNvdXJjZSwgdXJsOiB1cmwgfHwgc291cmNlLnVybCwgdmFsaWRXaW5kb3c6IFtzdGFydCwgZW5kXSB9O1xuICAgIH07XG4gICAgZm9yIChsZXQgc291cmNlIG9mIHJvdXRpbmcuc291cmNlcykge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIiB8fCBzb3VyY2UudHlwZSAhPT0gXCJyZW1vdGVcIikge1xuICAgICAgICAgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyc2VkOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBwYXJzZUhvc3RlZFVybChzb3VyY2UudXJsKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWQuYWRkcmVzcyAhPT0gaW5pdC5kb21haW4gfHwgcGFyc2VkLnBvcnQgIT09IGluaXQubWFpblBvcnQpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IFtzdGFydCwgZW5kXSA9IHNvdXJjZS52YWxpZFdpbmRvdztcbiAgICAgICAgbGV0IGEgPSBNYXRoLm1heChzdGFydCwgTWF0aC5taW4ocmVtYXAuYm91bmRhcnlBLCBlbmQpKTtcbiAgICAgICAgbGV0IGIgPSBNYXRoLm1heChzdGFydCwgTWF0aC5taW4ocmVtYXAuYm91bmRhcnlCLCBlbmQpKTtcbiAgICAgICAgbGV0IGFkZGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChhID4gc3RhcnQpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChzbGljZShzb3VyY2UsIHN0YXJ0LCBhKSk7XG4gICAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgPiBhKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc2xpY2Uoc291cmNlLCBhLCBiLCByZXBsYWNlSG9zdGVkVXJsUG9ydChzb3VyY2UudXJsLCByZW1hcC5hbHRQb3J0KSkpO1xuICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQgPiBiKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc2xpY2Uoc291cmNlLCBiLCBlbmQpKTtcbiAgICAgICAgICAgIGFkZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFkZGVkKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2ZXJzaW9uOiByb3V0aW5nLnZlcnNpb24sIHNvdXJjZXMgfTtcbn1cblxuLyoqIEZvciB0aGUgZHlpbmcgcHJvY2VzczogZmFzdC13cml0ZSBmbHVzaCBkZWxheXMgbXVzdCBuZXZlciBleHRlbmQgcGFzdCB0aGlzIHRpbWUsIGFuZCBhZnRlciBpdFxuICogIGZhc3Qgd3JpdGVzIGZsdXNoIGltbWVkaWF0ZWx5IC0gc28gbm90aGluZyBpcyBsZWZ0IGluIG1lbW9yeSB3aGVuIHRoZSB3cml0ZSB3aW5kb3cgdHJhbnNmZXJzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsdXNoRGVhZGxpbmUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgZHlpbmcgPSBjdXJyZW50LmR5aW5nO1xuICAgIGlmICghZHlpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGR5aW5nLnN1Y2Nlc3NvclN0YXJ0ICsgZHlpbmcub3ZlcmxhcCAqIEZMVVNIX0RFQURMSU5FX0ZSQUNUSU9OO1xufVxuXG4vKiogSG93IGxvbmcgdG8gd2FpdCBiZXR3ZWVuIG1haW4tcG9ydCBhY3F1aXNpdGlvbiBhdHRlbXB0czogdGlnaHQgYXJvdW5kIHRoZSBwcmVkZWNlc3NvcidzXG4gKiAgc2NoZWR1bGVkIGRlYXRoICh3aGVuIHRoZSBwb3J0IGFjdHVhbGx5IGZyZWVzKSwgcmVsYXhlZCBvdGhlcndpc2UuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpblBvcnRBY3F1aXJlRGVsYXkoKTogbnVtYmVyIHtcbiAgICBsZXQgZW5kID0gY3VycmVudC5wcmVkZWNlc3NvckVuZDtcbiAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQgJiYgTWF0aC5hYnMoRGF0ZS5ub3coKSAtIGVuZCkgPD0gQUNRVUlSRV9GQVNUX1dJTkRPVykge1xuICAgICAgICByZXR1cm4gQUNRVUlSRV9GQVNUX0RFTEFZO1xuICAgIH1cbiAgICByZXR1cm4gQUNRVUlSRV9TTE9XX0RFTEFZO1xufVxuIl19
|
|
370
|
+
/* _JS_SOURCE_HASH = "445aea0f6c38fdfe685d7e73a9d4773c9eed673e5ad04de36ec323542e214990"; */
|
|
@@ -43,6 +43,7 @@ class SourceWrapper {
|
|
|
43
43
|
this.disposed = false;
|
|
44
44
|
this.reconnectRunning = false;
|
|
45
45
|
this.pings = [];
|
|
46
|
+
this.loggedConnected = false;
|
|
46
47
|
}
|
|
47
48
|
static async create(config, options) {
|
|
48
49
|
let wrapper = new SourceWrapper(config, (options === null || options === void 0 ? void 0 : options.background) !== false);
|
|
@@ -90,6 +91,7 @@ class SourceWrapper {
|
|
|
90
91
|
return;
|
|
91
92
|
if (this.isConnected())
|
|
92
93
|
return;
|
|
94
|
+
console.error(`Cannot connect to storage source ${this.config.url}`);
|
|
93
95
|
this.reconnectRunning = true;
|
|
94
96
|
void this.reconnectLoop();
|
|
95
97
|
}
|
|
@@ -170,8 +172,14 @@ class SourceWrapper {
|
|
|
170
172
|
await remote.ping();
|
|
171
173
|
}
|
|
172
174
|
catch (_a) {
|
|
175
|
+
// A failed ping is also our earliest down-detection
|
|
176
|
+
this.noteFailure();
|
|
173
177
|
return;
|
|
174
178
|
}
|
|
179
|
+
if (!this.loggedConnected) {
|
|
180
|
+
this.loggedConnected = true;
|
|
181
|
+
console.log(`Connected to storage source ${this.config.url} (${Date.now() - start}ms)`);
|
|
182
|
+
}
|
|
175
183
|
this.pings.push(Date.now() - start);
|
|
176
184
|
if (this.pings.length > PING_HISTORY) {
|
|
177
185
|
this.pings.shift();
|
|
@@ -219,5 +227,5 @@ class SourceWrapper {
|
|
|
219
227
|
}
|
|
220
228
|
}
|
|
221
229
|
exports.SourceWrapper = SourceWrapper;
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlV3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNvdXJjZVdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFFMUIsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxvREFBaUQ7QUFFakQsaURBQW1HO0FBQ25HLHFEQUFrRDtBQUNsRCwrQ0FBNEM7QUFDNUMsNENBQWlEO0FBQ2pELDZEQUF3RjtBQUUzRSxRQUFBLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsUUFBQSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4QixLQUFLLFVBQVUsaUJBQWlCO0lBQzVCLElBQUksQ0FBQyxJQUFBLGFBQU0sR0FBRTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVCLElBQUksQ0FBQztRQUNELE1BQU0sSUFBQSxxQkFBUyxFQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFBLHFCQUFTLEVBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsbUdBQW1HO0FBQ25HLGtHQUFrRztBQUNsRyw2RkFBNkY7QUFDN0YsOEZBQThGO0FBQzlGLDZGQUE2RjtBQUM3RixNQUFhLGFBQWE7SUFTdEIsWUFDVyxNQUFzQztJQUM3QyxvRkFBb0Y7SUFDNUUsVUFBbUI7UUFGcEIsV0FB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TSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzJFQUN1RTtJQUNoRSxLQUFLLENBQUMsS0FBSyxDQUFJLEdBQXdDO1FBQzFELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0RBQWdELENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3pELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxPQUFPO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBMUxELHNDQTBMQyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5hbGxvd2NsaWVudCA9IHRydWU7XG5cbmltcG9ydCB7IGlzTm9kZSwgc29ydCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGdldFNlY3JldCB9IGZyb20gXCIuLi8uLi9taXNjL2dldFNlY3JldFwiO1xuaW1wb3J0IHsgSUFyY2hpdmVzLCBIb3N0ZWRDb25maWcsIEJhY2tibGF6ZUNvbmZpZyB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSwgZ2V0QnVja2V0QmFzZVVybCwgcGFyc2VIb3N0ZWRVcmwsIHBhcnNlQmFja2JsYXplVXJsIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1JlbW90ZSB9IGZyb20gXCIuL0FyY2hpdmVzUmVtb3RlXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1VybCB9IGZyb20gXCIuL0FyY2hpdmVzVXJsXCI7XG5pbXBvcnQgeyBBcmNoaXZlc0JhY2tibGF6ZSB9IGZyb20gXCIuLi9iYWNrYmxhemVcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWdPcHRpb25hbCwgZ2V0TG9jYWxBcmNoaXZlcyB9IGZyb20gXCIuL3N0b3JhZ2VTZXJ2ZXJTdGF0ZVwiO1xuXG5leHBvcnQgY29uc3QgUkVUUllfU1RBUlRfREVMQVkgPSAyICogMTAwMDtcbmV4cG9ydCBjb25zdCBSRVRSWV9NQVhfREVMQVkgPSA1ICogNjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IFJFVFJZX0dST1dUSCA9IDEuNTtcbmNvbnN0IEFDQ0VTU19SRUNIRUNLX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuY29uc3QgUElOR19JTlRFUlZBTCA9IDYwICogMTAwMDtcbmNvbnN0IFBJTkdfSElTVE9SWSA9IDEwO1xuXG5hc3luYyBmdW5jdGlvbiBoYXNCYWNrYmxhemVDcmVkcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIWlzTm9kZSgpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2V0U2VjcmV0KFwiYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXlJZFwiKTtcbiAgICAgICAgYXdhaXQgZ2V0U2VjcmV0KFwiYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXlcIik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBPbmUgc291cmNlIG9mIGEgUmVtb3RlQ29uZmlnLCBhcyBhIHVzYWJsZSBJQXJjaGl2ZXMuIFJlYWRzIGZhbGwgYmFjayB0byB0aGUgcHVibGljLVVSTCBmb3JtIHdoZW5cbi8vIHdlIGRvbid0IGhhdmUgQVBJIGFjY2Vzczsgd3JpdGVzIGFsd2F5cyBhdHRlbXB0IHRoZSBBUEkgKHNvIGFjY2VzcyBncmFudGVkIGxhdGVyIGlzIHBpY2tlZCB1cCBvblxuLy8gdGhlIG5leHQgd3JpdGUpLiBXaGVuIGEgY2FsbCBmYWlscyB3aGlsZSB0aGUgV2ViU29ja2V0IGlzIGRvd24sIG5vdGVGYWlsdXJlIHN0YXJ0cyBhIGJhY2tncm91bmRcbi8vIHJlY29ubmVjdCBsb29wIHdpdGggYSByYW1waW5nIGRlbGF5IC0gaXQgbmV2ZXIgYmxvY2tzIGNhbGxlcnMsIGl0IGp1c3Qga2VlcHMgdHJ5aW5nIHNvIHRoZVxuLy8gY29ubmVjdGlvbiBldmVudHVhbGx5IGNvbWVzIGJhY2suIFNvdXJjZXMgd2l0aG91dCBhIFdlYlNvY2tldCAoYmFja2JsYXplLCBVUkwtZm9ybSwgb3VyIG93blxuLy8gbG9jYWwgc2VydmVyKSByZXBvcnQgYWx3YXlzLWNvbm5lY3RlZDogdGhleSdyZSBsYXN0LXJlc29ydCBzb3VyY2VzIHdoZXJlIHRocm93aW5nIGlzIGZpbmUuXG5leHBvcnQgY2xhc3MgU291cmNlV3JhcHBlciB7XG4gICAgcHVibGljIGFwaT86IElBcmNoaXZlcztcbiAgICBwdWJsaWMgdXJsPzogQXJjaGl2ZXNVcmw7XG4gICAgcHVibGljIHdyaXRlQmxvY2tlZD86IHN0cmluZztcbiAgICBwcml2YXRlIHJlbW90ZT86IEFyY2hpdmVzUmVtb3RlO1xuICAgIHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHJlY29ubmVjdFJ1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGFjY2Vzc0NhY2hlPzogeyBoYXNBY2Nlc3M6IGJvb2xlYW47IHRpbWU6IG51bWJlciB9O1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnLFxuICAgICAgICAvLyBmYWxzZSBmb3Igc2hvcnQtbGl2ZWQgcHJvYmUgaW5zdGFuY2VzLCB3aGljaCBtdXN0IG5ldmVyIGxlYXZlIGEgcmV0cnkgbG9vcCBiZWhpbmRcbiAgICAgICAgcHJpdmF0ZSBiYWNrZ3JvdW5kOiBib29sZWFuLFxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGNyZWF0ZShjb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZywgb3B0aW9ucz86IHsgYmFja2dyb3VuZD86IGJvb2xlYW4gfSk6IFByb21pc2U8U291cmNlV3JhcHBlcj4ge1xuICAgICAgICBsZXQgd3JhcHBlciA9IG5ldyBTb3VyY2VXcmFwcGVyKGNvbmZpZywgb3B0aW9ucz8uYmFja2dyb3VuZCAhPT0gZmFsc2UpO1xuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09IFwiYmFja2JsYXplXCIpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBoYXNCYWNrYmxhemVDcmVkcygpKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5hcGkgPSBuZXcgQXJjaGl2ZXNCYWNrYmxhemUoeyBidWNrZXROYW1lOiBwYXJzZUJhY2tibGF6ZVVybChjb25maWcudXJsKS5idWNrZXROYW1lLCBwdWJsaWM6IGNvbmZpZy5wdWJsaWMsIGltbXV0YWJsZTogY29uZmlnLmltbXV0YWJsZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLndyaXRlQmxvY2tlZCA9IGBObyBiYWNrYmxhemUgY3JlZGVudGlhbHMgZm9yICR7Y29uZmlnLnVybH0uIFByb3ZpZGUgYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXlJZCBhbmQgYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXkgdmlhIGdldFNlY3JldCB0byBlbmFibGUgQVBJIGFjY2Vzcy5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLndyaXRlQmxvY2tlZCA9IGBCcm93c2VycyBjYW5ub3Qgd3JpdGUgdG8gYmFja2JsYXplIChidWNrZXQgJHtjb25maWcudXJsfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF3cmFwcGVyLmFwaSAmJiBjb25maWcucHVibGljICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZXIudXJsID0gbmV3IEFyY2hpdmVzVXJsKGdldEJ1Y2tldEJhc2VVcmwoY29uZmlnLnVybCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcnNlZCA9IHBhcnNlSG9zdGVkVXJsKGNvbmZpZy51cmwpO1xuICAgICAgICBsZXQgc2VydmVyID0gaXNOb2RlKCkgJiYgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsKCkgfHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc2VydmVyICYmIHBhcnNlZC5hZGRyZXNzID09PSBzZXJ2ZXIuZG9tYWluICYmIHBhcnNlZC5wb3J0ID09PSBzZXJ2ZXIucG9ydCkge1xuICAgICAgICAgICAgLy8gQSBidWNrZXQgaG9zdGVkIGJ5IG91ciBvd24gcHJvY2VzcyAtIHVzZSBpdCBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgb3Vyc2VsdmVzXG4gICAgICAgICAgICB3cmFwcGVyLmFwaSA9IGdldExvY2FsQXJjaGl2ZXMocGFyc2VkLmFjY291bnQsIHBhcnNlZC5idWNrZXROYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBwZXIucmVtb3RlID0gbmV3IEFyY2hpdmVzUmVtb3RlKHsgdXJsOiBjb25maWcudXJsLCBhY2NvdW50TmFtZTogY29uZmlnLmFjY291bnROYW1lLCB3YWl0Rm9yQWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgd3JhcHBlci5hcGkgPSB3cmFwcGVyLnJlbW90ZTtcbiAgICAgICAgaWYgKGNvbmZpZy5wdWJsaWMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB3cmFwcGVyLnVybCA9IG5ldyBBcmNoaXZlc1VybChnZXRCdWNrZXRCYXNlVXJsKGNvbmZpZy51cmwpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgc291cmNlLyR7dGhpcy5jb25maWcudXJsfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucmVtb3RlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIENhbGwgYWZ0ZXIgYSByZXF1ZXN0IGZhaWxlZCB3aGlsZSBpc0Nvbm5lY3RlZCgpIHdhcyBmYWxzZTogc3RhcnRzIChpZiBub3QgYWxyZWFkeSBydW5uaW5nKVxuICAgICAqICB0aGUgYmFja2dyb3VuZCByZWNvbm5lY3QgbG9vcC4gTmV2ZXIgYmxvY2tzIC0gdGhlIGZhaWxlZCByZXF1ZXN0IHN0aWxsIHRocm93cy4gKi9cbiAgICBwdWJsaWMgbm90ZUZhaWx1cmUoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5iYWNrZ3JvdW5kIHx8IHRoaXMuZGlzcG9zZWQgfHwgdGhpcy5yZWNvbm5lY3RSdW5uaW5nKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RSdW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdm9pZCB0aGlzLnJlY29ubmVjdExvb3AoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlY29ubmVjdExvb3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXRyeURlbGF5ID0gUkVUUllfU1RBUlRfREVMQVk7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheShyZXRyeURlbGF5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSkgYnJlYWs7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIEFueSBjYWxsIHJlLWVzdGFibGlzaGVzIHRoZSBXZWJTb2NrZXQ7IHRoZSByZXN1bHQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW90ZT8uZ2V0SW5mbyhST1VUSU5HX0ZJTEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIEV2ZW4gYSBmYWlsaW5nIGNhbGwgKGUuZy4gYWNjZXNzIGRlbmllZCkgcHJvdmVzIHRoZSBjb25uZWN0aW9uIGlzIGJhY2tcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSBicmVhaztcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBjb25uZWN0IHRvIHN0b3JhZ2Ugc291cmNlICR7dGhpcy5jb25maWcudXJsfSwgcmV0cnlpbmcgaW4gJHtNYXRoLnJvdW5kKHJldHJ5RGVsYXkgLyAxMDAwKX1zLiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0cnlEZWxheSA9IE1hdGgubWluKFJFVFJZX01BWF9ERUxBWSwgcmV0cnlEZWxheSAqIFJFVFJZX0dST1dUSCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWNvbm5lY3RSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvbm5lY3RlZCB0byBzdG9yYWdlIHNvdXJjZSAke3RoaXMuY29uZmlnLnVybH1gKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgaG9zdGVkIHNvdXJjZXM6IGNhY2hlZCBhY2Nlc3MgY2hlY2ssIHNvIHJlYWRzIGtub3cgd2hldGhlciB0byB1c2UgdGhlIEFQSSBvciB0aGUgcHVibGljXG4gICAgLy8gVVJMIGZvcm0uIEFjY2Vzcywgb25jZSBzZWVuLCBpcyBhc3N1bWVkIHRvIHN0aWNrOyBuby1hY2Nlc3MgaXMgcmUtY2hlY2tlZCBwZXJpb2RpY2FsbHkgKHRoZVxuICAgIC8vIGNoZWNrIGFsc28gcmVnaXN0ZXJzIG91ciBhY2Nlc3MgcmVxdWVzdCBzZXJ2ZXItc2lkZSwgd2hpY2ggbG9ncyB0aGUgZ3JhbnQgbGluaykuXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0FjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHJlbW90ZSA9IHRoaXMucmVtb3RlO1xuICAgICAgICBpZiAoIXJlbW90ZSkgcmV0dXJuICEhdGhpcy5hcGk7XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLmFjY2Vzc0NhY2hlO1xuICAgICAgICBpZiAoY2FjaGVkICYmIChjYWNoZWQuaGFzQWNjZXNzIHx8IERhdGUubm93KCkgLSBjYWNoZWQudGltZSA8IEFDQ0VTU19SRUNIRUNLX0lOVEVSVkFMKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5oYXNBY2Nlc3M7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHdhaXRpbmcgPSBhd2FpdCByZW1vdGUud2FpdGluZ0ZvckFjY2VzcygpO1xuICAgICAgICB0aGlzLmFjY2Vzc0NhY2hlID0geyBoYXNBY2Nlc3M6ICF3YWl0aW5nLCB0aW1lOiBEYXRlLm5vdygpIH07XG4gICAgICAgIGlmICh3YWl0aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIGFjY2VzcyB0byBzdG9yYWdlIGFjY291bnQgZm9yICR7dGhpcy5jb25maWcudXJsfSAob3VyIG1hY2hpbmUgJHt3YWl0aW5nLm1hY2hpbmVJZH0sIGlwICR7d2FpdGluZy5pcH0pLiBSZWFkaW5nIHZpYSB0aGUgcHVibGljIFVSTCBmb3JtIHdoZXJlIHBvc3NpYmxlLiBHcmFudCBhY2Nlc3MgYXQgJHt3YWl0aW5nLmxpbmt9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF3YWl0aW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkPFQ+KHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYXBpICYmIGF3YWl0IHRoaXMuY2hlY2tBY2Nlc3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bih0aGlzLmFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnVuKHRoaXMudXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcGkpIHtcbiAgICAgICAgICAgIC8vIE5vIHB1YmxpYyBVUkwgZm9ybSAtIGxldCB0aGUgQVBJIGNhbGwgdGhyb3cgaXRzIG93biBlcnJvciAod2hpY2ggaW5jbHVkZXMgdGhlIGFjY2Vzc1xuICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb25zIGZvciBob3N0ZWQgc291cmNlcylcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4odGhpcy5hcGkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlICR7dGhpcy5jb25maWcudXJsfSBoYXMgbm8gQVBJIGFjY2VzcyBhbmQgbm8gcHVibGljIFVSTCBmb3JtIChwdWJsaWM6IGZhbHNlKWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVCbG9ja2VkIHx8ICF0aGlzLmFwaSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcGkuaGFzV3JpdGVBY2Nlc3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBpbmdzOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgcGluZ1RpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogU3RhcnRzIG1lYXN1cmluZyB0aGlzIHNvdXJjZSdzIGxhdGVuY3kgKGZvciB2YXJpYWJsZS1zaGFyZCB0YXJnZXQgcHJlZmVyZW5jZSkuIE9ubHkgaG9zdGVkXG4gICAgICogIHJlbW90ZXMgYXJlIHBpbmdlZDsgb3VyIG93biBsb2NhbCBzZXJ2ZXIgY291bnRzIGFzIDAsIGV2ZXJ5dGhpbmcgZWxzZSBhcyBJbmZpbml0eS4gKi9cbiAgICBwdWJsaWMgc3RhcnRQaW5naW5nKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdGUgPSB0aGlzLnJlbW90ZTtcbiAgICAgICAgaWYgKCFyZW1vdGUgfHwgdGhpcy5waW5nVGltZXIgfHwgdGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICBsZXQgbWVhc3VyZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlbW90ZS5waW5nKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBpbmdzLnB1c2goRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbmdzLmxlbmd0aCA+IFBJTkdfSElTVE9SWSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGluZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdm9pZCBtZWFzdXJlKCk7XG4gICAgICAgIHRoaXMucGluZ1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCBtZWFzdXJlKCk7XG4gICAgICAgIH0sIFBJTkdfSU5URVJWQUwpO1xuICAgICAgICAodGhpcy5waW5nVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgIH1cblxuICAgIC8qKiBNZWRpYW4gb2YgdGhlIHJlY2VudCBwaW5ncy4gU291cmNlcyB0aGF0IGNhbid0IGJlIHBpbmdlZCBzb3J0IGxhc3QgKEluZmluaXR5KSwgZXhjZXB0IG91clxuICAgICAqICBvd24gaW4tcHJvY2VzcyBzZXJ2ZXIsIHdoaWNoIGlzIHRoZSBiZXN0IHBvc3NpYmxlIHRhcmdldCAoMCkuICovXG4gICAgcHVibGljIGdldExhdGVuY3koKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IFwicmVtb3RlXCIgJiYgdGhpcy5hcGkpIHJldHVybiAwO1xuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5waW5ncy5sZW5ndGgpIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgbGV0IHNvcnRlZCA9IFsuLi50aGlzLnBpbmdzXTtcbiAgICAgICAgc29ydChzb3J0ZWQsIHggPT4geCk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRbTWF0aC5mbG9vcihzb3J0ZWQubGVuZ3RoIC8gMildO1xuICAgIH1cblxuICAgIC8qKiBXcml0ZXMgYWx3YXlzIGdvIHRocm91Z2ggdGhlIEFQSSwgc28gYSBwZXJtaXNzaW9uIGVycm9yIHRocm93cyB0byB0aGUgY2FsbGVyIG9uIGV2ZXJ5IHdyaXRlXG4gICAgICogIChhbmQgYWNjZXNzIGdyYW50ZWQgaW4gdGhlIG1lYW50aW1lIGlzIHBpY2tlZCB1cCBhdXRvbWF0aWNhbGx5KS4gKi9cbiAgICBwdWJsaWMgYXN5bmMgd3JpdGU8VD4ocnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAodGhpcy53cml0ZUJsb2NrZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLndyaXRlQmxvY2tlZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFwaSA9IHRoaXMuYXBpO1xuICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2UgJHt0aGlzLmNvbmZpZy51cmx9IGhhcyBubyBBUEkgYWNjZXNzLCBzbyBpdCBjYW5ub3QgYWNjZXB0IHdyaXRlc2ApO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBydW4oYXBpKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NDYWNoZSA9IHsgaGFzQWNjZXNzOiB0cnVlLCB0aW1lOiBEYXRlLm5vdygpIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5waW5nVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5waW5nVGltZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
223
|
-
/* _JS_SOURCE_HASH = "
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlV3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNvdXJjZVdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFFMUIsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxvREFBaUQ7QUFFakQsaURBQW1HO0FBQ25HLHFEQUFrRDtBQUNsRCwrQ0FBNEM7QUFDNUMsNENBQWlEO0FBQ2pELDZEQUF3RjtBQUUzRSxRQUFBLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsUUFBQSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4QixLQUFLLFVBQVUsaUJBQWlCO0lBQzVCLElBQUksQ0FBQyxJQUFBLGFBQU0sR0FBRTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVCLElBQUksQ0FBQztRQUNELE1BQU0sSUFBQSxxQkFBUyxFQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFBLHFCQUFTLEVBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsbUdBQW1HO0FBQ25HLGtHQUFrRztBQUNsRyw2RkFBNkY7QUFDN0YsOEZBQThGO0FBQzlGLDZGQUE2RjtBQUM3RixNQUFhLGFBQWE7SUFTdEIsWUFDVyxNQUFzQztJQUM3QyxvRkFBb0Y7SUFDNUUsVUFBbUI7UUFGcEIsV0FB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LElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQWxNRCxzQ0FrTUMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuYWxsb3djbGllbnQgPSB0cnVlO1xuXG5pbXBvcnQgeyBpc05vZGUsIHNvcnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBnZXRTZWNyZXQgfSBmcm9tIFwiLi4vLi4vbWlzYy9nZXRTZWNyZXRcIjtcbmltcG9ydCB7IElBcmNoaXZlcywgSG9zdGVkQ29uZmlnLCBCYWNrYmxhemVDb25maWcgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBST1VUSU5HX0ZJTEUsIGdldEJ1Y2tldEJhc2VVcmwsIHBhcnNlSG9zdGVkVXJsLCBwYXJzZUJhY2tibGF6ZVVybCB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuaW1wb3J0IHsgQXJjaGl2ZXNSZW1vdGUgfSBmcm9tIFwiLi9BcmNoaXZlc1JlbW90ZVwiO1xuaW1wb3J0IHsgQXJjaGl2ZXNVcmwgfSBmcm9tIFwiLi9BcmNoaXZlc1VybFwiO1xuaW1wb3J0IHsgQXJjaGl2ZXNCYWNrYmxhemUgfSBmcm9tIFwiLi4vYmFja2JsYXplXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwsIGdldExvY2FsQXJjaGl2ZXMgfSBmcm9tIFwiLi9zdG9yYWdlU2VydmVyU3RhdGVcIjtcblxuZXhwb3J0IGNvbnN0IFJFVFJZX1NUQVJUX0RFTEFZID0gMiAqIDEwMDA7XG5leHBvcnQgY29uc3QgUkVUUllfTUFYX0RFTEFZID0gNSAqIDYwICogMTAwMDtcbmV4cG9ydCBjb25zdCBSRVRSWV9HUk9XVEggPSAxLjU7XG5jb25zdCBBQ0NFU1NfUkVDSEVDS19JTlRFUlZBTCA9IDYwICogMTAwMDtcbmNvbnN0IFBJTkdfSU5URVJWQUwgPSA2MCAqIDEwMDA7XG5jb25zdCBQSU5HX0hJU1RPUlkgPSAxMDtcblxuYXN5bmMgZnVuY3Rpb24gaGFzQmFja2JsYXplQ3JlZHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc05vZGUoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdldFNlY3JldChcImJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5SWRcIik7XG4gICAgICAgIGF3YWl0IGdldFNlY3JldChcImJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5XCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gT25lIHNvdXJjZSBvZiBhIFJlbW90ZUNvbmZpZywgYXMgYSB1c2FibGUgSUFyY2hpdmVzLiBSZWFkcyBmYWxsIGJhY2sgdG8gdGhlIHB1YmxpYy1VUkwgZm9ybSB3aGVuXG4vLyB3ZSBkb24ndCBoYXZlIEFQSSBhY2Nlc3M7IHdyaXRlcyBhbHdheXMgYXR0ZW1wdCB0aGUgQVBJIChzbyBhY2Nlc3MgZ3JhbnRlZCBsYXRlciBpcyBwaWNrZWQgdXAgb25cbi8vIHRoZSBuZXh0IHdyaXRlKS4gV2hlbiBhIGNhbGwgZmFpbHMgd2hpbGUgdGhlIFdlYlNvY2tldCBpcyBkb3duLCBub3RlRmFpbHVyZSBzdGFydHMgYSBiYWNrZ3JvdW5kXG4vLyByZWNvbm5lY3QgbG9vcCB3aXRoIGEgcmFtcGluZyBkZWxheSAtIGl0IG5ldmVyIGJsb2NrcyBjYWxsZXJzLCBpdCBqdXN0IGtlZXBzIHRyeWluZyBzbyB0aGVcbi8vIGNvbm5lY3Rpb24gZXZlbnR1YWxseSBjb21lcyBiYWNrLiBTb3VyY2VzIHdpdGhvdXQgYSBXZWJTb2NrZXQgKGJhY2tibGF6ZSwgVVJMLWZvcm0sIG91ciBvd25cbi8vIGxvY2FsIHNlcnZlcikgcmVwb3J0IGFsd2F5cy1jb25uZWN0ZWQ6IHRoZXkncmUgbGFzdC1yZXNvcnQgc291cmNlcyB3aGVyZSB0aHJvd2luZyBpcyBmaW5lLlxuZXhwb3J0IGNsYXNzIFNvdXJjZVdyYXBwZXIge1xuICAgIHB1YmxpYyBhcGk/OiBJQXJjaGl2ZXM7XG4gICAgcHVibGljIHVybD86IEFyY2hpdmVzVXJsO1xuICAgIHB1YmxpYyB3cml0ZUJsb2NrZWQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZW1vdGU/OiBBcmNoaXZlc1JlbW90ZTtcbiAgICBwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWNvbm5lY3RSdW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhY2Nlc3NDYWNoZT86IHsgaGFzQWNjZXNzOiBib29sZWFuOyB0aW1lOiBudW1iZXIgfTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyxcbiAgICAgICAgLy8gZmFsc2UgZm9yIHNob3J0LWxpdmVkIHByb2JlIGluc3RhbmNlcywgd2hpY2ggbXVzdCBuZXZlciBsZWF2ZSBhIHJldHJ5IGxvb3AgYmVoaW5kXG4gICAgICAgIHByaXZhdGUgYmFja2dyb3VuZDogYm9vbGVhbixcbiAgICApIHsgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGUoY29uZmlnOiBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcsIG9wdGlvbnM/OiB7IGJhY2tncm91bmQ/OiBib29sZWFuIH0pOiBQcm9taXNlPFNvdXJjZVdyYXBwZXI+IHtcbiAgICAgICAgbGV0IHdyYXBwZXIgPSBuZXcgU291cmNlV3JhcHBlcihjb25maWcsIG9wdGlvbnM/LmJhY2tncm91bmQgIT09IGZhbHNlKTtcbiAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSBcImJhY2tibGF6ZVwiKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgaGFzQmFja2JsYXplQ3JlZHMoKSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBpID0gbmV3IEFyY2hpdmVzQmFja2JsYXplKHsgYnVja2V0TmFtZTogcGFyc2VCYWNrYmxhemVVcmwoY29uZmlnLnVybCkuYnVja2V0TmFtZSwgcHVibGljOiBjb25maWcucHVibGljLCBpbW11dGFibGU6IGNvbmZpZy5pbW11dGFibGUgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlci53cml0ZUJsb2NrZWQgPSBgTm8gYmFja2JsYXplIGNyZWRlbnRpYWxzIGZvciAke2NvbmZpZy51cmx9LiBQcm92aWRlIGJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5SWQgYW5kIGJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5IHZpYSBnZXRTZWNyZXQgdG8gZW5hYmxlIEFQSSBhY2Nlc3MuYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlci53cml0ZUJsb2NrZWQgPSBgQnJvd3NlcnMgY2Fubm90IHdyaXRlIHRvIGJhY2tibGF6ZSAoYnVja2V0ICR7Y29uZmlnLnVybH0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghd3JhcHBlci5hcGkgJiYgY29uZmlnLnB1YmxpYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLnVybCA9IG5ldyBBcmNoaXZlc1VybChnZXRCdWNrZXRCYXNlVXJsKGNvbmZpZy51cmwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJzZWQgPSBwYXJzZUhvc3RlZFVybChjb25maWcudXJsKTtcbiAgICAgICAgbGV0IHNlcnZlciA9IGlzTm9kZSgpICYmIGdldFN0b3JhZ2VTZXJ2ZXJDb25maWdPcHRpb25hbCgpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHNlcnZlciAmJiBwYXJzZWQuYWRkcmVzcyA9PT0gc2VydmVyLmRvbWFpbiAmJiBwYXJzZWQucG9ydCA9PT0gc2VydmVyLnBvcnQpIHtcbiAgICAgICAgICAgIC8vIEEgYnVja2V0IGhvc3RlZCBieSBvdXIgb3duIHByb2Nlc3MgLSB1c2UgaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIG91cnNlbHZlc1xuICAgICAgICAgICAgd3JhcHBlci5hcGkgPSBnZXRMb2NhbEFyY2hpdmVzKHBhcnNlZC5hY2NvdW50LCBwYXJzZWQuYnVja2V0TmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVyLnJlbW90ZSA9IG5ldyBBcmNoaXZlc1JlbW90ZSh7IHVybDogY29uZmlnLnVybCwgYWNjb3VudE5hbWU6IGNvbmZpZy5hY2NvdW50TmFtZSwgd2FpdEZvckFjY2VzczogZmFsc2UgfSk7XG4gICAgICAgIHdyYXBwZXIuYXBpID0gd3JhcHBlci5yZW1vdGU7XG4gICAgICAgIGlmIChjb25maWcucHVibGljICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcHBlci51cmwgPSBuZXcgQXJjaGl2ZXNVcmwoZ2V0QnVja2V0QmFzZVVybChjb25maWcudXJsKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHNvdXJjZS8ke3RoaXMuY29uZmlnLnVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZS5pc0Nvbm5lY3RlZCgpO1xuICAgIH1cblxuICAgIC8qKiBDYWxsIGFmdGVyIGEgcmVxdWVzdCBmYWlsZWQgd2hpbGUgaXNDb25uZWN0ZWQoKSB3YXMgZmFsc2U6IHN0YXJ0cyAoaWYgbm90IGFscmVhZHkgcnVubmluZylcbiAgICAgKiAgdGhlIGJhY2tncm91bmQgcmVjb25uZWN0IGxvb3AuIE5ldmVyIGJsb2NrcyAtIHRoZSBmYWlsZWQgcmVxdWVzdCBzdGlsbCB0aHJvd3MuICovXG4gICAgcHVibGljIG5vdGVGYWlsdXJlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYmFja2dyb3VuZCB8fCB0aGlzLmRpc3Bvc2VkIHx8IHRoaXMucmVjb25uZWN0UnVubmluZykgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSByZXR1cm47XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHN0b3JhZ2Ugc291cmNlICR7dGhpcy5jb25maWcudXJsfWApO1xuICAgICAgICB0aGlzLnJlY29ubmVjdFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgICB2b2lkIHRoaXMucmVjb25uZWN0TG9vcCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVjb25uZWN0TG9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJldHJ5RGVsYXkgPSBSRVRSWV9TVEFSVF9ERUxBWTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGF3YWl0IGRlbGF5KHJldHJ5RGVsYXkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSBicmVhaztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gQW55IGNhbGwgcmUtZXN0YWJsaXNoZXMgdGhlIFdlYlNvY2tldDsgdGhlIHJlc3VsdCBkb2Vzbid0IG1hdHRlclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3RlPy5nZXRJbmZvKFJPVVRJTkdfRklMRSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gRXZlbiBhIGZhaWxpbmcgY2FsbCAoZS5nLiBhY2Nlc3MgZGVuaWVkKSBwcm92ZXMgdGhlIGNvbm5lY3Rpb24gaXMgYmFja1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGNvbm5lY3QgdG8gc3RvcmFnZSBzb3VyY2UgJHt0aGlzLmNvbmZpZy51cmx9LCByZXRyeWluZyBpbiAke01hdGgucm91bmQocmV0cnlEZWxheSAvIDEwMDApfXMuICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRyeURlbGF5ID0gTWF0aC5taW4oUkVUUllfTUFYX0RFTEFZLCByZXRyeURlbGF5ICogUkVUUllfR1JPV1RIKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlY29ubmVjdFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coYFJlY29ubmVjdGVkIHRvIHN0b3JhZ2Ugc291cmNlICR7dGhpcy5jb25maWcudXJsfWApO1xuICAgIH1cblxuICAgIC8vIEZvciBob3N0ZWQgc291cmNlczogY2FjaGVkIGFjY2VzcyBjaGVjaywgc28gcmVhZHMga25vdyB3aGV0aGVyIHRvIHVzZSB0aGUgQVBJIG9yIHRoZSBwdWJsaWNcbiAgICAvLyBVUkwgZm9ybS4gQWNjZXNzLCBvbmNlIHNlZW4sIGlzIGFzc3VtZWQgdG8gc3RpY2s7IG5vLWFjY2VzcyBpcyByZS1jaGVja2VkIHBlcmlvZGljYWxseSAodGhlXG4gICAgLy8gY2hlY2sgYWxzbyByZWdpc3RlcnMgb3VyIGFjY2VzcyByZXF1ZXN0IHNlcnZlci1zaWRlLCB3aGljaCBsb2dzIHRoZSBncmFudCBsaW5rKS5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgcmVtb3RlID0gdGhpcy5yZW1vdGU7XG4gICAgICAgIGlmICghcmVtb3RlKSByZXR1cm4gISF0aGlzLmFwaTtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHRoaXMuYWNjZXNzQ2FjaGU7XG4gICAgICAgIGlmIChjYWNoZWQgJiYgKGNhY2hlZC5oYXNBY2Nlc3MgfHwgRGF0ZS5ub3coKSAtIGNhY2hlZC50aW1lIDwgQUNDRVNTX1JFQ0hFQ0tfSU5URVJWQUwpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLmhhc0FjY2VzcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgd2FpdGluZyA9IGF3YWl0IHJlbW90ZS53YWl0aW5nRm9yQWNjZXNzKCk7XG4gICAgICAgIHRoaXMuYWNjZXNzQ2FjaGUgPSB7IGhhc0FjY2VzczogIXdhaXRpbmcsIHRpbWU6IERhdGUubm93KCkgfTtcbiAgICAgICAgaWYgKHdhaXRpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gYWNjZXNzIHRvIHN0b3JhZ2UgYWNjb3VudCBmb3IgJHt0aGlzLmNvbmZpZy51cmx9IChvdXIgbWFjaGluZSAke3dhaXRpbmcubWFjaGluZUlkfSwgaXAgJHt3YWl0aW5nLmlwfSkuIFJlYWRpbmcgdmlhIHRoZSBwdWJsaWMgVVJMIGZvcm0gd2hlcmUgcG9zc2libGUuIEdyYW50IGFjY2VzcyBhdCAke3dhaXRpbmcubGlua31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXdhaXRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWQ8VD4ocnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAodGhpcy5hcGkgJiYgYXdhaXQgdGhpcy5jaGVja0FjY2VzcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnVuKHRoaXMuYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4odGhpcy51cmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFwaSkge1xuICAgICAgICAgICAgLy8gTm8gcHVibGljIFVSTCBmb3JtIC0gbGV0IHRoZSBBUEkgY2FsbCB0aHJvdyBpdHMgb3duIGVycm9yICh3aGljaCBpbmNsdWRlcyB0aGUgYWNjZXNzXG4gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbnMgZm9yIGhvc3RlZCBzb3VyY2VzKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bih0aGlzLmFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2UgJHt0aGlzLmNvbmZpZy51cmx9IGhhcyBubyBBUEkgYWNjZXNzIGFuZCBubyBwdWJsaWMgVVJMIGZvcm0gKHB1YmxpYzogZmFsc2UpYCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy53cml0ZUJsb2NrZWQgfHwgIXRoaXMuYXBpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFwaS5oYXNXcml0ZUFjY2VzcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGluZ3M6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSBwaW5nVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGxvZ2dlZENvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFN0YXJ0cyBtZWFzdXJpbmcgdGhpcyBzb3VyY2UncyBsYXRlbmN5IChmb3IgdmFyaWFibGUtc2hhcmQgdGFyZ2V0IHByZWZlcmVuY2UpLiBPbmx5IGhvc3RlZFxuICAgICAqICByZW1vdGVzIGFyZSBwaW5nZWQ7IG91ciBvd24gbG9jYWwgc2VydmVyIGNvdW50cyBhcyAwLCBldmVyeXRoaW5nIGVsc2UgYXMgSW5maW5pdHkuICovXG4gICAgcHVibGljIHN0YXJ0UGluZ2luZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3RlID0gdGhpcy5yZW1vdGU7XG4gICAgICAgIGlmICghcmVtb3RlIHx8IHRoaXMucGluZ1RpbWVyIHx8IHRoaXMuZGlzcG9zZWQpIHJldHVybjtcbiAgICAgICAgbGV0IG1lYXN1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZW1vdGUucGluZygpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gQSBmYWlsZWQgcGluZyBpcyBhbHNvIG91ciBlYXJsaWVzdCBkb3duLWRldGVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VkQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZWRDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb25uZWN0ZWQgdG8gc3RvcmFnZSBzb3VyY2UgJHt0aGlzLmNvbmZpZy51cmx9ICgke0RhdGUubm93KCkgLSBzdGFydH1tcylgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGluZ3MucHVzaChEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGluZ3MubGVuZ3RoID4gUElOR19ISVNUT1JZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waW5ncy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2b2lkIG1lYXN1cmUoKTtcbiAgICAgICAgdGhpcy5waW5nVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIG1lYXN1cmUoKTtcbiAgICAgICAgfSwgUElOR19JTlRFUlZBTCk7XG4gICAgICAgICh0aGlzLnBpbmdUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLyoqIE1lZGlhbiBvZiB0aGUgcmVjZW50IHBpbmdzLiBTb3VyY2VzIHRoYXQgY2FuJ3QgYmUgcGluZ2VkIHNvcnQgbGFzdCAoSW5maW5pdHkpLCBleGNlcHQgb3VyXG4gICAgICogIG93biBpbi1wcm9jZXNzIHNlcnZlciwgd2hpY2ggaXMgdGhlIGJlc3QgcG9zc2libGUgdGFyZ2V0ICgwKS4gKi9cbiAgICBwdWJsaWMgZ2V0TGF0ZW5jeSgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMucmVtb3RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gXCJyZW1vdGVcIiAmJiB0aGlzLmFwaSkgcmV0dXJuIDA7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBpbmdzLmxlbmd0aCkgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICBsZXQgc29ydGVkID0gWy4uLnRoaXMucGluZ3NdO1xuICAgICAgICBzb3J0KHNvcnRlZCwgeCA9PiB4KTtcbiAgICAgICAgcmV0dXJuIHNvcnRlZFtNYXRoLmZsb29yKHNvcnRlZC5sZW5ndGggLyAyKV07XG4gICAgfVxuXG4gICAgLyoqIFdyaXRlcyBhbHdheXMgZ28gdGhyb3VnaCB0aGUgQVBJLCBzbyBhIHBlcm1pc3Npb24gZXJyb3IgdGhyb3dzIHRvIHRoZSBjYWxsZXIgb24gZXZlcnkgd3JpdGVcbiAgICAgKiAgKGFuZCBhY2Nlc3MgZ3JhbnRlZCBpbiB0aGUgbWVhbnRpbWUgaXMgcGlja2VkIHVwIGF1dG9tYXRpY2FsbHkpLiAqL1xuICAgIHB1YmxpYyBhc3luYyB3cml0ZTxUPihydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLndyaXRlQmxvY2tlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMud3JpdGVCbG9ja2VkKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXBpID0gdGhpcy5hcGk7XG4gICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSAke3RoaXMuY29uZmlnLnVybH0gaGFzIG5vIEFQSSBhY2Nlc3MsIHNvIGl0IGNhbm5vdCBhY2NlcHQgd3JpdGVzYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJ1bihhcGkpO1xuICAgICAgICB0aGlzLmFjY2Vzc0NhY2hlID0geyBoYXNBY2Nlc3M6IHRydWUsIHRpbWU6IERhdGUubm93KCkgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnBpbmdUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBpbmdUaW1lcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
231
|
+
/* _JS_SOURCE_HASH = "53f9ac041dc89756cc30d98e2196f886861b780f1b4cf4115214d64c4ceaf38c"; */
|