From 9927db2670f6b024590fa1e4461512d44fb0ad41 Mon Sep 17 00:00:00 2001 From: exoego Date: Sat, 11 May 2024 10:18:22 +0900 Subject: [PATCH] Fix diff calculation --- dist/index.mjs | 20 +++++++++++++------- src/compare.ts | 18 ++++++++++++------ src/types.ts | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/dist/index.mjs b/dist/index.mjs index 7fe76b8..7009a1b 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -6581,14 +6581,19 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe const baseStats = base[outfile]; if (!currentStats) { hasAnyChange = true; - return { ...baseStats, diff: -1, remark: "deleted", tree: void 0 }; + return { + ...baseStats, + baseBytes: -1, + remark: "deleted", + tree: void 0 + }; } const tree = fileTree.get( treeKey(currentStats.metafile, currentStats.outfile) ); if (!baseStats) { hasAnyChange = true; - return { ...currentStats, diff: -1, remark: "added", tree }; + return { ...currentStats, baseBytes: -1, remark: "added", tree }; } const diff = currentStats.bytes - baseStats.bytes; if (diff !== 0) { @@ -6596,7 +6601,7 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe } return { ...currentStats, - diff, + baseBytes: baseStats.bytes, tree, remark: Math.sign(diff) ? "increased" : "decreased" }; @@ -6832,10 +6837,11 @@ function renderNote(d, redThreshold) { if (d.remark === "added") { return "\u{1F195} Added"; } - if (d.diff) { - const percentChange = d.diff / d.bytes * 100; + const diff = d.bytes - d.baseBytes; + if (diff !== 0) { + const percentChange = diff / d.baseBytes * 100; return `${renderStatusIndicator(percentChange, redThreshold)}${filesize( - d.diff + diff )} (${sign(percentChange)}${percentChange.toFixed(1)}%)`; } return "\u2705 No change"; @@ -6893,4 +6899,4 @@ if (import.meta.url === pathToFileURL(process.argv[1]).href) { export { run }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb21wYXJlLnRzIiwgIi4uL3NyYy9yZXBvcnQudHMiLCAiLi4vc3JjL3V0aWxzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBjb21wYXJlIH0gZnJvbSBcIi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgcmVwb3J0IH0gZnJvbSBcIi4vcmVwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldFNpbmdsZUlucHV0IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gZ2V0SW5wdXQoKTogSW5wdXQge1xuXHRjb25zdCByYXdNZXRhZmlsZXMgPSBnZXRTaW5nbGVJbnB1dChcIm1ldGFmaWxlc1wiKTtcblx0aWYgKCFyYXdNZXRhZmlsZXMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZmlsZXMgaXMgbm90IHNwZWNpZmllZFwiKTtcblx0fVxuXHRjb25zdCBuYW1lID0gZ2V0U2luZ2xlSW5wdXQoXCJuYW1lXCIpO1xuXHRpZiAoIW5hbWUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIG5vdCBzcGVjaWZpZWRcIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50RXh0cmFBdHRlbnRpb246IE51bWJlci5wYXJzZUludChcblx0XHRcdGdldFNpbmdsZUlucHV0KFwicGVyY2VudF9leHRyYV9hdHRlbnRpb25cIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRzaG93RGV0YWlsczogW1widHJ1ZVwiLCBcIlRydWVcIiwgXCJUUlVFXCJdLmluY2x1ZGVzKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJzaG93X2RldGFpbHNcIikgfHwgXCJ0cnVlXCIsXG5cdFx0KSxcblx0XHR0b3BOTGFyZ2VzdFBhdGhzOiBOdW1iZXIucGFyc2VJbnQoXG5cdFx0XHRnZXRTaW5nbGVJbnB1dChcInRvcF9uX2xhcmdlc3RfcGF0aHNcIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRpbmNsdWRlRXh0ZW5zaW9uczogKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJpbmNsdWRlX2V4dGVuc2lvbnNcIikgfHwgXCIuanMsLm1qcywuY2pzXCJcblx0XHQpLnNwbGl0KFwiLFwiKSxcblx0XHRuYW1lLFxuXHRcdGFuYWx5emVyRGlyZWN0b3J5OiBnZXRTaW5nbGVJbnB1dChcImFuYWx5emVfZGlyZWN0b3J5XCIpIHx8IFwiLmFuYWx5emVyXCIsXG5cdFx0bWV0YWZpbGVzOiByYXdNZXRhZmlsZXMuc3BsaXQoXCIsXCIpLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuKGlucHV0OiBJbnB1dCA9IGdldElucHV0KCkpOiB2b2lkIHtcblx0cmVwb3J0KGlucHV0KTtcblx0Y29tcGFyZShpbnB1dCk7XG59XG5cbmlmIChpbXBvcnQubWV0YS51cmwgPT09IHBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5hcmd2WzFdKS5ocmVmKSB7XG5cdHJ1bigpO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmluZE1ldGFmaWxlcyB9IGZyb20gXCIuL3JlcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJlUmVzdWx0LCBJbnB1dCwgUmVwb3J0LCBUcmVlTWFwTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkQW5hbHlzaXNKc29uLCBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShpbnB1dDogSW5wdXQpOiB2b2lkIHtcblx0bGV0IGhhc0FueUNoYW5nZSA9IGZhbHNlO1xuXHRsZXQgb3V0cHV0ID0gYCMjIFx1RDgzRFx1RENFNiBlc2J1aWxkIEJ1bmRsZSBBbmFseXNpcyBmb3IgJHtpbnB1dC5uYW1lfVxuXG5UaGlzIGFuYWx5c2lzIHdhcyBnZW5lcmF0ZWQgYnkgW2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyXShodHRwczovL2dpdGh1Yi5jb20vZXhvZWdvL2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyKS4gXHVEODNFXHVERDE2XG5gO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSBsb2FkQW5hbHlzaXNKc29uKFxuXHRcdHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSwgXCJidW5kbGVfYW5hbHlzaXMuanNvblwiKSxcblx0KTtcblx0Y29uc3QgYmFzZSA9IGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0KTtcblxuXHRjb25zdCBmaWxlVHJlZSA9IGJ1aWxkRmlsZVRyZWUoaW5wdXQpO1xuXG5cdGNvbnN0IGFsbE91dEZpbGVzOiBzdHJpbmdbXSA9IFtcblx0XHQuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhjdXJyZW50KSwgLi4uT2JqZWN0LmtleXMoYmFzZSldKSxcblx0XS5zb3J0KCk7XG5cblx0Y29uc3QgY29tcGFyaXNvbjogQXJyYXk8Q29tcGFyZVJlc3VsdD4gPSBhbGxPdXRGaWxlcy5tYXAoKG91dGZpbGUpID0+IHtcblx0XHRjb25zdCBjdXJyZW50U3RhdHMgPSBjdXJyZW50W291dGZpbGVdO1xuXHRcdGNvbnN0IGJhc2VTdGF0cyA9IGJhc2Vbb3V0ZmlsZV07XG5cblx0XHRpZiAoIWN1cnJlbnRTdGF0cykge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdHJldHVybiB7IC4uLmJhc2VTdGF0cywgZGlmZjogLTEsIHJlbWFyazogXCJkZWxldGVkXCIsIHRyZWU6IHVuZGVmaW5lZCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IHRyZWUgPSBmaWxlVHJlZS5nZXQoXG5cdFx0XHR0cmVlS2V5KGN1cnJlbnRTdGF0cy5tZXRhZmlsZSwgY3VycmVudFN0YXRzLm91dGZpbGUpLFxuXHRcdCk7XG5cdFx0aWYgKCFiYXNlU3RhdHMpIHtcblx0XHRcdGhhc0FueUNoYW5nZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4geyAuLi5jdXJyZW50U3RhdHMsIGRpZmY6IC0xLCByZW1hcms6IFwiYWRkZWRcIiwgdHJlZSB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpZmYgPSBjdXJyZW50U3RhdHMuYnl0ZXMgLSBiYXNlU3RhdHMuYnl0ZXM7XG5cdFx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRcdGhhc0FueUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5jdXJyZW50U3RhdHMsXG5cdFx0XHRkaWZmLFxuXHRcdFx0dHJlZSxcblx0XHRcdHJlbWFyazogTWF0aC5zaWduKGRpZmYpID8gXCJpbmNyZWFzZWRcIiA6IFwiZGVjcmVhc2VkXCIsXG5cdFx0fTtcblx0fSk7XG5cblx0aWYgKGhhc0FueUNoYW5nZSkge1xuXHRcdG91dHB1dCArPSBtYXJrZG93blRhYmxlKGNvbXBhcmlzb24sIGlucHV0LnBlcmNlbnRFeHRyYUF0dGVudGlvbik7XG5cdFx0b3V0cHV0ICs9IGZpbGVTaXplVGFibGUoY29tcGFyaXNvbiwgaW5wdXQudG9wTkxhcmdlc3RQYXRocyk7XG5cdFx0b3V0cHV0ICs9IGRldGFpbChpbnB1dCk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0cHV0ICs9IFwiVGhpcyBQUiBpbnRyb2R1Y2VkIG5vIGNoYW5nZXMgdG8gdGhlIGVzYnVpbGQgYnVuZGxlISBcdUQ4M0RcdURFNENcIjtcblx0fVxuXG5cdC8vIHdlIGFkZCB0aGlzIHRhZyBzbyB0aGF0IG91ciBhY3Rpb24gY2FuIGJlIGFibGUgdG8gZWFzaWx5IGFuZFxuXHQvLyBjb25zaXN0ZW50bHkgZmluZCB0aGUgcmlnaHQgY29tbWVudCB0byBlZGl0IGFzIG1vcmUgY29tbWl0cyBhcmUgcHVzaGVkLlxuXHRvdXRwdXQgKz0gYDwhLS0gX19FU0JVSUxEX0JVTkRMRV8ke2lucHV0Lm5hbWV9IC0tPmA7XG5cblx0d3JpdGVDb21tZW50KGlucHV0LCBvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB0cmVlS2V5KG1ldGFmaWxlOiBzdHJpbmcsIG91dGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgJHttZXRhZmlsZX0gLT4gJHtvdXRmaWxlfWA7XG59XG5cbi8vIFdyaXRlIHRoZSBvdXRwdXQgdG8gYSBmaWxlIHdoaWNoIGlzIGxhdGVyIHJlYWQgaW5cbi8vIGFzIGNvbW1lbnQgY29udGVudHMgYnkgdGhlIGFjdGlvbnMgd29ya2Zsb3cuXG5mdW5jdGlvbiB3cml0ZUNvbW1lbnQoaW5wdXQ6IElucHV0LCBvdXRwdXQ6IHN0cmluZyk6IHZvaWQge1xuXHRmcy5ta2RpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGlucHV0LmFuYWx5emVyRGlyZWN0b3J5KSwge1xuXHRcdHJlY3Vyc2l2ZTogdHJ1ZSxcblx0fSk7XG5cdGZzLndyaXRlRmlsZVN5bmMoXG5cdFx0cGF0aC5qb2luKFxuXHRcdFx0cHJvY2Vzcy5jd2QoKSxcblx0XHRcdGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LFxuXHRcdFx0XCJidW5kbGVfYW5hbHlzaXNfY29tbWVudC50eHRcIixcblx0XHQpLFxuXHRcdG91dHB1dC50cmltKCksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGRldGFpbChpbnB1dDogSW5wdXQpOiBzdHJpbmcge1xuXHRpZiAoIWlucHV0LnNob3dEZXRhaWxzKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0cmV0dXJuIGBcXG48ZGV0YWlscz5cbjxzdW1tYXJ5PkRldGFpbHM8L3N1bW1hcnk+XG48cD5OZXh0IHRvIHRoZSBzaXplIGlzIGhvdyBtdWNoIHRoZSBzaXplIGhhcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGNvbXBhcmVkIHdpdGggdGhlIGJhc2UgYnJhbmNoIG9mIHRoaXMgUFIuPC9wPlxuPHVsPlxuPGxpPlx1MjAzQ1x1RkUwRjogU2l6ZSBpbmNyZWFzZWQgYnkgJHtpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb259JSBvciBtb3JlLiBTcGVjaWFsIGF0dGVudGlvbiBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhpcy48L2xpPlxuPGxpPlx1MjZBMFx1RkUwRjogU2l6ZSBpbmNyZWFzZWQgaW4gYWNjZXB0YWJsZSByYW5nZSAobG93ZXIgdGhhbiAke2lucHV0LnBlcmNlbnRFeHRyYUF0dGVudGlvbn0lKS48L2xpPlxuPGxpPlx1MjcwNTogTm8gY2hhbmdlIG9yIGV2ZW4gZG93bnNpemVkLjwvbGk+XG48bGk+XHVEODNEXHVEREQxXHVGRTBGOiBUaGUgb3V0IGZpbGUgaXMgZGVsZXRlZDogbm90IGZvdW5kIGluIGJhc2UgYnJhbmNoLjwvbGk+XG48bGk+XHVEODNDXHVERDk1OiBUaGUgb3V0IGZpbGUgaXMgbmV3bHkgZm91bmQ6IHdpbGwgYmUgYWRkZWQgdG8gYmFzZSBicmFuY2guPC9saT5cbjwvdWw+XG48L2RldGFpbHM+XFxuYDtcbn1cblxuZnVuY3Rpb24gbG9hZEJhc2VBbmFseXNpc0pzb24oaW5wdXQ6IElucHV0KTogUmVwb3J0IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbG9hZEFuYWx5c2lzSnNvbihcblx0XHRcdHBhdGguam9pbihcblx0XHRcdFx0cHJvY2Vzcy5jd2QoKSxcblx0XHRcdFx0aW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksXG5cdFx0XHRcdFwiYmFzZS9idW5kbGUvYnVuZGxlX2FuYWx5c2lzLmpzb25cIixcblx0XHRcdCksXG5cdFx0KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIEVtcHR5IGlmIG5vIGJhc2UgYW5hbHlzaXMgZm91bmQuXG5cdFx0Ly8gVGhpcyBpcyBhIGNhc2Ugd2hlbiBhbmFseXplciBpcyBmaXJzdCBzZXQgdXAgb3IgYWxsIGFydGlmYWN0cyBhcmUgZXhwaXJlZC5cblx0XHRyZXR1cm4ge307XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRGaWxlVHJlZShpbnB1dDogSW5wdXQpIHtcblx0ZnVuY3Rpb24gYnVpbGRSb290KFxuXHRcdGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB7IGJ5dGVzSW5PdXRwdXQ6IG51bWJlciB9Pixcblx0KTogVHJlZU1hcE5vZGUge1xuXHRcdGNvbnN0IHJvb3Q6IFRyZWVNYXBOb2RlID0geyBuYW1lOiBcIlwiLCBwYXRoOiBcIlwiLCB2YWx1ZTogMCwgY2hpbGRyZW46IFtdIH07XG5cdFx0Zm9yIChjb25zdCBbZmlsZVBhdGgsIHsgYnl0ZXNJbk91dHB1dCB9XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcblx0XHRcdGNvbnN0IGRpcmVjdG9yaWVzID0gZmlsZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0YnVpbGROb2RlKHJvb3QsIGRpcmVjdG9yaWVzLCBieXRlc0luT3V0cHV0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblxuXHRmdW5jdGlvbiBidWlsZE5vZGUoXG5cdFx0bm9kZTogVHJlZU1hcE5vZGUsXG5cdFx0cGF0aHM6IEFycmF5PHN0cmluZz4sXG5cdFx0dmFsdWU6IG51bWJlcixcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlyc3QgPSBwYXRocy5zaGlmdCgpO1xuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBsZWFmIG5vZGUgKGZpbGUpXG5cdFx0XHRub2RlLnZhbHVlICs9IHZhbHVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgY2hpbGQgPSBub2RlLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09PSBmaXJzdCk7XG5cdFx0aWYgKCFjaGlsZCkge1xuXHRcdFx0Y2hpbGQgPSB7XG5cdFx0XHRcdG5hbWU6IGZpcnN0LFxuXHRcdFx0XHRwYXRoOiBgJHtub2RlLnBhdGh9LyR7Zmlyc3R9YC5yZXBsYWNlKC9eXFwvLywgXCJcIiksXG5cdFx0XHRcdHZhbHVlOiAwLFxuXHRcdFx0XHRjaGlsZHJlbjogW10sXG5cdFx0XHR9O1xuXHRcdFx0bm9kZS5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblx0XHR9XG5cdFx0bm9kZS52YWx1ZSArPSB2YWx1ZTtcblx0XHRidWlsZE5vZGUoY2hpbGQsIHBhdGhzLCB2YWx1ZSk7XG5cdH1cblxuXHRjb25zdCB0cmVlcyA9IG5ldyBNYXA8c3RyaW5nLCBUcmVlTWFwTm9kZT4oKTtcblx0aWYgKGlucHV0LnRvcE5MYXJnZXN0UGF0aHMgPD0gMCkge1xuXHRcdC8vIFNraXAgYnVpbGRpbmcgdHJlZSBpZiB3ZSBkb24ndCBuZWVkIGl0LlxuXHRcdHJldHVybiB0cmVlcztcblx0fVxuXHRmb3IgKGNvbnN0IHsgcmVsYXRpdmVQYXRoLCBhYnNvbHV0ZVBhdGggfSBvZiBmaW5kTWV0YWZpbGVzKGlucHV0KSkge1xuXHRcdGNvbnN0IG1ldGFmaWxlSnNvbiA9IGxvYWRNZXRhRmlsZShhYnNvbHV0ZVBhdGgpO1xuXHRcdGZvciAoY29uc3QgW291dGZpbGUsIGJ1aWxkTWV0YV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWZpbGVKc29uLm91dHB1dHMpKSB7XG5cdFx0XHRjb25zdCB0cmVlID0gYnVpbGRSb290KGJ1aWxkTWV0YS5pbnB1dHMpO1xuXHRcdFx0dHJlZXMuc2V0KHRyZWVLZXkocmVsYXRpdmVQYXRoLCBvdXRmaWxlKSwgdHJlZSk7XG5cblx0XHRcdGZzLndyaXRlRmlsZVN5bmMoXG5cdFx0XHRcdHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSwgXCJ0cmVlLmpzb25cIiksXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KHRyZWUsIG51bGwsIDIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRyZWVzO1xufVxuXG5jb25zdCBzcGFjZXIgPSBcIlx1MDBBMFwiO1xuZnVuY3Rpb24gZmlsZXNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG5cdGNvbnN0IHNpZ24gPSBieXRlcyA8IDAgPyBcIi1cIiA6IFwiXCI7XG5cdGNvbnN0IG4gPSBNYXRoLmFicyhieXRlcyk7XG5cdGlmIChuIDwgMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7bn0ke3NwYWNlcn1CYDtcblx0fVxuXHRpZiAobiA8IDEwMDAgKiAxMDAwKSB7XG5cdFx0cmV0dXJuIGAke3NpZ259JHsobiAvIDEwMDApLnRvRml4ZWQoMil9JHtzcGFjZXJ9S0JgO1xuXHR9XG5cdGlmIChuIDwgMTAwMCAqIDEwMDAgKiAxMDAwKSB7XG5cdFx0cmV0dXJuIGAke3NpZ259JHsobiAvIDEwMDAgLyAxMDAwKS50b0ZpeGVkKDIpfSR7c3BhY2VyfU1CYDtcblx0fVxuXHRpZiAobiA8IDEwMDAgKiAxMDAwICogMTAwMCAqIDEwMDApIHtcblx0XHRyZXR1cm4gYCR7c2lnbn0keyhuIC8gMTAwMCAvIDEwMDAgLyAxMDAwKS50b0ZpeGVkKDIpfSR7c3BhY2VyfUdCYDtcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXCJUb28gbGFyZ2UgZmlsZSBzaXplISEgQXJlIHlvdSBzdXJlP1wiKTtcbn1cblxuZnVuY3Rpb24gbWFya2Rvd25UYWJsZShcblx0ZGF0YTogQXJyYXk8Q29tcGFyZVJlc3VsdD4sXG5cdHJlZFRocmVzaG9sZDogbnVtYmVyLFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgcm93cyA9IGRhdGFcblx0XHQubWFwKChkKSA9PiB7XG5cdFx0XHRyZXR1cm4gYCR7ZC5tZXRhZmlsZX0gfCAke2Qub3V0ZmlsZX0gfCAke3JlbmRlclNpemUoZCl9IHwgJHtyZW5kZXJOb3RlKFxuXHRcdFx0XHRkLFxuXHRcdFx0XHRyZWRUaHJlc2hvbGQsXG5cdFx0XHQpfVxcbmA7XG5cdFx0fSlcblx0XHQuam9pbihcIlwiKTtcblxuXHRyZXR1cm4gYFxuTWV0YSBGaWxlIHwgT3V0IEZpbGUgIHwgU2l6ZSAocmF3KSB8IE5vdGUgXG4tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS06fC0tLS0tLVxuJHtyb3dzfWA7XG59XG5cbi8qKlxuICogRmluZCB0aGUgdG9wIE4gbGFyZ2VzdCBub2RlcyBpbiByb290IHRyZWUuXG4gKiBEaWcgbm9kZXMgdW50aWwgdGhlIGRlcHRoIG9mIDMuXG4gKi9cbmZ1bmN0aW9uIGZpbmRMYXJnZURpcmVjdG9yaWVzKHJvb3Q6IFRyZWVNYXBOb2RlLCBOOiBudW1iZXIpIHtcblx0Y29uc3Qgbm9kZXM6IFRyZWVNYXBOb2RlW10gPSBbXTtcblx0Y29uc3QgcXVldWU6IEFycmF5PHsgbm9kZTogVHJlZU1hcE5vZGU7IGRlcHRoOiBudW1iZXIgfT4gPSBbXG5cdFx0eyBub2RlOiByb290LCBkZXB0aDogMCB9LFxuXHRdO1xuXHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IHNoaWZ0ID0gcXVldWUuc2hpZnQoKTtcblx0XHRpZiAoIXNoaWZ0KSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y29uc3QgeyBub2RlLCBkZXB0aCB9ID0gc2hpZnQ7XG5cdFx0aWYgKGRlcHRoID09PSAzKSB7XG5cdFx0XHRub2Rlcy5wdXNoKG5vZGUpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIG5vZGUuY2hpbGRyZW4pIHtcblx0XHRcdFx0cXVldWUucHVzaCh7IG5vZGU6IGl0ZW0sIGRlcHRoOiBkZXB0aCArIDEgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGxhcmdlTm9kZXMgPSBub2Rlcy5zb3J0KChhLCBiKSA9PiBiLnZhbHVlIC0gYS52YWx1ZSkuc2xpY2UoMCwgTik7XG5cdHJldHVybiB7XG5cdFx0bGFyZ2VOb2Rlcyxcblx0XHRoYXNPdGhlcjogbm9kZXMubGVuZ3RoID4gTixcblx0fTtcbn1cblxuZnVuY3Rpb24gZml4ZWRQZXJjZW50KG46IG51bWJlciwgZDogbnVtYmVyKTogbnVtYmVyIHtcblx0cmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KCgobiAvIGQpICogMTAwKS50b0ZpeGVkKDEpKTtcbn1cblxuZnVuY3Rpb24gZmlsZVNpemVUYWJsZShcblx0ZGF0YTogQXJyYXk8Q29tcGFyZVJlc3VsdD4sXG5cdHRvcE5MYXJnZXN0UGF0aHM6IG51bWJlcixcbik6IHN0cmluZyB7XG5cdGlmIChkYXRhLmxlbmd0aCA9PT0gMCB8fCB0b3BOTGFyZ2VzdFBhdGhzIDw9IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRsZXQgb3V0cHV0ID0gXCJcIjtcblx0b3V0cHV0ICs9IFwiPGRldGFpbHM+XFxuXCI7XG5cdG91dHB1dCArPSBcIjxzdW1tYXJ5Pkxhcmdlc3QgcGF0aHM8L3N1bW1hcnk+XFxuXCI7XG5cdG91dHB1dCArPSBgVGhlc2UgdmlzdWFsaXphdGlvbiBzaG93cyB0b3AgJHt0b3BOTGFyZ2VzdFBhdGhzfSBsYXJnZXN0IHBhdGhzIGluIHRoZSBidW5kbGUuXFxuYDtcblx0Zm9yIChjb25zdCBkIG9mIGRhdGEpIHtcblx0XHRvdXRwdXQgKz0gXCJcXG5cIjtcblx0XHRvdXRwdXQgKz0gYCMjIE1ldGEgZmlsZTogJHtkLm1ldGFmaWxlfSwgT3V0IGZpbGU6ICR7ZC5vdXRmaWxlfVxcbmA7XG5cdFx0aWYgKCFkLnRyZWUpIHtcblx0XHRcdG91dHB1dCArPSBcIlx1RkUwRlx1RkUwRlx1RDgzRFx1REREMVx1RkUwRkRlbGV0ZWRcXG5cIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRvdXRwdXQgKz0gXCJ8IFBhdGggfCBTaXplIHxcXG5cIjtcblx0XHRvdXRwdXQgKz0gXCJ8LS0tLS0tfC0tLS0tLS18XFxuXCI7XG5cdFx0Y29uc3QgdG90YWxTaXplID0gZC50cmVlLnZhbHVlO1xuXHRcdGNvbnN0IHsgbGFyZ2VOb2RlcywgaGFzT3RoZXIgfSA9IGZpbmRMYXJnZURpcmVjdG9yaWVzKFxuXHRcdFx0ZC50cmVlLFxuXHRcdFx0dG9wTkxhcmdlc3RQYXRocyxcblx0XHQpO1xuXHRcdGZvciAoY29uc3QgeyBwYXRoLCB2YWx1ZSB9IG9mIGxhcmdlTm9kZXMpIHtcblx0XHRcdGNvbnN0IHBlcmNlbnQgPSBmaXhlZFBlcmNlbnQodmFsdWUsIHRvdGFsU2l6ZSk7XG5cdFx0XHRvdXRwdXQgKz0gYHwgJHtwYXRofSB8ICR7cmVuZGVyQmFyKHBlcmNlbnQsIHZhbHVlKX0gfFxcbmA7XG5cdFx0fVxuXHRcdGlmIChoYXNPdGhlcikge1xuXHRcdFx0Y29uc3Qgb3RoZXJTaXplID0gdG90YWxTaXplIC0gbGFyZ2VOb2Rlc1swXS52YWx1ZTtcblx0XHRcdGNvbnN0IG90aGVyUGVyY2VudCA9IGZpeGVkUGVyY2VudChvdGhlclNpemUsIHRvdGFsU2l6ZSk7XG5cdFx0XHRvdXRwdXQgKz0gYHwgKG90aGVyKSB8ICR7cmVuZGVyQmFyKG90aGVyUGVyY2VudCwgb3RoZXJTaXplKX0gfFxcbmA7XG5cdFx0fVxuXHR9XG5cdG91dHB1dCArPSBcIjwvZGV0YWlscz5cXG5cIjtcblx0cmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFyKHBlcmNlbnQ6IG51bWJlciwgYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG5cdGNvbnN0IGJhciA9IHByb2dyZXNzKHBlcmNlbnQgLyAxMDApO1xuXHRyZXR1cm4gYFxcJHt7XFxcXGNvbG9ye0dvbGRlbnJvZH17ICR7YmFyfSB9fX1cXCQgJHtwZXJjZW50LnRvRml4ZWQoXG5cdFx0MSxcblx0KX0lLCAke2ZpbGVzaXplKGJ5dGVzKX1gO1xufVxuXG4vLyBCbG9jayBwcm9ncmVzc2lvbiBpcyAxLzggPSAwLjEyNVxuY29uc3QgYmxvY2tzID0gW1wiXCIsIFwiXHUyNThGXCIsIFwiXHUyNThFXCIsIFwiXHUyNThEXCIsIFwiXHUyNThDXCIsIFwiXHUyNThCXCIsIFwiXHUyNThBXCIsIFwiXHUyNTg5XCIsIFwiXHUyNTg4XCJdO1xuY29uc3QgcHJvZ3Jlc3Npb24gPSAxIC8gKGJsb2Nrcy5sZW5ndGggLSAxKTtcbmZ1bmN0aW9uIHByb2dyZXNzKHZhbHVlOiBudW1iZXIsIGxlbmd0aCA9IDI1LCB2bWluID0gMC4wLCB2bWF4ID0gMS4wKSB7XG5cdGNvbnN0IHYgPSB2YWx1ZSAqIGxlbmd0aDtcblx0Y29uc3QgaW50ZWdlclBhcnQgPSBNYXRoLmZsb29yKHYpO1xuXHRjb25zdCBmcmFjdGlvbmFsUGFydCA9IHYgLSBpbnRlZ2VyUGFydDtcblx0Y29uc3QgaSA9IE1hdGgucm91bmQoXG5cdFx0KHByb2dyZXNzaW9uICogTWF0aC5mbG9vcihmcmFjdGlvbmFsUGFydCAvIHByb2dyZXNzaW9uKSkgLyBwcm9ncmVzc2lvbixcblx0KTtcblx0cmV0dXJuIFwiXHUyNTg4XCIucmVwZWF0KGludGVnZXJQYXJ0KSArIGJsb2Nrc1tpXTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2l6ZShkOiBDb21wYXJlUmVzdWx0KTogc3RyaW5nIHtcblx0cmV0dXJuIGZpbGVzaXplKGQuYnl0ZXMpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJOb3RlKGQ6IENvbXBhcmVSZXN1bHQsIHJlZFRocmVzaG9sZDogbnVtYmVyKTogc3RyaW5nIHtcblx0aWYgKGQucmVtYXJrID09PSBcImRlbGV0ZWRcIikge1xuXHRcdHJldHVybiBcIlx1RDgzRFx1REREMVx1RkUwRiBEZWxldGVkXCI7XG5cdH1cblx0aWYgKGQucmVtYXJrID09PSBcImFkZGVkXCIpIHtcblx0XHRyZXR1cm4gXCJcdUQ4M0NcdUREOTUgQWRkZWRcIjtcblx0fVxuXHRpZiAoZC5kaWZmKSB7XG5cdFx0Y29uc3QgcGVyY2VudENoYW5nZSA9IChkLmRpZmYgLyBkLmJ5dGVzKSAqIDEwMDtcblx0XHRyZXR1cm4gYCR7cmVuZGVyU3RhdHVzSW5kaWNhdG9yKHBlcmNlbnRDaGFuZ2UsIHJlZFRocmVzaG9sZCl9JHtmaWxlc2l6ZShcblx0XHRcdGQuZGlmZixcblx0XHQpfSAoJHtzaWduKHBlcmNlbnRDaGFuZ2UpfSR7cGVyY2VudENoYW5nZS50b0ZpeGVkKDEpfSUpYDtcblx0fVxuXHRyZXR1cm4gXCJcdTI3MDUgIE5vIGNoYW5nZVwiO1xufVxuXG5mdW5jdGlvbiBzaWduKG51bTogbnVtYmVyKTogc3RyaW5nIHtcblx0cmV0dXJuIG51bSA8IDAgPyBcIlwiIDogXCIrXCI7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0YXR1c0luZGljYXRvcihcblx0cGVyY2VudENoYW5nZTogbnVtYmVyLFxuXHRyZWRUaHJlc2hvbGQ6IG51bWJlcixcbik6IHN0cmluZyB7XG5cdGxldCByZXM6IHN0cmluZztcblx0aWYgKHBlcmNlbnRDaGFuZ2UgPiAwICYmIHBlcmNlbnRDaGFuZ2UgPCByZWRUaHJlc2hvbGQpIHtcblx0XHRyZXMgPSBcIlx1MjZBMFx1RkUwRlwiO1xuXHR9IGVsc2UgaWYgKHBlcmNlbnRDaGFuZ2UgPj0gcmVkVGhyZXNob2xkKSB7XG5cdFx0cmVzID0gXCJcdTIwM0NcdUZFMEZcIjtcblx0fSBlbHNlIHtcblx0XHRyZXMgPSBcIlx1MjcwNSBcIjtcblx0fVxuXHRyZXR1cm4gYCR7cmVzfSAke3NpZ24ocGVyY2VudENoYW5nZSl9YDtcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJub2RlOnByb2Nlc3NcIjtcblxuaW1wb3J0ICogYXMgY29uc29sZSBmcm9tIFwibm9kZTpjb25zb2xlXCI7XG5pbXBvcnQgeyBnbG9iU3luYyB9IGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0LCBSZXBvcnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgbG9hZE1ldGFGaWxlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydChpbnB1dDogSW5wdXQpOiB2b2lkIHtcblx0Y29uc3QgYWxsUGFnZVNpemVzID0gZ2V0QWxsUGFnZVNpemVzKGlucHV0KTtcblx0ZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSksIHtcblx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdH0pO1xuXHRjb25zdCByZXN1bHRKc29uUGF0aCA9IHBhdGguam9pbihcblx0XHRwcm9jZXNzLmN3ZCgpLFxuXHRcdGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LFxuXHRcdFwiYnVuZGxlX2FuYWx5c2lzLmpzb25cIixcblx0KTtcblx0ZnMud3JpdGVGaWxlU3luYyhyZXN1bHRKc29uUGF0aCwgSlNPTi5zdHJpbmdpZnkoYWxsUGFnZVNpemVzLCBudWxsLCAyKSk7XG5cdGNvbnNvbGUubG9nKGBXcm90ZSAke3Jlc3VsdEpzb25QYXRofWApO1xufVxuXG5pbnRlcmZhY2UgTWV0YWZpbGVQYXRoIHtcblx0cmVhZG9ubHkgcmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGFic29sdXRlUGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE1ldGFmaWxlcyhpbnB1dDogSW5wdXQpOiBNZXRhZmlsZVBhdGhbXSB7XG5cdHJldHVybiBpbnB1dC5tZXRhZmlsZXMuZmxhdE1hcCgobWV0YWZpbGUpID0+IHtcblx0XHRyZXR1cm4gZ2xvYlN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG1ldGFmaWxlKSwge1xuXHRcdFx0bm9kaXI6IHRydWUsXG5cdFx0fSkubWFwKChtZXRhRmlsZVBhdGgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBtZXRhRmlsZVBhdGgpLFxuXHRcdFx0XHRhYnNvbHV0ZVBhdGg6IG1ldGFGaWxlUGF0aCxcblx0XHRcdH07XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxQYWdlU2l6ZXMoaW5wdXQ6IElucHV0KTogUmVwb3J0IHtcblx0Y29uc3QgYWNjOiBSZXBvcnQgPSB7fTtcblx0cmV0dXJuIGZpbmRNZXRhZmlsZXMoaW5wdXQpLnJlZHVjZSgoYWNjLCB7IHJlbGF0aXZlUGF0aCwgYWJzb2x1dGVQYXRoIH0pID0+IHtcblx0XHR0cnkge1xuXHRcdFx0ZnMuYWNjZXNzU3luYyhhYnNvbHV0ZVBhdGgsIGZzLmNvbnN0YW50cy5SX09LKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdGBObyBtZXRhIGZpbGUgZm91bmQgYXQgXCIke2Fic29sdXRlUGF0aH1cIiAtIGEgcGF0aCB0byBtZXRhIGZpbGUgbWF5IGJlIHdyb25nLCBvciBlc2J1aWxkIGlzIG5vdCBleGVjdXRlZC5gLFxuXHRcdFx0KTtcblx0XHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0XHR9XG5cblx0XHRjb25zdCBtZXRhRmlsZUpzb24gPSBsb2FkTWV0YUZpbGUoYWJzb2x1dGVQYXRoKTtcblx0XHRPYmplY3QuZW50cmllcyhtZXRhRmlsZUpzb24ub3V0cHV0cykucmVkdWNlKChhY2MsIG91dHB1dCkgPT4ge1xuXHRcdFx0Y29uc3QgW291dGZpbGUsIGJ1aWxkTWV0YV0gPSBvdXRwdXQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFpbnB1dC5pbmNsdWRlRXh0ZW5zaW9ucy5zb21lKChleHQpID0+XG5cdFx0XHRcdFx0b3V0ZmlsZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCksXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0fVxuXHRcdFx0YWNjW2Ake3JlbGF0aXZlUGF0aH0gLT4gJHtvdXRmaWxlfWBdID0ge1xuXHRcdFx0XHRieXRlczogYnVpbGRNZXRhLmJ5dGVzLFxuXHRcdFx0XHRtZXRhZmlsZTogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRvdXRmaWxlLFxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBhY2M7XG5cdFx0fSwgYWNjKTtcblx0XHRyZXR1cm4gYWNjO1xuXHR9LCBhY2MpO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuXG5pbXBvcnQgdHlwZSB7IE1ldGFmaWxlIH0gZnJvbSBcImVzYnVpbGRcIjtcbmltcG9ydCB0eXBlIHsgUmVwb3J0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gbG9hZEpzb25GaWxlKHBhdGg6IHN0cmluZykge1xuXHRyZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aCkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWV0YUZpbGUocGF0aDogc3RyaW5nKTogTWV0YWZpbGUge1xuXHRyZXR1cm4gbG9hZEpzb25GaWxlKHBhdGgpIGFzIE1ldGFmaWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFuYWx5c2lzSnNvbihwYXRoOiBzdHJpbmcpOiBSZXBvcnQge1xuXHRyZXR1cm4gbG9hZEpzb25GaWxlKHBhdGgpIGFzIFJlcG9ydDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iLzgxYTczYWJhOGJlZGQ1MzJmNmVkZGNjNDFlZDNhMGZhZDhiMWNmZWIvcGFja2FnZXMvY29yZS9zcmMvY29yZS50cyNMMTI2XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2luZ2xlSW5wdXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS50b1VwcGVyQ2FzZSgpfWBdIHx8IFwiXCI7XG5cdHJldHVybiB2YWwudHJpbSgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFNBQVMscUJBQXFCOzs7QUNBOUIsT0FBT0EsU0FBUTtBQUNmLE9BQU9DLFdBQVU7OztBQ0RqQixPQUFPQyxTQUFRO0FBQ2YsT0FBT0MsV0FBVTtBQUNqQixPQUFPQyxjQUFhO0FBRXBCLFlBQVlDLGNBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNKekIsT0FBTyxRQUFRO0FBS2YsU0FBUyxhQUFhQyxPQUFjO0FBQ25DLFNBQU8sS0FBSyxNQUFNLEdBQUcsYUFBYUEsS0FBSSxFQUFFLFNBQVMs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QUMsR0FBRztBQUFBLE1BQzlELEVBQUU7QUFBQSxJQUNILENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQyxHQUFHLGNBQWMsUUFBUSxDQUFDLENBQUM7QUFBQSxFQUNyRDtBQUNBLFNBQU87QUFDUjtBQUVBLFNBQVMsS0FBSyxLQUFxQjtBQUNsQyxTQUFPLE1BQU0sSUFBSSxLQUFLO0FBQ3ZCO0FBRUEsU0FBUyxzQkFDUixlQUNBLGNBQ1M7QUFDVCxNQUFJO0FBQ0osTUFBSSxnQkFBZ0IsS0FBSyxnQkFBZ0IsY0FBYztBQUN0RCxVQUFNO0FBQUEsRUFDUCxXQUFXLGlCQUFpQixjQUFjO0FBQ3pDLFVBQU07QUFBQSxFQUNQLE9BQU87QUFDTixVQUFNO0FBQUEsRUFDUDtBQUNBLFNBQU8sR0FBRyxHQUFHLElBQUksS0FBSyxhQUFhLENBQUM7QUFDckM7OztBRHhWQSxTQUFTLFdBQWtCO0FBQzFCLFFBQU0sZUFBZSxlQUFlLFdBQVc7QUFDL0MsTUFBSSxDQUFDLGNBQWM7QUFDbEIsVUFBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQUEsRUFDN0M7QUFDQSxRQUFNLE9BQU8sZUFBZSxNQUFNO0FBQ2xDLE1BQUksQ0FBQyxNQUFNO0FBQ1YsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDeEM7QUFDQSxTQUFPO0FBQUEsSUFDTix1QkFBdUIsT0FBTztBQUFBLE1BQzdCLGVBQWUseUJBQXlCLEtBQUs7QUFBQSxNQUM3QztBQUFBLElBQ0Q7QUFBQSxJQUNBLGFBQWEsQ0FBQyxRQUFRLFFBQVEsTUFBTSxFQUFFO0FBQUEsTUFDckMsZUFBZSxjQUFjLEtBQUs7QUFBQSxJQUNuQztBQUFBLElBQ0Esa0JBQWtCLE9BQU87QUFBQSxNQUN4QixlQUFlLHFCQUFxQixLQUFLO0FBQUEsTUFDekM7QUFBQSxJQUNEO0FBQUEsSUFDQSxvQkFDQyxlQUFlLG9CQUFvQixLQUFLLGlCQUN2QyxNQUFNLEdBQUc7QUFBQSxJQUNYO0FBQUEsSUFDQSxtQkFBbUIsZUFBZSxtQkFBbUIsS0FBSztBQUFBLElBQzFELFdBQVcsYUFBYSxNQUFNLEdBQUc7QUFBQSxFQUNsQztBQUNEO0FBRU8sU0FBUyxJQUFJLFFBQWUsU0FBUyxHQUFTO0FBQ3BELFNBQU8sS0FBSztBQUNaLFVBQVEsS0FBSztBQUNkO0FBRUEsSUFBSSxZQUFZLFFBQVEsY0FBYyxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTTtBQUM1RCxNQUFJO0FBQ0w7IiwKICAibmFtZXMiOiBbImZzIiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJwcm9jZXNzIiwgImNvbnNvbGUiLCAicGF0aCIsICJmcyIsICJwYXRoIiwgInByb2Nlc3MiLCAiYWNjIiwgImV4dCIsICJwYXRoIiwgImZzIiwgImlucHV0IiwgImNoaWxkIiwgInNpZ24iXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb21wYXJlLnRzIiwgIi4uL3NyYy9yZXBvcnQudHMiLCAiLi4vc3JjL3V0aWxzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBjb21wYXJlIH0gZnJvbSBcIi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgcmVwb3J0IH0gZnJvbSBcIi4vcmVwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldFNpbmdsZUlucHV0IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gZ2V0SW5wdXQoKTogSW5wdXQge1xuXHRjb25zdCByYXdNZXRhZmlsZXMgPSBnZXRTaW5nbGVJbnB1dChcIm1ldGFmaWxlc1wiKTtcblx0aWYgKCFyYXdNZXRhZmlsZXMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZmlsZXMgaXMgbm90IHNwZWNpZmllZFwiKTtcblx0fVxuXHRjb25zdCBuYW1lID0gZ2V0U2luZ2xlSW5wdXQoXCJuYW1lXCIpO1xuXHRpZiAoIW5hbWUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIG5vdCBzcGVjaWZpZWRcIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50RXh0cmFBdHRlbnRpb246IE51bWJlci5wYXJzZUludChcblx0XHRcdGdldFNpbmdsZUlucHV0KFwicGVyY2VudF9leHRyYV9hdHRlbnRpb25cIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRzaG93RGV0YWlsczogW1widHJ1ZVwiLCBcIlRydWVcIiwgXCJUUlVFXCJdLmluY2x1ZGVzKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJzaG93X2RldGFpbHNcIikgfHwgXCJ0cnVlXCIsXG5cdFx0KSxcblx0XHR0b3BOTGFyZ2VzdFBhdGhzOiBOdW1iZXIucGFyc2VJbnQoXG5cdFx0XHRnZXRTaW5nbGVJbnB1dChcInRvcF9uX2xhcmdlc3RfcGF0aHNcIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRpbmNsdWRlRXh0ZW5zaW9uczogKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJpbmNsdWRlX2V4dGVuc2lvbnNcIikgfHwgXCIuanMsLm1qcywuY2pzXCJcblx0XHQpLnNwbGl0KFwiLFwiKSxcblx0XHRuYW1lLFxuXHRcdGFuYWx5emVyRGlyZWN0b3J5OiBnZXRTaW5nbGVJbnB1dChcImFuYWx5emVfZGlyZWN0b3J5XCIpIHx8IFwiLmFuYWx5emVyXCIsXG5cdFx0bWV0YWZpbGVzOiByYXdNZXRhZmlsZXMuc3BsaXQoXCIsXCIpLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuKGlucHV0OiBJbnB1dCA9IGdldElucHV0KCkpOiB2b2lkIHtcblx0cmVwb3J0KGlucHV0KTtcblx0Y29tcGFyZShpbnB1dCk7XG59XG5cbmlmIChpbXBvcnQubWV0YS51cmwgPT09IHBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5hcmd2WzFdKS5ocmVmKSB7XG5cdHJ1bigpO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmluZE1ldGFmaWxlcyB9IGZyb20gXCIuL3JlcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJlUmVzdWx0LCBJbnB1dCwgUmVwb3J0LCBUcmVlTWFwTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkQW5hbHlzaXNKc29uLCBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShpbnB1dDogSW5wdXQpOiB2b2lkIHtcblx0bGV0IGhhc0FueUNoYW5nZSA9IGZhbHNlO1xuXHRsZXQgb3V0cHV0ID0gYCMjIFx1RDgzRFx1RENFNiBlc2J1aWxkIEJ1bmRsZSBBbmFseXNpcyBmb3IgJHtpbnB1dC5uYW1lfVxuXG5UaGlzIGFuYWx5c2lzIHdhcyBnZW5lcmF0ZWQgYnkgW2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyXShodHRwczovL2dpdGh1Yi5jb20vZXhvZWdvL2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyKS4gXHVEODNFXHVERDE2XG5gO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSBsb2FkQW5hbHlzaXNKc29uKFxuXHRcdHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSwgXCJidW5kbGVfYW5hbHlzaXMuanNvblwiKSxcblx0KTtcblx0Y29uc3QgYmFzZSA9IGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0KTtcblxuXHRjb25zdCBmaWxlVHJlZSA9IGJ1aWxkRmlsZVRyZWUoaW5wdXQpO1xuXG5cdGNvbnN0IGFsbE91dEZpbGVzOiBzdHJpbmdbXSA9IFtcblx0XHQuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhjdXJyZW50KSwgLi4uT2JqZWN0LmtleXMoYmFzZSldKSxcblx0XS5zb3J0KCk7XG5cblx0Y29uc3QgY29tcGFyaXNvbjogQXJyYXk8Q29tcGFyZVJlc3VsdD4gPSBhbGxPdXRGaWxlcy5tYXAoKG91dGZpbGUpID0+IHtcblx0XHRjb25zdCBjdXJyZW50U3RhdHMgPSBjdXJyZW50W291dGZpbGVdO1xuXHRcdGNvbnN0IGJhc2VTdGF0cyA9IGJhc2Vbb3V0ZmlsZV07XG5cblx0XHRpZiAoIWN1cnJlbnRTdGF0cykge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLmJhc2VTdGF0cyxcblx0XHRcdFx0YmFzZUJ5dGVzOiAtMSxcblx0XHRcdFx0cmVtYXJrOiBcImRlbGV0ZWRcIixcblx0XHRcdFx0dHJlZTogdW5kZWZpbmVkLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCB0cmVlID0gZmlsZVRyZWUuZ2V0KFxuXHRcdFx0dHJlZUtleShjdXJyZW50U3RhdHMubWV0YWZpbGUsIGN1cnJlbnRTdGF0cy5vdXRmaWxlKSxcblx0XHQpO1xuXHRcdGlmICghYmFzZVN0YXRzKSB7XG5cdFx0XHRoYXNBbnlDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHsgLi4uY3VycmVudFN0YXRzLCBiYXNlQnl0ZXM6IC0xLCByZW1hcms6IFwiYWRkZWRcIiwgdHJlZSB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpZmYgPSBjdXJyZW50U3RhdHMuYnl0ZXMgLSBiYXNlU3RhdHMuYnl0ZXM7XG5cdFx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRcdGhhc0FueUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5jdXJyZW50U3RhdHMsXG5cdFx0XHRiYXNlQnl0ZXM6IGJhc2VTdGF0cy5ieXRlcyxcblx0XHRcdHRyZWUsXG5cdFx0XHRyZW1hcms6IE1hdGguc2lnbihkaWZmKSA/IFwiaW5jcmVhc2VkXCIgOiBcImRlY3JlYXNlZFwiLFxuXHRcdH07XG5cdH0pO1xuXG5cdGlmIChoYXNBbnlDaGFuZ2UpIHtcblx0XHRvdXRwdXQgKz0gbWFya2Rvd25UYWJsZShjb21wYXJpc29uLCBpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb24pO1xuXHRcdG91dHB1dCArPSBmaWxlU2l6ZVRhYmxlKGNvbXBhcmlzb24sIGlucHV0LnRvcE5MYXJnZXN0UGF0aHMpO1xuXHRcdG91dHB1dCArPSBkZXRhaWwoaW5wdXQpO1xuXHR9IGVsc2Uge1xuXHRcdG91dHB1dCArPSBcIlRoaXMgUFIgaW50cm9kdWNlZCBubyBjaGFuZ2VzIHRvIHRoZSBlc2J1aWxkIGJ1bmRsZSEgXHVEODNEXHVERTRDXCI7XG5cdH1cblxuXHQvLyB3ZSBhZGQgdGhpcyB0YWcgc28gdGhhdCBvdXIgYWN0aW9uIGNhbiBiZSBhYmxlIHRvIGVhc2lseSBhbmRcblx0Ly8gY29uc2lzdGVudGx5IGZpbmQgdGhlIHJpZ2h0IGNvbW1lbnQgdG8gZWRpdCBhcyBtb3JlIGNvbW1pdHMgYXJlIHB1c2hlZC5cblx0b3V0cHV0ICs9IGA8IS0tIF9fRVNCVUlMRF9CVU5ETEVfJHtpbnB1dC5uYW1lfSAtLT5gO1xuXG5cdHdyaXRlQ29tbWVudChpbnB1dCwgb3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gdHJlZUtleShtZXRhZmlsZTogc3RyaW5nLCBvdXRmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7bWV0YWZpbGV9IC0+ICR7b3V0ZmlsZX1gO1xufVxuXG4vLyBXcml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSB3aGljaCBpcyBsYXRlciByZWFkIGluXG4vLyBhcyBjb21tZW50IGNvbnRlbnRzIGJ5IHRoZSBhY3Rpb25zIHdvcmtmbG93LlxuZnVuY3Rpb24gd3JpdGVDb21tZW50KGlucHV0OiBJbnB1dCwgb3V0cHV0OiBzdHJpbmcpOiB2b2lkIHtcblx0ZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSksIHtcblx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdH0pO1xuXHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdHBhdGguam9pbihcblx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcdFwiYnVuZGxlX2FuYWx5c2lzX2NvbW1lbnQudHh0XCIsXG5cdFx0KSxcblx0XHRvdXRwdXQudHJpbSgpLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBkZXRhaWwoaW5wdXQ6IElucHV0KTogc3RyaW5nIHtcblx0aWYgKCFpbnB1dC5zaG93RGV0YWlscykge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBgXFxuPGRldGFpbHM+XG48c3VtbWFyeT5EZXRhaWxzPC9zdW1tYXJ5PlxuPHA+TmV4dCB0byB0aGUgc2l6ZSBpcyBob3cgbXVjaCB0aGUgc2l6ZSBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBjb21wYXJlZCB3aXRoIHRoZSBiYXNlIGJyYW5jaCBvZiB0aGlzIFBSLjwvcD5cbjx1bD5cbjxsaT5cdTIwM0NcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGJ5ICR7aW5wdXQucGVyY2VudEV4dHJhQXR0ZW50aW9ufSUgb3IgbW9yZS4gU3BlY2lhbCBhdHRlbnRpb24gc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMuPC9saT5cbjxsaT5cdTI2QTBcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGluIGFjY2VwdGFibGUgcmFuZ2UgKGxvd2VyIHRoYW4gJHtpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb259JSkuPC9saT5cbjxsaT5cdTI3MDU6IE5vIGNoYW5nZSBvciBldmVuIGRvd25zaXplZC48L2xpPlxuPGxpPlx1RDgzRFx1REREMVx1RkUwRjogVGhlIG91dCBmaWxlIGlzIGRlbGV0ZWQ6IG5vdCBmb3VuZCBpbiBiYXNlIGJyYW5jaC48L2xpPlxuPGxpPlx1RDgzQ1x1REQ5NTogVGhlIG91dCBmaWxlIGlzIG5ld2x5IGZvdW5kOiB3aWxsIGJlIGFkZGVkIHRvIGJhc2UgYnJhbmNoLjwvbGk+XG48L3VsPlxuPC9kZXRhaWxzPlxcbmA7XG59XG5cbmZ1bmN0aW9uIGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0OiBJbnB1dCk6IFJlcG9ydCB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGxvYWRBbmFseXNpc0pzb24oXG5cdFx0XHRwYXRoLmpvaW4oXG5cdFx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRcdGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LFxuXHRcdFx0XHRcImJhc2UvYnVuZGxlL2J1bmRsZV9hbmFseXNpcy5qc29uXCIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBFbXB0eSBpZiBubyBiYXNlIGFuYWx5c2lzIGZvdW5kLlxuXHRcdC8vIFRoaXMgaXMgYSBjYXNlIHdoZW4gYW5hbHl6ZXIgaXMgZmlyc3Qgc2V0IHVwIG9yIGFsbCBhcnRpZmFjdHMgYXJlIGV4cGlyZWQuXG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmlsZVRyZWUoaW5wdXQ6IElucHV0KSB7XG5cdGZ1bmN0aW9uIGJ1aWxkUm9vdChcblx0XHRpbnB1dDogUmVjb3JkPHN0cmluZywgeyBieXRlc0luT3V0cHV0OiBudW1iZXIgfT4sXG5cdCk6IFRyZWVNYXBOb2RlIHtcblx0XHRjb25zdCByb290OiBUcmVlTWFwTm9kZSA9IHsgbmFtZTogXCJcIiwgcGF0aDogXCJcIiwgdmFsdWU6IDAsIGNoaWxkcmVuOiBbXSB9O1xuXHRcdGZvciAoY29uc3QgW2ZpbGVQYXRoLCB7IGJ5dGVzSW5PdXRwdXQgfV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG5cdFx0XHRjb25zdCBkaXJlY3RvcmllcyA9IGZpbGVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGJ1aWxkTm9kZShyb290LCBkaXJlY3RvcmllcywgYnl0ZXNJbk91dHB1dCk7XG5cdFx0fVxuXHRcdHJldHVybiByb290O1xuXHR9XG5cblx0ZnVuY3Rpb24gYnVpbGROb2RlKFxuXHRcdG5vZGU6IFRyZWVNYXBOb2RlLFxuXHRcdHBhdGhzOiBBcnJheTxzdHJpbmc+LFxuXHRcdHZhbHVlOiBudW1iZXIsXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0ID0gcGF0aHMuc2hpZnQoKTtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbGVhZiBub2RlIChmaWxlKVxuXHRcdFx0bm9kZS52YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGNoaWxkID0gbm9kZS5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PT0gZmlyc3QpO1xuXHRcdGlmICghY2hpbGQpIHtcblx0XHRcdGNoaWxkID0ge1xuXHRcdFx0XHRuYW1lOiBmaXJzdCxcblx0XHRcdFx0cGF0aDogYCR7bm9kZS5wYXRofS8ke2ZpcnN0fWAucmVwbGFjZSgvXlxcLy8sIFwiXCIpLFxuXHRcdFx0XHR2YWx1ZTogMCxcblx0XHRcdFx0Y2hpbGRyZW46IFtdLFxuXHRcdFx0fTtcblx0XHRcdG5vZGUuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHRcdG5vZGUudmFsdWUgKz0gdmFsdWU7XG5cdFx0YnVpbGROb2RlKGNoaWxkLCBwYXRocywgdmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHJlZXMgPSBuZXcgTWFwPHN0cmluZywgVHJlZU1hcE5vZGU+KCk7XG5cdGlmIChpbnB1dC50b3BOTGFyZ2VzdFBhdGhzIDw9IDApIHtcblx0XHQvLyBTa2lwIGJ1aWxkaW5nIHRyZWUgaWYgd2UgZG9uJ3QgbmVlZCBpdC5cblx0XHRyZXR1cm4gdHJlZXM7XG5cdH1cblx0Zm9yIChjb25zdCB7IHJlbGF0aXZlUGF0aCwgYWJzb2x1dGVQYXRoIH0gb2YgZmluZE1ldGFmaWxlcyhpbnB1dCkpIHtcblx0XHRjb25zdCBtZXRhZmlsZUpzb24gPSBsb2FkTWV0YUZpbGUoYWJzb2x1dGVQYXRoKTtcblx0XHRmb3IgKGNvbnN0IFtvdXRmaWxlLCBidWlsZE1ldGFdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFmaWxlSnNvbi5vdXRwdXRzKSkge1xuXHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkUm9vdChidWlsZE1ldGEuaW5wdXRzKTtcblx0XHRcdHRyZWVzLnNldCh0cmVlS2V5KHJlbGF0aXZlUGF0aCwgb3V0ZmlsZSksIHRyZWUpO1xuXG5cdFx0XHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdFx0XHRwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgaW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksIFwidHJlZS5qc29uXCIpLFxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh0cmVlLCBudWxsLCAyKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cmVlcztcbn1cblxuY29uc3Qgc3BhY2VyID0gXCJcdTAwQTBcIjtcbmZ1bmN0aW9uIGZpbGVzaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuXHRjb25zdCBzaWduID0gYnl0ZXMgPCAwID8gXCItXCIgOiBcIlwiO1xuXHRjb25zdCBuID0gTWF0aC5hYnMoYnl0ZXMpO1xuXHRpZiAobiA8IDEwMDApIHtcblx0XHRyZXR1cm4gYCR7c2lnbn0ke259JHtzcGFjZXJ9QmA7XG5cdH1cblx0aWYgKG4gPCAxMDAwICogMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7KG4gLyAxMDAwKS50b0ZpeGVkKDIpfSR7c3BhY2VyfUtCYDtcblx0fVxuXHRpZiAobiA8IDEwMDAgKiAxMDAwICogMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7KG4gLyAxMDAwIC8gMTAwMCkudG9GaXhlZCgyKX0ke3NwYWNlcn1NQmA7XG5cdH1cblx0aWYgKG4gPCAxMDAwICogMTAwMCAqIDEwMDAgKiAxMDAwKSB7XG5cdFx0cmV0dXJuIGAke3NpZ259JHsobiAvIDEwMDAgLyAxMDAwIC8gMTAwMCkudG9GaXhlZCgyKX0ke3NwYWNlcn1HQmA7XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwiVG9vIGxhcmdlIGZpbGUgc2l6ZSEhIEFyZSB5b3Ugc3VyZT9cIik7XG59XG5cbmZ1bmN0aW9uIG1hcmtkb3duVGFibGUoXG5cdGRhdGE6IEFycmF5PENvbXBhcmVSZXN1bHQ+LFxuXHRyZWRUaHJlc2hvbGQ6IG51bWJlcixcbik6IHN0cmluZyB7XG5cdGNvbnN0IHJvd3MgPSBkYXRhXG5cdFx0Lm1hcCgoZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGAke2QubWV0YWZpbGV9IHwgJHtkLm91dGZpbGV9IHwgJHtyZW5kZXJTaXplKGQpfSB8ICR7cmVuZGVyTm90ZShcblx0XHRcdFx0ZCxcblx0XHRcdFx0cmVkVGhyZXNob2xkLFxuXHRcdFx0KX1cXG5gO1xuXHRcdH0pXG5cdFx0LmpvaW4oXCJcIik7XG5cblx0cmV0dXJuIGBcbk1ldGEgRmlsZSB8IE91dCBGaWxlICB8IFNpemUgKHJhdykgfCBOb3RlIFxuLS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tOnwtLS0tLS1cbiR7cm93c31gO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHRvcCBOIGxhcmdlc3Qgbm9kZXMgaW4gcm9vdCB0cmVlLlxuICogRGlnIG5vZGVzIHVudGlsIHRoZSBkZXB0aCBvZiAzLlxuICovXG5mdW5jdGlvbiBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhyb290OiBUcmVlTWFwTm9kZSwgTjogbnVtYmVyKSB7XG5cdGNvbnN0IG5vZGVzOiBUcmVlTWFwTm9kZVtdID0gW107XG5cdGNvbnN0IHF1ZXVlOiBBcnJheTx7IG5vZGU6IFRyZWVNYXBOb2RlOyBkZXB0aDogbnVtYmVyIH0+ID0gW1xuXHRcdHsgbm9kZTogcm9vdCwgZGVwdGg6IDAgfSxcblx0XTtcblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBzaGlmdCA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0aWYgKCFzaGlmdCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IHsgbm9kZSwgZGVwdGggfSA9IHNoaWZ0O1xuXHRcdGlmIChkZXB0aCA9PT0gMykge1xuXHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdG5vZGVzLnB1c2gobm9kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBub2RlLmNoaWxkcmVuKSB7XG5cdFx0XHRcdHF1ZXVlLnB1c2goeyBub2RlOiBpdGVtLCBkZXB0aDogZGVwdGggKyAxIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBsYXJnZU5vZGVzID0gbm9kZXMuc29ydCgoYSwgYikgPT4gYi52YWx1ZSAtIGEudmFsdWUpLnNsaWNlKDAsIE4pO1xuXHRyZXR1cm4ge1xuXHRcdGxhcmdlTm9kZXMsXG5cdFx0aGFzT3RoZXI6IG5vZGVzLmxlbmd0aCA+IE4sXG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpeGVkUGVyY2VudChuOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCgoKG4gLyBkKSAqIDEwMCkudG9GaXhlZCgxKSk7XG59XG5cbmZ1bmN0aW9uIGZpbGVTaXplVGFibGUoXG5cdGRhdGE6IEFycmF5PENvbXBhcmVSZXN1bHQ+LFxuXHR0b3BOTGFyZ2VzdFBhdGhzOiBudW1iZXIsXG4pOiBzdHJpbmcge1xuXHRpZiAoZGF0YS5sZW5ndGggPT09IDAgfHwgdG9wTkxhcmdlc3RQYXRocyA8PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0bGV0IG91dHB1dCA9IFwiXCI7XG5cdG91dHB1dCArPSBcIjxkZXRhaWxzPlxcblwiO1xuXHRvdXRwdXQgKz0gXCI8c3VtbWFyeT5MYXJnZXN0IHBhdGhzPC9zdW1tYXJ5PlxcblwiO1xuXHRvdXRwdXQgKz0gYFRoZXNlIHZpc3VhbGl6YXRpb24gc2hvd3MgdG9wICR7dG9wTkxhcmdlc3RQYXRoc30gbGFyZ2VzdCBwYXRocyBpbiB0aGUgYnVuZGxlLlxcbmA7XG5cdGZvciAoY29uc3QgZCBvZiBkYXRhKSB7XG5cdFx0b3V0cHV0ICs9IFwiXFxuXCI7XG5cdFx0b3V0cHV0ICs9IGAjIyBNZXRhIGZpbGU6ICR7ZC5tZXRhZmlsZX0sIE91dCBmaWxlOiAke2Qub3V0ZmlsZX1cXG5gO1xuXHRcdGlmICghZC50cmVlKSB7XG5cdFx0XHRvdXRwdXQgKz0gXCJcdUZFMEZcdUZFMEZcdUQ4M0RcdURERDFcdUZFMEZEZWxldGVkXFxuXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IFwifCBQYXRoIHwgU2l6ZSB8XFxuXCI7XG5cdFx0b3V0cHV0ICs9IFwifC0tLS0tLXwtLS0tLS0tfFxcblwiO1xuXHRcdGNvbnN0IHRvdGFsU2l6ZSA9IGQudHJlZS52YWx1ZTtcblx0XHRjb25zdCB7IGxhcmdlTm9kZXMsIGhhc090aGVyIH0gPSBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhcblx0XHRcdGQudHJlZSxcblx0XHRcdHRvcE5MYXJnZXN0UGF0aHMsXG5cdFx0KTtcblx0XHRmb3IgKGNvbnN0IHsgcGF0aCwgdmFsdWUgfSBvZiBsYXJnZU5vZGVzKSB7XG5cdFx0XHRjb25zdCBwZXJjZW50ID0gZml4ZWRQZXJjZW50KHZhbHVlLCB0b3RhbFNpemUpO1xuXHRcdFx0b3V0cHV0ICs9IGB8ICR7cGF0aH0gfCAke3JlbmRlckJhcihwZXJjZW50LCB2YWx1ZSl9IHxcXG5gO1xuXHRcdH1cblx0XHRpZiAoaGFzT3RoZXIpIHtcblx0XHRcdGNvbnN0IG90aGVyU2l6ZSA9IHRvdGFsU2l6ZSAtIGxhcmdlTm9kZXNbMF0udmFsdWU7XG5cdFx0XHRjb25zdCBvdGhlclBlcmNlbnQgPSBmaXhlZFBlcmNlbnQob3RoZXJTaXplLCB0b3RhbFNpemUpO1xuXHRcdFx0b3V0cHV0ICs9IGB8IChvdGhlcikgfCAke3JlbmRlckJhcihvdGhlclBlcmNlbnQsIG90aGVyU2l6ZSl9IHxcXG5gO1xuXHRcdH1cblx0fVxuXHRvdXRwdXQgKz0gXCI8L2RldGFpbHM+XFxuXCI7XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhcihwZXJjZW50OiBudW1iZXIsIGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuXHRjb25zdCBiYXIgPSBwcm9ncmVzcyhwZXJjZW50IC8gMTAwKTtcblx0cmV0dXJuIGBcXCR7e1xcXFxjb2xvcntHb2xkZW5yb2R9eyAke2Jhcn0gfX19XFwkICR7cGVyY2VudC50b0ZpeGVkKFxuXHRcdDEsXG5cdCl9JSwgJHtmaWxlc2l6ZShieXRlcyl9YDtcbn1cblxuLy8gQmxvY2sgcHJvZ3Jlc3Npb24gaXMgMS84ID0gMC4xMjVcbmNvbnN0IGJsb2NrcyA9IFtcIlwiLCBcIlx1MjU4RlwiLCBcIlx1MjU4RVwiLCBcIlx1MjU4RFwiLCBcIlx1MjU4Q1wiLCBcIlx1MjU4QlwiLCBcIlx1MjU4QVwiLCBcIlx1MjU4OVwiLCBcIlx1MjU4OFwiXTtcbmNvbnN0IHByb2dyZXNzaW9uID0gMSAvIChibG9ja3MubGVuZ3RoIC0gMSk7XG5mdW5jdGlvbiBwcm9ncmVzcyh2YWx1ZTogbnVtYmVyLCBsZW5ndGggPSAyNSwgdm1pbiA9IDAuMCwgdm1heCA9IDEuMCkge1xuXHRjb25zdCB2ID0gdmFsdWUgKiBsZW5ndGg7XG5cdGNvbnN0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcih2KTtcblx0Y29uc3QgZnJhY3Rpb25hbFBhcnQgPSB2IC0gaW50ZWdlclBhcnQ7XG5cdGNvbnN0IGkgPSBNYXRoLnJvdW5kKFxuXHRcdChwcm9ncmVzc2lvbiAqIE1hdGguZmxvb3IoZnJhY3Rpb25hbFBhcnQgLyBwcm9ncmVzc2lvbikpIC8gcHJvZ3Jlc3Npb24sXG5cdCk7XG5cdHJldHVybiBcIlx1MjU4OFwiLnJlcGVhdChpbnRlZ2VyUGFydCkgKyBibG9ja3NbaV07XG59XG5cbmZ1bmN0aW9uIHJlbmRlclNpemUoZDogQ29tcGFyZVJlc3VsdCk6IHN0cmluZyB7XG5cdHJldHVybiBmaWxlc2l6ZShkLmJ5dGVzKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTm90ZShkOiBDb21wYXJlUmVzdWx0LCByZWRUaHJlc2hvbGQ6IG51bWJlcik6IHN0cmluZyB7XG5cdGlmIChkLnJlbWFyayA9PT0gXCJkZWxldGVkXCIpIHtcblx0XHRyZXR1cm4gXCJcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlZFwiO1xuXHR9XG5cdGlmIChkLnJlbWFyayA9PT0gXCJhZGRlZFwiKSB7XG5cdFx0cmV0dXJuIFwiXHVEODNDXHVERDk1IEFkZGVkXCI7XG5cdH1cblx0Y29uc3QgZGlmZiA9IGQuYnl0ZXMgLSBkLmJhc2VCeXRlcztcblx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRjb25zdCBwZXJjZW50Q2hhbmdlID0gKGRpZmYgLyBkLmJhc2VCeXRlcykgKiAxMDA7XG5cdFx0cmV0dXJuIGAke3JlbmRlclN0YXR1c0luZGljYXRvcihwZXJjZW50Q2hhbmdlLCByZWRUaHJlc2hvbGQpfSR7ZmlsZXNpemUoXG5cdFx0XHRkaWZmLFxuXHRcdCl9ICgke3NpZ24ocGVyY2VudENoYW5nZSl9JHtwZXJjZW50Q2hhbmdlLnRvRml4ZWQoMSl9JSlgO1xuXHR9XG5cdHJldHVybiBcIlx1MjcwNSAgTm8gY2hhbmdlXCI7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuXHRyZXR1cm4gbnVtIDwgMCA/IFwiXCIgOiBcIitcIjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3RhdHVzSW5kaWNhdG9yKFxuXHRwZXJjZW50Q2hhbmdlOiBudW1iZXIsXG5cdHJlZFRocmVzaG9sZDogbnVtYmVyLFxuKTogc3RyaW5nIHtcblx0bGV0IHJlczogc3RyaW5nO1xuXHRpZiAocGVyY2VudENoYW5nZSA+IDAgJiYgcGVyY2VudENoYW5nZSA8IHJlZFRocmVzaG9sZCkge1xuXHRcdHJlcyA9IFwiXHUyNkEwXHVGRTBGXCI7XG5cdH0gZWxzZSBpZiAocGVyY2VudENoYW5nZSA+PSByZWRUaHJlc2hvbGQpIHtcblx0XHRyZXMgPSBcIlx1MjAzQ1x1RkUwRlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IFwiXHUyNzA1IFwiO1xuXHR9XG5cdHJldHVybiBgJHtyZXN9ICR7c2lnbihwZXJjZW50Q2hhbmdlKX1gO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuXG5pbXBvcnQgKiBhcyBjb25zb2xlIGZyb20gXCJub2RlOmNvbnNvbGVcIjtcbmltcG9ydCB7IGdsb2JTeW5jIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQsIFJlcG9ydCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0KGlucHV0OiBJbnB1dCk6IHZvaWQge1xuXHRjb25zdCBhbGxQYWdlU2l6ZXMgPSBnZXRBbGxQYWdlU2l6ZXMoaW5wdXQpO1xuXHRmcy5ta2RpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGlucHV0LmFuYWx5emVyRGlyZWN0b3J5KSwge1xuXHRcdHJlY3Vyc2l2ZTogdHJ1ZSxcblx0fSk7XG5cdGNvbnN0IHJlc3VsdEpzb25QYXRoID0gcGF0aC5qb2luKFxuXHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0aW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksXG5cdFx0XCJidW5kbGVfYW5hbHlzaXMuanNvblwiLFxuXHQpO1xuXHRmcy53cml0ZUZpbGVTeW5jKHJlc3VsdEpzb25QYXRoLCBKU09OLnN0cmluZ2lmeShhbGxQYWdlU2l6ZXMsIG51bGwsIDIpKTtcblx0Y29uc29sZS5sb2coYFdyb3RlICR7cmVzdWx0SnNvblBhdGh9YCk7XG59XG5cbmludGVyZmFjZSBNZXRhZmlsZVBhdGgge1xuXHRyZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0cmVhZG9ubHkgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWV0YWZpbGVzKGlucHV0OiBJbnB1dCk6IE1ldGFmaWxlUGF0aFtdIHtcblx0cmV0dXJuIGlucHV0Lm1ldGFmaWxlcy5mbGF0TWFwKChtZXRhZmlsZSkgPT4ge1xuXHRcdHJldHVybiBnbG9iU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbWV0YWZpbGUpLCB7XG5cdFx0XHRub2RpcjogdHJ1ZSxcblx0XHR9KS5tYXAoKG1ldGFGaWxlUGF0aCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIG1ldGFGaWxlUGF0aCksXG5cdFx0XHRcdGFic29sdXRlUGF0aDogbWV0YUZpbGVQYXRoLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFsbFBhZ2VTaXplcyhpbnB1dDogSW5wdXQpOiBSZXBvcnQge1xuXHRjb25zdCBhY2M6IFJlcG9ydCA9IHt9O1xuXHRyZXR1cm4gZmluZE1ldGFmaWxlcyhpbnB1dCkucmVkdWNlKChhY2MsIHsgcmVsYXRpdmVQYXRoLCBhYnNvbHV0ZVBhdGggfSkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRmcy5hY2Nlc3NTeW5jKGFic29sdXRlUGF0aCwgZnMuY29uc3RhbnRzLlJfT0spO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YE5vIG1ldGEgZmlsZSBmb3VuZCBhdCBcIiR7YWJzb2x1dGVQYXRofVwiIC0gYSBwYXRoIHRvIG1ldGEgZmlsZSBtYXkgYmUgd3JvbmcsIG9yIGVzYnVpbGQgaXMgbm90IGV4ZWN1dGVkLmAsXG5cdFx0XHQpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1ldGFGaWxlSnNvbiA9IGxvYWRNZXRhRmlsZShhYnNvbHV0ZVBhdGgpO1xuXHRcdE9iamVjdC5lbnRyaWVzKG1ldGFGaWxlSnNvbi5vdXRwdXRzKS5yZWR1Y2UoKGFjYywgb3V0cHV0KSA9PiB7XG5cdFx0XHRjb25zdCBbb3V0ZmlsZSwgYnVpbGRNZXRhXSA9IG91dHB1dDtcblx0XHRcdGlmIChcblx0XHRcdFx0IWlucHV0LmluY2x1ZGVFeHRlbnNpb25zLnNvbWUoKGV4dCkgPT5cblx0XHRcdFx0XHRvdXRmaWxlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KSxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHR9XG5cdFx0XHRhY2NbYCR7cmVsYXRpdmVQYXRofSAtPiAke291dGZpbGV9YF0gPSB7XG5cdFx0XHRcdGJ5dGVzOiBidWlsZE1ldGEuYnl0ZXMsXG5cdFx0XHRcdG1ldGFmaWxlOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdG91dGZpbGUsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBhY2MpO1xuXHRcdHJldHVybiBhY2M7XG5cdH0sIGFjYyk7XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5cbmltcG9ydCB0eXBlIHsgTWV0YWZpbGUgfSBmcm9tIFwiZXNidWlsZFwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvcnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBsb2FkSnNvbkZpbGUocGF0aDogc3RyaW5nKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKS50b1N0cmluZyhcInV0Zi04XCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZXRhRmlsZShwYXRoOiBzdHJpbmcpOiBNZXRhZmlsZSB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgTWV0YWZpbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQW5hbHlzaXNKc29uKHBhdGg6IHN0cmluZyk6IFJlcG9ydCB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgUmVwb3J0O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvODFhNzNhYmE4YmVkZDUzMmY2ZWRkY2M0MWVkM2EwZmFkOGIxY2ZlYi9wYWNrYWdlcy9jb3JlL3NyYy9jb3JlLnRzI0wxMjZcbmV4cG9ydCBmdW5jdGlvbiBnZXRTaW5nbGVJbnB1dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB2YWwgPSBwcm9jZXNzLmVudltgSU5QVVRfJHtuYW1lLnRvVXBwZXJDYXNlKCl9YF0gfHwgXCJcIjtcblx0cmV0dXJuIHZhbC50cmltKCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxxQkFBcUI7OztBQ0E5QixPQUFPQSxTQUFRO0FBQ2YsT0FBT0MsV0FBVTs7O0FDRGpCLE9BQU9DLFNBQVE7QUFDZixPQUFPQyxXQUFVO0FBQ2pCLE9BQU9DLGNBQWE7QUFFcEIsWUFBWUMsY0FBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QixPQUFPO0FBQUEsTUFDeEIsZUFBZSxxQkFBcUIsS0FBSztBQUFBLE1BQ3pDO0FBQUEsSUFDRDtBQUFBLElBQ0Esb0JBQ0MsZUFBZSxvQkFBb0IsS0FBSyxpQkFDdkMsTUFBTSxHQUFHO0FBQUEsSUFDWDtBQUFBLElBQ0EsbUJBQW1CLGVBQWUsbUJBQW1CLEtBQUs7QUFBQSxJQUMxRCxXQUFXLGFBQWEsTUFBTSxHQUFHO0FBQUEsRUFDbEM7QUFDRDtBQUVPLFNBQVMsSUFBSSxRQUFlLFNBQVMsR0FBUztBQUNwRCxTQUFPLEtBQUs7QUFDWixVQUFRLEtBQUs7QUFDZDtBQUVBLElBQUksWUFBWSxRQUFRLGNBQWMsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU07QUFDNUQsTUFBSTtBQUNMOyIsCiAgIm5hbWVzIjogWyJmcyIsICJwYXRoIiwgImZzIiwgInBhdGgiLCAicHJvY2VzcyIsICJjb25zb2xlIiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJwcm9jZXNzIiwgImFjYyIsICJleHQiLCAicGF0aCIsICJmcyIsICJpbnB1dCIsICJjaGlsZCIsICJzaWduIl0KfQo= diff --git a/src/compare.ts b/src/compare.ts index 6ed57d2..3ecdf0f 100644 --- a/src/compare.ts +++ b/src/compare.ts @@ -28,7 +28,12 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe if (!currentStats) { hasAnyChange = true; - return { ...baseStats, diff: -1, remark: "deleted", tree: undefined }; + return { + ...baseStats, + baseBytes: -1, + remark: "deleted", + tree: undefined, + }; } const tree = fileTree.get( @@ -36,7 +41,7 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe ); if (!baseStats) { hasAnyChange = true; - return { ...currentStats, diff: -1, remark: "added", tree }; + return { ...currentStats, baseBytes: -1, remark: "added", tree }; } const diff = currentStats.bytes - baseStats.bytes; @@ -45,7 +50,7 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe } return { ...currentStats, - diff, + baseBytes: baseStats.bytes, tree, remark: Math.sign(diff) ? "increased" : "decreased", }; @@ -322,10 +327,11 @@ function renderNote(d: CompareResult, redThreshold: number): string { if (d.remark === "added") { return "🆕 Added"; } - if (d.diff) { - const percentChange = (d.diff / d.bytes) * 100; + const diff = d.bytes - d.baseBytes; + if (diff !== 0) { + const percentChange = (diff / d.baseBytes) * 100; return `${renderStatusIndicator(percentChange, redThreshold)}${filesize( - d.diff, + diff, )} (${sign(percentChange)}${percentChange.toFixed(1)}%)`; } return "✅ No change"; diff --git a/src/types.ts b/src/types.ts index 10d013a..cd6ad70 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,7 +9,7 @@ export interface CompareResult { metafile: string; outfile: string; bytes: number; - diff: number; + baseBytes: number; remark: "added" | "deleted" | "increased" | "decreased"; tree: TreeMapNode | undefined; }